[PATCH] D149437: [clangd] Emit ChangeAnnotation label and description for include-cleaner diagnostics.

Kadir Cetinkaya via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue May 2 00:32:09 PDT 2023


kadircet added inline comments.


================
Comment at: clang-tools-extra/clangd/IncludeCleaner.cpp:445
 
-Fix removeAllUnusedIncludes(llvm::ArrayRef<Diag> UnusedIncludes) {
+Fix removeAllUnusedIncludes(llvm::ArrayRef<Diag> UnusedIncludes,
+                            llvm::StringRef Code) {
----------------
what about just taking in `llvm::ArrayRef<const Inclusion *> UnusedIncludes` and having a `TextEdit dropInclude(const Inclusion&);` that we can use in here & inside `generateUnusedIncludeDiagnostics`? That way we can just use the spelling inside the inclusion to generate the `label`, without all the extra logic.


================
Comment at: clang-tools-extra/clangd/IncludeCleaner.cpp:485
   // newText (#include "my_missing_header.h") -> TextEdit.
-  llvm::StringMap<TextEdit> Edits;
+  llvm::StringMap<std::pair<TextEdit, const MissingIncludeDiag*>> Edits;
   for (const auto &Diag : MissingIncludeDiags) {
----------------
i think rather than a single diag info, we should actually store a set of them now, right? as we want to surface not only the "first" use of a header, but all. (possibly with some trimming).


================
Comment at: clang-tools-extra/clangd/IncludeCleaner.cpp:514
+             /*description=*/
+             llvm::formatv("Line {0}: '{1}'", StartLine, Lines[StartLine])}});
   }
----------------
i don't think line information is as useful (as there's no structured link to it). what about something like:

```
label: `Include "foo.h"`
description: `Provides 'X', 'Y', 'Z', ...`
```


================
Comment at: clang-tools-extra/clangd/IncludeCleaner.cpp:550
   std::optional<Fix> FixAll;
   if (RemoveAllUnused && AddAllMissing)
     FixAll = fixAll(*RemoveAllUnused, *AddAllMissing);
----------------
sorry for missing it during last review, but this should actually be `if (!UnusedIncludes.empty() && !MissingIncludeDiags.empty())` as even if we have only 1 fix for each category, we should still show the fix all. probably it deserves a fix in a separate patch.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D149437/new/

https://reviews.llvm.org/D149437



More information about the cfe-commits mailing list