[clang-tools-extra] 699a59a - [clangd] Mark "override" and "final" as modifiers
Christian Kandeler via cfe-commits
cfe-commits at lists.llvm.org
Mon Nov 21 13:01:18 PST 2022
Author: Christian Kandeler
Date: 2022-11-21T22:01:12+01:00
New Revision: 699a59aa5865d8b10f42284f68c424a9123cb8b2
URL: https://github.com/llvm/llvm-project/commit/699a59aa5865d8b10f42284f68c424a9123cb8b2
DIFF: https://github.com/llvm/llvm-project/commit/699a59aa5865d8b10f42284f68c424a9123cb8b2.diff
LOG: [clangd] Mark "override" and "final" as modifiers
... in semantic highlighting.
These specifiers cannot be identified by simple lexing (since e.g.
variables with these names can legally be declared), which means they
should be semantic tokens.
Reviewed By: sammccall
Differential Revision: https://reviews.llvm.org/D137943
Added:
Modified:
clang-tools-extra/clangd/SemanticHighlighting.cpp
clang-tools-extra/clangd/SemanticHighlighting.h
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 dd9392b029df8..dd25a2f31230c 100644
--- a/clang-tools-extra/clangd/SemanticHighlighting.cpp
+++ b/clang-tools-extra/clangd/SemanticHighlighting.cpp
@@ -809,6 +809,18 @@ class CollectExtraHighlightings
return true;
}
+ bool VisitAttr(Attr *A) {
+ switch (A->getKind()) {
+ case attr::Override:
+ case attr::Final:
+ H.addToken(A->getLocation(), HighlightingKind::Modifier);
+ break;
+ default:
+ break;
+ }
+ return true;
+ }
+
bool VisitDependentNameTypeLoc(DependentNameTypeLoc L) {
H.addToken(L.getNameLoc(), HighlightingKind::Type)
.addModifier(HighlightingModifier::DependentName)
@@ -985,6 +997,8 @@ llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, HighlightingKind K) {
return OS << "Primitive";
case HighlightingKind::Macro:
return OS << "Macro";
+ case HighlightingKind::Modifier:
+ return OS << "Modifier";
case HighlightingKind::InactiveCode:
return OS << "InactiveCode";
}
@@ -1119,6 +1133,8 @@ llvm::StringRef toSemanticTokenType(HighlightingKind Kind) {
return "type";
case HighlightingKind::Macro:
return "macro";
+ case HighlightingKind::Modifier:
+ return "modifier";
case HighlightingKind::InactiveCode:
return "comment";
}
diff --git a/clang-tools-extra/clangd/SemanticHighlighting.h b/clang-tools-extra/clangd/SemanticHighlighting.h
index 64ad431909faa..e8f60c13000e1 100644
--- a/clang-tools-extra/clangd/SemanticHighlighting.h
+++ b/clang-tools-extra/clangd/SemanticHighlighting.h
@@ -49,6 +49,7 @@ enum class HighlightingKind {
Concept,
Primitive,
Macro,
+ Modifier,
// This one is
diff erent from the other kinds as it's a line style
// rather than a token style.
diff --git a/clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp b/clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp
index 3ea4a58a83a70..70d8f91f129e4 100644
--- a/clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp
+++ b/clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp
@@ -864,6 +864,12 @@ sizeof...($TemplateParameter[[Elements]]);
const char *$LocalVariable_def_readonly[[s]] = $LocalVariable_readonly_static[[__func__]];
}
)cpp",
+ // override and final
+ R"cpp(
+ class $Class_def_abstract[[Base]] { virtual void $Method_decl_abstract_virtual[[m]]() = 0; };
+ class $Class_def[[override]] : public $Class_abstract[[Base]] { void $Method_decl_virtual[[m]]() $Modifier[[override]]; };
+ class $Class_def[[final]] : public $Class[[override]] { void $Method_decl_virtual[[m]]() $Modifier[[override]] $Modifier[[final]]; };
+ )cpp",
// Issue 1222: readonly modifier for generic parameter
R"cpp(
template <typename $TemplateParameter_def[[T]]>
More information about the cfe-commits
mailing list