Author: jvikstrom Date: Fri Aug 16 02:30:21 2019 New Revision: 369090 URL: http://llvm.org/viewvc/llvm-project?rev=369090&view=rev Log: [clangd] Added highlighting for non type templates.
Summary: Non type templates were not being highlighted. This highlights them as TemplateParameters. Reviewers: hokein, ilya-biryukov Subscribers: MaskRay, jkorous, arphaman, kadircet, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D66221 Modified: clang-tools-extra/trunk/clangd/SemanticHighlighting.cpp clang-tools-extra/trunk/clangd/unittests/SemanticHighlightingTests.cpp Modified: clang-tools-extra/trunk/clangd/SemanticHighlighting.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/SemanticHighlighting.cpp?rev=369090&r1=369089&r2=369090&view=diff ============================================================================== --- clang-tools-extra/trunk/clangd/SemanticHighlighting.cpp (original) +++ clang-tools-extra/trunk/clangd/SemanticHighlighting.cpp Fri Aug 16 02:30:21 2019 @@ -224,6 +224,10 @@ private: addToken(Loc, HighlightingKind::TemplateParameter); return; } + if (isa<NonTypeTemplateParmDecl>(D)) { + addToken(Loc, HighlightingKind::TemplateParameter); + return; + } } void addToken(SourceLocation Loc, HighlightingKind Kind) { Modified: clang-tools-extra/trunk/clangd/unittests/SemanticHighlightingTests.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/SemanticHighlightingTests.cpp?rev=369090&r1=369089&r2=369090&view=diff ============================================================================== --- clang-tools-extra/trunk/clangd/unittests/SemanticHighlightingTests.cpp (original) +++ clang-tools-extra/trunk/clangd/unittests/SemanticHighlightingTests.cpp Fri Aug 16 02:30:21 2019 @@ -323,6 +323,59 @@ TEST(SemanticHighlighting, GetsCorrectTo $Primitive[[auto]] $Variable[[Form]] = 10.2 + 2 * 4; $Primitive[[decltype]]($Variable[[Form]]) $Variable[[F]] = 10; auto $Variable[[Fun]] = []()->$Primitive[[void]]{}; + )cpp", + R"cpp( + class $Class[[G]] {}; + template<$Class[[G]] *$TemplateParameter[[U]]> + class $Class[[GP]] {}; + template<$Class[[G]] &$TemplateParameter[[U]]> + class $Class[[GR]] {}; + template<$Primitive[[int]] *$TemplateParameter[[U]]> + class $Class[[IP]] { + $Primitive[[void]] $Method[[f]]() { + *$TemplateParameter[[U]] += 5; + } + }; + template<$Primitive[[unsigned]] $TemplateParameter[[U]] = 2> + class $Class[[Foo]] { + $Primitive[[void]] $Method[[f]]() { + for($Primitive[[int]] $Variable[[I]] = 0; + $Variable[[I]] < $TemplateParameter[[U]];) {} + } + }; + + $Class[[G]] $Variable[[L]]; + $Primitive[[void]] $Function[[f]]() { + $Class[[Foo]]<123> $Variable[[F]]; + $Class[[GP]]<&$Variable[[L]]> $Variable[[LL]]; + $Class[[GR]]<$Variable[[L]]> $Variable[[LLL]]; + } + )cpp", + R"cpp( + template<typename $TemplateParameter[[T]], + $Primitive[[void]] (T::*$TemplateParameter[[method]])($Primitive[[int]])> + struct $Class[[G]] { + $Primitive[[void]] $Method[[foo]]( + $TemplateParameter[[T]] *$Variable[[O]]) { + ($Variable[[O]]->*$TemplateParameter[[method]])(10); + } + }; + struct $Class[[F]] { + $Primitive[[void]] $Method[[f]]($Primitive[[int]]); + }; + template<$Primitive[[void]] (*$TemplateParameter[[Func]])()> + struct $Class[[A]] { + $Primitive[[void]] $Method[[f]]() { + (*$TemplateParameter[[Func]])(); + } + }; + + $Primitive[[void]] $Function[[foo]]() { + $Class[[F]] $Variable[[FF]]; + $Class[[G]]<$Class[[F]], &$Class[[F]]::$Method[[f]]> $Variable[[GG]]; + $Variable[[GG]].$Method[[foo]](&$Variable[[FF]]); + $Class[[A]]<$Function[[foo]]> $Variable[[AA]]; + } )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