[clang-tools-extra] [clangd] Allow specifying what headers are always included via "" or <> (PR #67749)

Nathan Ridge via cfe-commits cfe-commits at lists.llvm.org
Sun Jan 21 23:01:45 PST 2024


HighCommander4 wrote:

> > > What is the relationship between this patch, and clangd 17's ["missing include" warning](https://clangd.llvm.org/guides/include-cleaner#missing-include-warning)? Does the quick-fix for the "missing include" warning also respect these config options?
>
> As far as I can tell, clangd uses the correct header style for inserted includes regardles of how those includes are created (via auto-include on code completion or fix suggestions).

I played around with this a bit, and discovered that there are actually **three** situations in which clangd inserts a header:

 1. During code completion ("header insertion")
 2. In a quick-fix for an **error** diagnostic on an unresolved name ("include fixer")
 3. In a quick-fix for a **warning** diagnostic (technically, a diagnostic with severity [`DiagnosticSeverity.Information`](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#diagnosticSeverity)) on a name that's resolved, but where the file declaring it is not _directly_ included ("include cleaner")

The patch seems to handle the first two, but not the third.

The third scenario can be tested by creating a workspace with the following files:

.clangd:
```yaml
CompileFlags:
  Add: -I.
Diagnostics:
  MissingIncludes: Strict
Style:
  QuotedHeaders: "quoted/.*"
  AngledHeaders: "angled/.*"
```

quoted/quoted.hpp:
```c++
#ifndef QUOTED_HPP_
#define QUOTED_HPP_
void quoted();
#endif
```

angled/angled.hpp:
```c++
#ifndef ANGLED_HPP_
#define ANGLED_HPP_
void angled();
#endif
```

indirect.hpp:
```c++
#include "quoted/quoted.hpp"
#include <angled/angled.hpp>
```

main.cpp:
```c++
#include "indirect.hpp"
int main() {
  quoted();
  angled();
}
```

Now, in main.cpp, if you hover over the `angled` token and accept the quick fix proposed there, the added include is spelled `"angled/angled.hpp"` rather than `<angled/angled.hpp>`.

https://github.com/llvm/llvm-project/pull/67749


More information about the cfe-commits mailing list