HighCommander4 wrote:

Apologies for not having had a chance to circle back to this sooner.

I read over the discussion of the [original 
patch](https://github.com/llvm/llvm-project/pull/67749) that added support for 
the `QuotedHeaders` and `AngledHeaders` config keys, and it turns out the 
"resolved path vs. spelling" question does have a back-story.

@sam-mccall 
[commented](https://github.com/llvm/llvm-project/pull/67749#discussion_r1465335864)
 during that review:

> This should mention whether we're matching against the path to the header, or 
> its spelling.

and @kleinesfilmroellchen 
[responded](https://github.com/llvm/llvm-project/pull/67749#discussion_r1466440861):

> We're matching against the spelling; at least in SerenityOS this is a 
> necessary distinction: Naming a same-directory header via `"Widget.h"` will 
> result in quotes, but naming the same header via an "absolute" path like 
> `<LibGUI/Widget.h>` should get you an angled include.

This is what the patch ended up implementing, and documenting [in 
`ConfigFragment.h`](https://searchfox.org/llvm/rev/55c86c5f77437c15fd29936cc8ad48b2097660b3/clang-tools-extra/clangd/ConfigFragment.h#318-319):

```c++
    /// Matching is performed against the header text, not its absolute path
    /// within the project.
```

So, currently there is an inconsistency between the documentation and the 
`IncludeInserter` implementation on the one hand (uses the spelling), and the 
include-cleaner implementation on the other (uses the resolved path). I guess 
we should resolve that inconsistency, in one direction or another.

In addition to the matter of accommodating project styles, one potential 
challenge I see with using the resolved path is that the documentation of 
`include_cleaner::Header::resolvedPath()` 
[states](https://searchfox.org/llvm/rev/55c86c5f77437c15fd29936cc8ad48b2097660b3/clang-tools-extra/include-cleaner/include/clang-include-cleaner/Types.h#139-140):

>  /// For phiscal files, **either absolute path or path relative to the 
> execution
>  /// root**. Otherwise just the spelling without surrounding quotes/brackets.

Having to write regexes that match an "either/or" seems like a bit of a 
headache for users.

@kadircet, thoughts on how to proceed?

https://github.com/llvm/llvm-project/pull/140594
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to