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); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits