[PATCH] D144976: [clangd] Add provider info on symbol hover.

Haojian Wu via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon Mar 20 03:57:02 PDT 2023


hokein added a comment.

Thanks, this looks great, some more comments (most are nits)



================
Comment at: clang-tools-extra/clangd/Hover.cpp:1099
+  const SourceManager &SM = AST.getSourceManager();
+  llvm::SmallVector<include_cleaner::Header> Headers =
+      include_cleaner::headersForSymbol(Sym, SM, AST.getPragmaIncludes());
----------------
maybe name it `SortedProviders`, it contains the main-file (calling Headers is a bit confusing).


================
Comment at: clang-tools-extra/clangd/Hover.cpp:1111
+      // Main file ranked higher than any #include'd file
+      break;
+
----------------
if we perform an early `return` inside the loop, the code can be simpler.

```
// Pickup the highest provider that satisfied the symbol usage, if available.
// If the main-file is the chosen provider, we deliberately do not display it (as it may cause too much noise, e.g. for local variables).
for (const auto & H : Headers) {
   if (isMainFile(H)) {
      return;
   }
   if (!Matches.empty()) {
      HI.Provider = Matches[0]->quote();
      return;
   } 
}

HI.Provider = spellHeader(AST...);
```


================
Comment at: clang-tools-extra/clangd/Hover.h:71
   std::string Name;
+  /// Header providing the symbol (best match).
+  std::string Provider;
----------------
nit: mention this header is with `""<>`.


================
Comment at: clang-tools-extra/clangd/IncludeCleaner.h:71
 
+include_cleaner::Includes
+convertIncludes(const SourceManager &SM,
----------------
nit: can you add some document comment on these two functions?


================
Comment at: clang-tools-extra/clangd/unittests/HoverTests.cpp:2896
+  struct Foo {};                     
+  Foo F = [[Fo^o]]{};
+)cpp"),
----------------
looks like `[[]]` is not used in the test, we only use the `^` point. Remove them?


================
Comment at: clang-tools-extra/clangd/unittests/HoverTests.cpp:2897
+  Foo F = [[Fo^o]]{};
+)cpp"),
+                [](HoverInfo &HI) { HI.Provider = ""; }},
----------------
I think making the indentation like below is cleaer:

```
{Annotations(R"cpp(
               struct Foo {}; 
               int F = [[FO^O]]{};
             )cpp"),
 [](HoverInfo &HI) { HI.Provider = ""; }},
```


================
Comment at: clang-tools-extra/clangd/unittests/HoverTests.cpp:2911
+    #define FOO 5
+    int F = [[^FOO]];
+  )cpp"),
----------------
The indentation of the code block doesn't seem to align with the above cases. 

Unfortunately, clang-format doesn't format the codeblock inside the `cpp()cpp` string literal, we need to do it manually.





================
Comment at: clang-tools-extra/clangd/unittests/HoverTests.cpp:2938
+  )cpp"),
+                [](HoverInfo &HI) { HI.Provider = "\"foo.h\""; }}};
+
----------------
I think this should be `""`, the using declaration is defined in main-file, main-file should be the only one provider, and we don't display main-file provider.


================
Comment at: clang-tools-extra/include-cleaner/include/clang-include-cleaner/Analysis.h:16
 #include "clang-include-cleaner/Types.h"
+#include "clang/Basic/SourceLocation.h"
 #include "clang/Format/Format.h"
----------------
we have been using forward declaration for the `SourceLocation`, we can add a forward declaration `class SourceManager` on Line 26, and get rid of the #include here.


================
Comment at: clang-tools-extra/include-cleaner/include/clang-include-cleaner/Analysis.h:84
+/// likely provider for the symbol.
+llvm::SmallVector<Header> headersForSymbol(const Symbol &S,
+                                           const SourceManager &SM,
----------------
since we move it from `AnalysisInternal.h`, can you remove the one in `AnalysisInternal.h`? I think we need to add `#include "Analysis.h"` to `AnalysisInternal.h`.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D144976



More information about the cfe-commits mailing list