ilya-biryukov added a comment.

My biggest concern is that we seem to make output for template instantiation 
worse.
There should be a way to stop showing anonymous namespace without introducing 
such regressions.



================
Comment at: clang-tools-extra/clangd/Hover.cpp:353
 /// Generate a \p Hover object given the type \p T.
 HoverInfo getHoverContents(QualType T, const Decl *D, ASTContext &ASTCtx,
+                           const SymbolIndex *Index) {
----------------
Not related to this patch, but what is `D` here? Is this getting hover contents 
for a type or for a decl?


================
Comment at: clang-tools-extra/clangd/Hover.cpp:356
   HoverInfo HI;
-  llvm::raw_string_ostream OS(HI.Name);
-  PrintingPolicy Policy = printingPolicyForDecls(ASTCtx.getPrintingPolicy());
-  T.print(OS, Policy);
-  OS.flush();
-
-  if (D) {
+  auto FillInHover = [&HI, Index, &ASTCtx](const Decl *D) {
+    if (const auto *ND = llvm::dyn_cast<NamedDecl>(D))
----------------
NIT: could be simplified to
```
if (!D)
  D = T->getAsTagDecl();
if (!D)
  return HI;

// ... body of FillInHover goes here
```


================
Comment at: clang-tools-extra/clangd/unittests/HoverTests.cpp:365
        [](HoverInfo &HI) {
-         HI.Name = "class (lambda)";
+         // FIXME: Special case lambdas.
+         HI.Name = "(anonymous class)";
----------------
NIT: could you give an example how you want the output to look like?


================
Comment at: clang-tools-extra/clangd/unittests/HoverTests.cpp:377
        [](HoverInfo &HI) {
-         HI.Name = "class Foo<int>";
+         HI.Name = "Foo";
          HI.Kind = index::SymbolKind::Class;
----------------
`Foo<int>` actually looked better. Do you consider this a regression or is this 
intended?


================
Comment at: clang-tools-extra/clangd/unittests/HoverTests.cpp:389
        [](HoverInfo &HI) {
-         HI.Name = "class Foo<int>";
+         HI.Name = "Foo<int>";
          HI.Kind = index::SymbolKind::Class;
----------------
Why does this give different output from the previous example?
I would argue they should both be consistent. Users shouldn't care if there's 
an explicit specialization or not.


================
Comment at: clang-tools-extra/clangd/unittests/HoverTests.cpp:533
+              namespace {
+                inline namespace in_ns2 {
+                  class Foo {};
----------------
What if anon/inline namespace are interleaves with named ones?
What would it print?

```
namespace a { inline namespace inl {  namespace b { namespace { namespace c { 
namespace {
struct X {};
}}}}}}
```
Could we test this?


================
Comment at: clang-tools-extra/clangd/unittests/HoverTests.cpp:1196
           [](HoverInfo &HI) {
-            HI.Name = "class std::initializer_list<int>";
+            // FIXME: Print template instantiation parameters.
+            HI.Name = "initializer_list";
----------------
This looks like a regression. What's stopping us from fixing this right away?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D71543



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to