Skip to content

Commit

Permalink
[clangd] Add new semantic token modifier "virtual"
Browse files Browse the repository at this point in the history
This is needed for clients that want to highlight virtual functions
differently.

Reviewed By: sammccall

Differential Revision: https://reviews.llvm.org/D107145
  • Loading branch information
ckandeler authored and MaskRay committed Aug 4, 2021
1 parent 3fc9294 commit 159a269
Show file tree
Hide file tree
Showing 5 changed files with 23 additions and 6 deletions.
10 changes: 10 additions & 0 deletions clang-tools-extra/clangd/SemanticHighlighting.cpp
Expand Up @@ -240,6 +240,12 @@ bool isAbstract(const Decl *D) {
return false;
}

bool isVirtual(const Decl *D) {
if (const auto *CMD = llvm::dyn_cast<CXXMethodDecl>(D))
return CMD->isVirtual();
return false;
}

bool isDependent(const Decl *D) {
if (isa<UnresolvedUsingValueDecl>(D))
return true;
Expand Down Expand Up @@ -712,6 +718,8 @@ std::vector<HighlightingToken> getSemanticHighlightings(ParsedAST &AST) {
Tok.addModifier(HighlightingModifier::Static);
if (isAbstract(Decl))
Tok.addModifier(HighlightingModifier::Abstract);
if (isVirtual(Decl))
Tok.addModifier(HighlightingModifier::Virtual);
if (isDependent(Decl))
Tok.addModifier(HighlightingModifier::DependentName);
if (isDefaultLibrary(Decl))
Expand Down Expand Up @@ -898,6 +906,8 @@ llvm::StringRef toSemanticTokenModifier(HighlightingModifier Modifier) {
return "deduced"; // nonstandard
case HighlightingModifier::Abstract:
return "abstract";
case HighlightingModifier::Virtual:
return "virtual";
case HighlightingModifier::DependentName:
return "dependentName"; // nonstandard
case HighlightingModifier::DefaultLibrary:
Expand Down
1 change: 1 addition & 0 deletions clang-tools-extra/clangd/SemanticHighlighting.h
Expand Up @@ -66,6 +66,7 @@ enum class HighlightingModifier {
Readonly,
Static,
Abstract,
Virtual,
DependentName,
DefaultLibrary,

Expand Down
1 change: 1 addition & 0 deletions clang-tools-extra/clangd/test/initialize-params.test
Expand Up @@ -88,6 +88,7 @@
# CHECK-NEXT: "readonly",
# CHECK-NEXT: "static",
# CHECK-NEXT: "abstract",
# CHECK-NEXT: "virtual",
# CHECK-NEXT: "dependentName",
# CHECK-NEXT: "defaultLibrary",
# CHECK-NEXT: "functionScope",
Expand Down
8 changes: 4 additions & 4 deletions clang-tools-extra/clangd/test/semantic-tokens.test
Expand Up @@ -23,7 +23,7 @@
# CHECK-NEXT: 4,
# CHECK-NEXT: 1,
# CHECK-NEXT: 0,
# CHECK-NEXT: 2049
# CHECK-NEXT: 4097
# CHECK-NEXT: ],
# CHECK-NEXT: "resultId": "1"
# CHECK-NEXT: }
Expand All @@ -49,7 +49,7 @@
# CHECK-NEXT: 4,
# CHECK-NEXT: 1,
# CHECK-NEXT: 0,
# CHECK-NEXT: 2049
# CHECK-NEXT: 4097
# CHECK-NEXT: ],
# Inserted at position 1
# CHECK-NEXT: "deleteCount": 0,
Expand All @@ -72,12 +72,12 @@
# CHECK-NEXT: 4,
# CHECK-NEXT: 1,
# CHECK-NEXT: 0,
# CHECK-NEXT: 2049,
# CHECK-NEXT: 4097,
# CHECK-NEXT: 1,
# CHECK-NEXT: 4,
# CHECK-NEXT: 1,
# CHECK-NEXT: 0,
# CHECK-NEXT: 2049
# CHECK-NEXT: 4097
# CHECK-NEXT: ],
# CHECK-NEXT: "resultId": "3"
# CHECK-NEXT: }
Expand Down
Expand Up @@ -642,9 +642,14 @@ sizeof...($TemplateParameter[[Elements]]);
)cpp",
R"cpp(
class $Class_decl_abstract[[Abstract]] {
virtual void $Method_decl_abstract[[pure]]() = 0;
virtual void $Method_decl[[impl]]();
public:
virtual void $Method_decl_abstract_virtual[[pure]]() = 0;
virtual void $Method_decl_virtual[[impl]]();
};
void $Function_decl[[foo]]($Class_abstract[[Abstract]]* $Parameter_decl[[A]]) {
$Parameter[[A]]->$Method_abstract_virtual[[pure]]();
$Parameter[[A]]->$Method_virtual[[impl]]();
}
)cpp",
R"cpp(
<:[deprecated]:> int $Variable_decl_deprecated[[x]];
Expand Down

0 comments on commit 159a269

Please sign in to comment.