[clang-tools-extra] f4ba7a1 - [clangd] Semantic highlighting for dependent template name in template argument

Nathan Ridge via cfe-commits cfe-commits at lists.llvm.org
Thu Aug 6 18:24:31 PDT 2020


Author: Nathan Ridge
Date: 2020-08-06T21:23:49-04:00
New Revision: f4ba7a100a56b63f9b3eac709ecea9f514d90c00

URL: https://github.com/llvm/llvm-project/commit/f4ba7a100a56b63f9b3eac709ecea9f514d90c00
DIFF: https://github.com/llvm/llvm-project/commit/f4ba7a100a56b63f9b3eac709ecea9f514d90c00.diff

LOG: [clangd] Semantic highlighting for dependent template name in template argument

Fixes https://github.com/clangd/clangd/issues/484

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

Added: 
    

Modified: 
    clang-tools-extra/clangd/SemanticHighlighting.cpp
    clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp

Removed: 
    


################################################################################
diff  --git a/clang-tools-extra/clangd/SemanticHighlighting.cpp b/clang-tools-extra/clangd/SemanticHighlighting.cpp
index ed75ce80999c..4bedea457e5c 100644
--- a/clang-tools-extra/clangd/SemanticHighlighting.cpp
+++ b/clang-tools-extra/clangd/SemanticHighlighting.cpp
@@ -296,6 +296,18 @@ class CollectExtraHighlightings
     return true;
   }
 
+  bool TraverseTemplateArgumentLoc(TemplateArgumentLoc L) {
+    switch (L.getArgument().getKind()) {
+    case TemplateArgument::Template:
+    case TemplateArgument::TemplateExpansion:
+      H.addToken(L.getTemplateNameLoc(), HighlightingKind::DependentType);
+      break;
+    default:
+      break;
+    }
+    return RecursiveASTVisitor::TraverseTemplateArgumentLoc(L);
+  }
+
   // findExplicitReferences will walk nested-name-specifiers and
   // find anything that can be resolved to a Decl. However, non-leaf
   // components of nested-name-specifiers which are dependent names

diff  --git a/clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp b/clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp
index 453986552ac5..1b90b21b2c58 100644
--- a/clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp
+++ b/clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp
@@ -686,6 +686,14 @@ sizeof...($TemplateParameter[[Elements]]);
       void $Function[[bar]]($TemplateParameter[[T]] $Parameter[[F]]) {
         $Parameter[[F]].$DependentName[[foo]]();
       }
+    )cpp",
+      // Dependent template name
+      R"cpp(
+      template <template <typename> class> struct $Class[[A]] {};
+      template <typename $TemplateParameter[[T]]>
+      using $Typedef[[W]] = $Class[[A]]<
+        $TemplateParameter[[T]]::template $DependentType[[Waldo]]
+      >;
     )cpp"};
   for (const auto &TestCase : TestCases) {
     checkHighlightings(TestCase);


        


More information about the cfe-commits mailing list