diff --git a/clang-tools-extra/clangd/SemanticHighlighting.h b/clang-tools-extra/clangd/SemanticHighlighting.h --- a/clang-tools-extra/clangd/SemanticHighlighting.h +++ b/clang-tools-extra/clangd/SemanticHighlighting.h @@ -66,6 +66,7 @@ Readonly, Static, Abstract, + Virtual, DependentName, DefaultLibrary, diff --git a/clang-tools-extra/clangd/SemanticHighlighting.cpp b/clang-tools-extra/clangd/SemanticHighlighting.cpp --- a/clang-tools-extra/clangd/SemanticHighlighting.cpp +++ b/clang-tools-extra/clangd/SemanticHighlighting.cpp @@ -240,6 +240,12 @@ return false; } +bool isVirtual(const Decl *D) { + if (const auto *CMD = llvm::dyn_cast(D)) + return CMD->isVirtual(); + return false; +} + bool isDependent(const Decl *D) { if (isa(D)) return true; @@ -712,6 +718,8 @@ 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)) @@ -898,6 +906,8 @@ return "deduced"; // nonstandard case HighlightingModifier::Abstract: return "abstract"; + case HighlightingModifier::Virtual: + return "virtual"; case HighlightingModifier::DependentName: return "dependentName"; // nonstandard case HighlightingModifier::DefaultLibrary: diff --git a/clang-tools-extra/clangd/test/initialize-params.test b/clang-tools-extra/clangd/test/initialize-params.test --- a/clang-tools-extra/clangd/test/initialize-params.test +++ b/clang-tools-extra/clangd/test/initialize-params.test @@ -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", diff --git a/clang-tools-extra/clangd/test/semantic-tokens.test b/clang-tools-extra/clangd/test/semantic-tokens.test --- a/clang-tools-extra/clangd/test/semantic-tokens.test +++ b/clang-tools-extra/clangd/test/semantic-tokens.test @@ -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: } @@ -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, @@ -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: } diff --git a/clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp b/clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp --- a/clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp +++ b/clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp @@ -642,9 +642,14 @@ )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]];