[PATCH] D64624: [clangd] Added highlighting to enum constants.
Johan Vikström via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Jul 12 02:58:47 PDT 2019
jvikstrom created this revision.
jvikstrom added reviewers: hokein, sammccall, ilya-biryukov.
Herald added subscribers: cfe-commits, kadircet, arphaman, jkorous, MaskRay.
Herald added a project: clang.
VSCode does not have a scope for enum constants. So they were placed under "constant.other.enum" as that seems to be the most correct scope for enum constants. However, this makes theia color them blue (the same color it uses for keywords).
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D64624
Files:
clang-tools-extra/clangd/SemanticHighlighting.cpp
clang-tools-extra/clangd/SemanticHighlighting.h
clang-tools-extra/clangd/test/semantic-highlighting.test
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
@@ -37,7 +37,8 @@
{HighlightingKind::Function, "Function"},
{HighlightingKind::Class, "Class"},
{HighlightingKind::Enum, "Enum"},
- {HighlightingKind::Namespace, "Namespace"}};
+ {HighlightingKind::Namespace, "Namespace"},
+ {HighlightingKind::EnumConstant, "EnumConstant"}};
std::vector<HighlightingToken> ExpectedTokens;
for (const auto &KindString : KindToString) {
std::vector<HighlightingToken> Toks = makeHighlightingTokens(
@@ -118,7 +119,7 @@
namespace $Namespace[[cde]] {
struct $Class[[A]] {
enum class $Enum[[B]] {
- Hi,
+ $EnumConstant[[Hi]],
};
};
}
@@ -129,9 +130,20 @@
$Namespace[[abc]]::$Namespace[[bcd]]::$Namespace[[cde]];
$Namespace[[abc]]::$Namespace[[bcd]]::$Class[[A]] $Variable[[AA]];
$Namespace[[vwz]]::$Class[[A]]::$Enum[[B]] $Variable[[AAA]] =
- $Namespace[[vwz]]::$Class[[A]]::$Enum[[B]]::Hi;
+ $Namespace[[vwz]]::$Class[[A]]::$Enum[[B]]::$EnumConstant[[Hi]];
::$Namespace[[vwz]]::$Class[[A]] $Variable[[B]];
::$Namespace[[abc]]::$Namespace[[bcd]]::$Class[[A]] $Variable[[BB]];
+ )cpp",
+ R"cpp(
+ enum $Enum[[ABC]] {
+ $EnumConstant[[Hi]],
+ };
+ int $Variable[[I]] = $EnumConstant[[Hi]];
+ enum class $Enum[[BC]] {
+ $EnumConstant[[A]],
+ $EnumConstant[[B]],
+ };
+ $Enum[[BC]] $Variable[[L]] = $Enum[[BC]]::$EnumConstant[[B]];
)cpp"};
for (const auto &TestCase : TestCases) {
checkHighlightings(TestCase);
Index: clang-tools-extra/clangd/test/semantic-highlighting.test
===================================================================
--- clang-tools-extra/clangd/test/semantic-highlighting.test
+++ clang-tools-extra/clangd/test/semantic-highlighting.test
@@ -17,6 +17,9 @@
# CHECK-NEXT: "entity.name.type.enum.cpp"
# CHECK-NEXT: ],
# CHECK-NEXT: [
+# CHECK-NEXT: "constant.other.enum.cpp"
+# CHECK-NEXT: ],
+# CHECK-NEXT: [
# CHECK-NEXT: "entity.name.namespace.cpp"
# CHECK-NEXT: ]
# CHECK-NEXT: ]
Index: clang-tools-extra/clangd/SemanticHighlighting.h
===================================================================
--- clang-tools-extra/clangd/SemanticHighlighting.h
+++ clang-tools-extra/clangd/SemanticHighlighting.h
@@ -28,6 +28,7 @@
Function,
Class,
Enum,
+ EnumConstant,
Namespace,
NumKinds,
Index: clang-tools-extra/clangd/SemanticHighlighting.cpp
===================================================================
--- clang-tools-extra/clangd/SemanticHighlighting.cpp
+++ clang-tools-extra/clangd/SemanticHighlighting.cpp
@@ -119,6 +119,10 @@
addToken(Loc, HighlightingKind::Enum);
return;
}
+ if(isa<EnumConstantDecl>(D)) {
+ addToken(Loc, HighlightingKind::EnumConstant);
+ return;
+ }
if (isa<VarDecl>(D)) {
addToken(Loc, HighlightingKind::Variable);
return;
@@ -249,6 +253,8 @@
return "entity.name.type.class.cpp";
case HighlightingKind::Enum:
return "entity.name.type.enum.cpp";
+ case HighlightingKind::EnumConstant:
+ return "constant.other.enum.cpp";
case HighlightingKind::Namespace:
return "entity.name.namespace.cpp";
case HighlightingKind::NumKinds:
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D64624.209445.patch
Type: text/x-patch
Size: 3668 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190712/4fab2db1/attachment.bin>
More information about the cfe-commits
mailing list