[clangd] Add the missing elaborated types in FindTarget.
authorHaojian Wu <hokein.wu@gmail.com>
Wed, 5 Feb 2020 08:56:13 +0000 (09:56 +0100)
committerHaojian Wu <hokein.wu@gmail.com>
Wed, 5 Feb 2020 13:03:36 +0000 (14:03 +0100)
Reviewers: sammccall

Subscribers: ilya-biryukov, MaskRay, jkorous, arphaman, kadircet, usaxena95, cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D74025

clang-tools-extra/clangd/FindTarget.cpp
clang-tools-extra/clangd/unittests/FindTargetTests.cpp

index 13e4819..a9ac4b8 100644 (file)
@@ -379,6 +379,10 @@ public:
         Outer.add(TT->getAsTagDecl(), Flags);
       }
 
+      void VisitElaboratedType(const ElaboratedType *ET) {
+        Outer.add(ET->desugar(), Flags);
+      }
+
       void VisitInjectedClassNameType(const InjectedClassNameType *ICNT) {
         Outer.add(ICNT->getDecl(), Flags);
       }
index 22aeed6..074a24d 100644 (file)
@@ -241,6 +241,13 @@ TEST_F(TargetDeclTest, Types) {
   )cpp";
   EXPECT_DECLS("TypedefTypeLoc", {"typedef S X", Rel::Alias},
                {"struct S", Rel::Underlying});
+  Code = R"cpp(
+    namespace ns { struct S{}; }
+    typedef ns::S X;
+    [[X]] x;
+  )cpp";
+  EXPECT_DECLS("TypedefTypeLoc", {"typedef ns::S X", Rel::Alias},
+               {"struct S", Rel::Underlying});
 
   // FIXME: Auto-completion in a template requires disabling delayed template
   // parsing.