diff options
-rw-r--r-- | clang-tools-extra/clangd/XRefs.cpp | 12 | ||||
-rw-r--r-- | clang-tools-extra/clangd/unittests/XRefsTests.cpp | 10 |
2 files changed, 11 insertions, 11 deletions
diff --git a/clang-tools-extra/clangd/XRefs.cpp b/clang-tools-extra/clangd/XRefs.cpp index ce8e5955362..3165633e60f 100644 --- a/clang-tools-extra/clangd/XRefs.cpp +++ b/clang-tools-extra/clangd/XRefs.cpp @@ -414,12 +414,12 @@ static PrintingPolicy printingPolicyForDecls(PrintingPolicy Base) { static std::string getLocalScope(const Decl *D) { std::vector<std::string> Scopes; const DeclContext *DC = D->getDeclContext(); - auto GetName = [](const Decl *D) { - const NamedDecl *ND = dyn_cast<NamedDecl>(D); - std::string Name = ND->getNameAsString(); - // FIXME(sammccall): include template params/specialization args?. - if (!Name.empty()) - return Name; + auto GetName = [](const TypeDecl *D) { + if (!D->getDeclName().isEmpty()) { + PrintingPolicy Policy = D->getASTContext().getPrintingPolicy(); + Policy.SuppressScope = true; + return declaredType(D).getAsString(Policy); + } if (auto RD = dyn_cast<RecordDecl>(D)) return ("(anonymous " + RD->getKindName() + ")").str(); return std::string(""); diff --git a/clang-tools-extra/clangd/unittests/XRefsTests.cpp b/clang-tools-extra/clangd/unittests/XRefsTests.cpp index 9817ba64389..483f216ca66 100644 --- a/clang-tools-extra/clangd/unittests/XRefsTests.cpp +++ b/clang-tools-extra/clangd/unittests/XRefsTests.cpp @@ -910,13 +910,13 @@ void foo())cpp"; }}, // Constructor of partially-specialized class template {R"cpp( - template<typename> struct X; + template<typename, typename=void> struct X; template<typename T> struct X<T*>{ [[^X]](); }; )cpp", [](HoverInfo &HI) { HI.NamespaceScope = ""; HI.Name = "X"; - HI.LocalScope = "X::"; // FIXME: Should be X<T *>:: + HI.LocalScope = "X<T *>::"; // FIXME: X<T *, void>:: HI.Kind = SymbolKind::Constructor; HI.ReturnType = "X<T *>"; HI.Definition = "X()"; @@ -1029,8 +1029,8 @@ void foo())cpp"; HI.Type = "enum Color"; HI.Value = "1"; }}, - // FIXME: We should use the Decl referenced, even if it comes from an - // implicit instantiation. + // FIXME: We should use the Decl referenced, even if from an implicit + // instantiation. Then the scope would be Add<1, 2> and the value 3. {R"cpp( template<int a, int b> struct Add { static constexpr int result = a + b; @@ -1043,7 +1043,7 @@ void foo())cpp"; HI.Kind = SymbolKind::Property; HI.Type = "const int"; HI.NamespaceScope = ""; - HI.LocalScope = "Add::"; + HI.LocalScope = "Add<a, b>::"; }}, {R"cpp( const char *[[ba^r]] = "1234"; |