[PATCH] D66516: [clangd] Added highlighting to types dependant on templates.
Ilya Biryukov via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Sep 6 07:18:37 PDT 2019
ilya-biryukov updated this revision to Diff 219100.
ilya-biryukov added a comment.
- Only highlight typedefs to non-composite types, simplifies everything
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
@@ -266,7 +266,9 @@
)cpp",
R"cpp(
namespace $Namespace[[a]] {
- struct $Class[[A]] {};
+ struct $Class[[A]] {
+ $Primitive[[void]] $Method[[foo]]($Class[[A]]*);
+ };
typedef $Primitive[[char]] $Primitive[[C]];
}
typedef $Namespace[[a]]::$Class[[A]] $Class[[B]];
@@ -474,7 +476,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 +490,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 {
@@ -124,17 +126,16 @@
bool VisitTypedefNameDecl(TypedefNameDecl *TD) {
if (const auto *TSI = TD->getTypeSourceInfo())
- addType(TD->getLocation(), TSI->getTypeLoc().getTypePtr());
+ addType(TD->getLocation(), TSI->getTypeLoc().getType().getTypePtr());
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,6 +188,9 @@
if (TP->isBuiltinType())
// Builtins must be special cased as they do not have a TagDecl.
addToken(Loc, HighlightingKind::Primitive);
+ if (const TemplateTypeParmType *TD = dyn_cast<TemplateTypeParmType>(TP))
+ // TemplateTypeParmType also do not have a TagDecl.
+ addToken(Loc, TD->getDecl());
if (const TagDecl *TD = TP->getAsTagDecl())
addToken(Loc, TD);
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D66516.219100.patch
Type: text/x-patch
Size: 3552 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190906/cc7424af/attachment-0001.bin>
More information about the cfe-commits
mailing list