lightmelodies created this revision.
lightmelodies added reviewers: sammccall, kadircet.
lightmelodies added a project: clang-tools-extra.
Herald added subscribers: usaxena95, arphaman.
lightmelodies requested review of this revision.
Herald added subscribers: cfe-commits, MaskRay, ilya-biryukov.
Herald added a project: clang.

This commit fix https://github.com/clangd/clangd/issues/520 and 
https://github.com/clangd/clangd/issues/601.
F15544293: image.png <https://reviews.llvm.org/F15544293>


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D96751

Files:
  clang-tools-extra/clangd/FindSymbols.cpp
  clang-tools-extra/clangd/Hover.cpp
  clang-tools-extra/clangd/Hover.h
  clang-tools-extra/clangd/test/symbols.test

Index: clang-tools-extra/clangd/test/symbols.test
===================================================================
--- clang-tools-extra/clangd/test/symbols.test
+++ clang-tools-extra/clangd/test/symbols.test
@@ -1,5 +1,5 @@
 # RUN: clangd --index-file=%S/Inputs/symbols.test.yaml -lit-test < %s | FileCheck %s
-{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{"workspace":{"symbol":{"symbolKind":{"valueSet": [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]}}}},"trace":"off"}}
+{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{"textDocument":{"documentSymbol":{"hierarchicalDocumentSymbolSupport":true}},"workspace":{"symbol":{"symbolKind":{"valueSet": [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]}}}},"trace":"off"}}
 ---
 {"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"test:///main.cpp","languageId":"cpp","version":1,"text":"void foo(); int main() { foo(); }\n"}}}
 ---
@@ -34,40 +34,54 @@
 # CHECK-NEXT:  "jsonrpc": "2.0",
 # CHECK-NEXT:    "result": [
 # CHECK-NEXT:      {
-# CHECK-NEXT:        "containerName": "",
+# CHECK-NEXT:        "detail": "void foo()",
 # CHECK-NEXT:        "kind": 12,
-# CHECK-NEXT:        "location": {
-# CHECK-NEXT:          "range": {
-# CHECK-NEXT:            "end": {
-# CHECK-NEXT:              "character": {{.*}},
-# CHECK-NEXT:              "line": {{.*}}
-# CHECK-NEXT:            },
-# CHECK-NEXT:            "start": {
-# CHECK-NEXT:              "character": {{.*}},
-# CHECK-NEXT:              "line": {{.*}}
-# CHECK-NEXT:            }
+# CHECK-NEXT:        "name": "foo",
+# CHECK-NEXT:        "range": {
+# CHECK-NEXT:          "end": {
+# CHECK-NEXT:            "character": {{.*}},
+# CHECK-NEXT:            "line": {{.*}}
 # CHECK-NEXT:          },
-# CHECK-NEXT:          "uri": "file://{{.*}}/main.cpp"
+# CHECK-NEXT:          "start": {
+# CHECK-NEXT:            "character": {{.*}},
+# CHECK-NEXT:            "line": {{.*}}
+# CHECK-NEXT:          }
 # CHECK-NEXT:        },
-# CHECK-NEXT:        "name": "foo"
-# CHECK-NEXT:      }
+# CHECK-NEXT:        "selectionRange": {
+# CHECK-NEXT:          "end": {
+# CHECK-NEXT:            "character": {{.*}},
+# CHECK-NEXT:            "line": {{.*}}
+# CHECK-NEXT:          },
+# CHECK-NEXT:          "start": {
+# CHECK-NEXT:            "character": {{.*}},
+# CHECK-NEXT:            "line": {{.*}}
+# CHECK-NEXT:          }
+# CHECK-NEXT:        }
+# CHECK-NEXT:      },
 # CHECK-NEXT:      {
-# CHECK-NEXT:        "containerName": "",
+# CHECK-NEXT:        "detail": "int main()",
 # CHECK-NEXT:        "kind": 12,
-# CHECK-NEXT:        "location": {
-# CHECK-NEXT:          "range": {
-# CHECK-NEXT:            "end": {
-# CHECK-NEXT:              "character": {{.*}},
-# CHECK-NEXT:              "line": {{.*}}
-# CHECK-NEXT:            },
-# CHECK-NEXT:            "start": {
-# CHECK-NEXT:              "character": {{.*}},
-# CHECK-NEXT:              "line": {{.*}}
-# CHECK-NEXT:            }
+# CHECK-NEXT:        "name": "main",
+# CHECK-NEXT:        "range": {
+# CHECK-NEXT:          "end": {
+# CHECK-NEXT:            "character": {{.*}},
+# CHECK-NEXT:            "line": {{.*}}
 # CHECK-NEXT:          },
-# CHECK-NEXT:          "uri": "file://{{.*}}/main.cpp"
+# CHECK-NEXT:          "start": {
+# CHECK-NEXT:            "character": {{.*}},
+# CHECK-NEXT:            "line": {{.*}}
+# CHECK-NEXT:          }
 # CHECK-NEXT:        },
-# CHECK-NEXT:        "name": "main"
+# CHECK-NEXT:        "selectionRange": {
+# CHECK-NEXT:          "end": {
+# CHECK-NEXT:            "character": {{.*}},
+# CHECK-NEXT:            "line": {{.*}}
+# CHECK-NEXT:          },
+# CHECK-NEXT:          "start": {
+# CHECK-NEXT:            "character": {{.*}},
+# CHECK-NEXT:            "line": {{.*}}
+# CHECK-NEXT:          }
+# CHECK-NEXT:        }
 # CHECK-NEXT:      }
 # CHECK-NEXT:    ]
 # CHECK-NEXT:}
Index: clang-tools-extra/clangd/Hover.h
===================================================================
--- clang-tools-extra/clangd/Hover.h
+++ clang-tools-extra/clangd/Hover.h
@@ -17,6 +17,7 @@
 namespace clang {
 namespace clangd {
 
+PrintingPolicy getPrintingPolicy(PrintingPolicy Base);
 /// Contains detailed information about a Symbol. Especially useful when
 /// generating hover responses. It can be rendered as a hover panel, or
 /// embedding clients can use the structured information to provide their own
Index: clang-tools-extra/clangd/Hover.cpp
===================================================================
--- clang-tools-extra/clangd/Hover.cpp
+++ clang-tools-extra/clangd/Hover.cpp
@@ -48,7 +48,6 @@
 
 namespace clang {
 namespace clangd {
-namespace {
 
 PrintingPolicy getPrintingPolicy(PrintingPolicy Base) {
   Base.AnonymousTagLocations = false;
@@ -59,6 +58,7 @@
   return Base;
 }
 
+namespace {
 /// Given a declaration \p D, return a human-readable string representing the
 /// local scope in which it is declared, i.e. class(es) and method name. Returns
 /// an empty string if it is not local.
Index: clang-tools-extra/clangd/FindSymbols.cpp
===================================================================
--- clang-tools-extra/clangd/FindSymbols.cpp
+++ clang-tools-extra/clangd/FindSymbols.cpp
@@ -9,6 +9,7 @@
 
 #include "AST.h"
 #include "FuzzyMatch.h"
+#include "Hover.h"
 #include "ParsedAST.h"
 #include "Quality.h"
 #include "SourceCode.h"
@@ -194,6 +195,15 @@
   SI.range = Range{sourceLocToPosition(SM, SymbolRange->getBegin()),
                    sourceLocToPosition(SM, SymbolRange->getEnd())};
 
+  PrintingPolicy P(getPrintingPolicy(Ctx.getPrintingPolicy()));
+  P.SuppressScope = true;
+  P.SuppressUnwrittenScope = true;
+  llvm::raw_string_ostream OS(SI.detail);
+  if (const auto *TP = ND.getDescribedTemplateParams()) {
+    TP->print(OS, Ctx, P);
+  }
+  ND.print(OS, P);
+
   SourceLocation NameLoc = ND.getLocation();
   SourceLocation FallbackNameLoc;
   if (NameLoc.isMacroID()) {
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to