[PATCH] D66516: [clangd] Highlight typedefs to template parameters as template parameters
Ilya Biryukov via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Sep 9 02:35:27 PDT 2019
ilya-biryukov updated this revision to Diff 219301.
ilya-biryukov marked 5 inline comments as done.
ilya-biryukov added a comment.
- Address comments
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D66516/new/
https://reviews.llvm.org/D66516
Files:
clang-tools-extra/clangd/SemanticHighlighting.cpp
clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp
Index: clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp
===================================================================
--- clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp
+++ clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp
@@ -474,7 +474,7 @@
$Macro[[assert]]($Variable[[x]] != $Function[[f]]());
}
)cpp",
- R"cpp(
+ R"cpp(
struct $Class[[S]] {
$Primitive[[float]] $Field[[Value]];
$Class[[S]] *$Field[[Next]];
@@ -488,6 +488,21 @@
// Highlights references to BindingDecls.
$Variable[[B1]]++;
}
+ )cpp",
+ R"cpp(
+ template<class $TemplateParameter[[T]]>
+ class $Class[[A]] {
+ using $TemplateParameter[[TemplateParam1]] = $TemplateParameter[[T]];
+ typedef $TemplateParameter[[T]] $TemplateParameter[[TemplateParam2]];
+ using $Primitive[[IntType]] = $Primitive[[int]];
+
+ // These typedefs are not yet highlighted, their types are complicated.
+ using Pointer = $TemplateParameter[[T]] *;
+ using LVReference = $TemplateParameter[[T]] &;
+ using RVReference = $TemplateParameter[[T]]&&;
+ using Array = $TemplateParameter[[T]]*[3];
+ using MemberPointer = $Primitive[[int]] (A::*)($Primitive[[int]]);
+ };
)cpp"};
for (const auto &TestCase : TestCases) {
checkHighlightings(TestCase);
Index: clang-tools-extra/clangd/SemanticHighlighting.cpp
===================================================================
--- clang-tools-extra/clangd/SemanticHighlighting.cpp
+++ clang-tools-extra/clangd/SemanticHighlighting.cpp
@@ -15,6 +15,8 @@
#include "clang/AST/Decl.h"
#include "clang/AST/DeclCXX.h"
#include "clang/AST/RecursiveASTVisitor.h"
+#include "clang/AST/Type.h"
+#include "clang/AST/TypeLoc.h"
#include <algorithm>
namespace clang {
@@ -128,13 +130,12 @@
return true;
}
- bool VisitTemplateTypeParmTypeLoc(TemplateTypeParmTypeLoc &TL) {
- // TemplateTypeParmTypeLoc does not have a TagDecl in its type ptr.
- addToken(TL.getBeginLoc(), TL.getDecl());
+ bool VisitTypedefTypeLoc(TypedefTypeLoc TL) {
+ addType(TL.getBeginLoc(), TL.getTypePtr());
return true;
}
- bool VisitTemplateSpecializationTypeLoc(TemplateSpecializationTypeLoc &TL) {
+ bool VisitTemplateSpecializationTypeLoc(TemplateSpecializationTypeLoc TL) {
if (const TemplateDecl *TD =
TL.getTypePtr()->getTemplateName().getAsTemplateDecl())
addToken(TL.getBeginLoc(), TD);
@@ -187,7 +188,10 @@
if (TP->isBuiltinType())
// Builtins must be special cased as they do not have a TagDecl.
addToken(Loc, HighlightingKind::Primitive);
- if (const TagDecl *TD = TP->getAsTagDecl())
+ if (auto *TD = dyn_cast<TemplateTypeParmType>(TP))
+ // TemplateTypeParmType also do not have a TagDecl.
+ addToken(Loc, TD->getDecl());
+ if (auto *TD = TP->getAsTagDecl())
addToken(Loc, TD);
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D66516.219301.patch
Type: text/x-patch
Size: 2989 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190909/36adc60a/attachment-0001.bin>
More information about the cfe-commits
mailing list