diff options
author | Nathan Ridge <zeratul976@hotmail.com> | 2019-08-30 03:37:24 +0000 |
---|---|---|
committer | Nathan Ridge <zeratul976@hotmail.com> | 2019-08-30 03:37:24 +0000 |
commit | bd0f840f83e56d36ace49b04b499f107be7eb492 (patch) | |
tree | b93541daf72b2e1ebb1099938efa62ca7dae2420 | |
parent | a070f12e578e472a32bf9d0030a4c2092989e7dc (diff) | |
download | bcm5719-llvm-bd0f840f83e56d36ace49b04b499f107be7eb492.tar.gz bcm5719-llvm-bd0f840f83e56d36ace49b04b499f107be7eb492.zip |
[clangd] Add distinct highlightings for static fields and methods
Reviewers: hokein, ilya-biryukov, jvikstrom
Reviewed By: hokein
Subscribers: MaskRay, jkorous, arphaman, kadircet, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D66828
llvm-svn: 370429
4 files changed, 33 insertions, 14 deletions
diff --git a/clang-tools-extra/clangd/SemanticHighlighting.cpp b/clang-tools-extra/clangd/SemanticHighlighting.cpp index b3db1abd8b2..1c632bc250d 100644 --- a/clang-tools-extra/clangd/SemanticHighlighting.cpp +++ b/clang-tools-extra/clangd/SemanticHighlighting.cpp @@ -205,8 +205,9 @@ private: addToken(Loc, HighlightingKind::Class); return; } - if (isa<CXXMethodDecl>(D)) { - addToken(Loc, HighlightingKind::Method); + if (auto *MD = dyn_cast<CXXMethodDecl>(D)) { + addToken(Loc, MD->isStatic() ? HighlightingKind::StaticMethod + : HighlightingKind::Method); return; } if (isa<FieldDecl>(D)) { @@ -226,8 +227,10 @@ private: return; } if (const VarDecl *VD = dyn_cast<VarDecl>(D)) { - addToken(Loc, VD->isLocalVarDecl() ? HighlightingKind::LocalVariable - : HighlightingKind::Variable); + addToken(Loc, VD->isStaticDataMember() + ? HighlightingKind::StaticField + : VD->isLocalVarDecl() ? HighlightingKind::LocalVariable + : HighlightingKind::Variable); return; } if (isa<FunctionDecl>(D)) { @@ -435,6 +438,8 @@ llvm::StringRef toTextMateScope(HighlightingKind Kind) { return "entity.name.function.cpp"; case HighlightingKind::Method: return "entity.name.function.method.cpp"; + case HighlightingKind::StaticMethod: + return "entity.name.function.method.static.cpp"; case HighlightingKind::Variable: return "variable.other.cpp"; case HighlightingKind::LocalVariable: @@ -443,6 +448,8 @@ llvm::StringRef toTextMateScope(HighlightingKind Kind) { return "variable.parameter.cpp"; case HighlightingKind::Field: return "variable.other.field.cpp"; + case HighlightingKind::StaticField: + return "variable.other.field.static.cpp"; case HighlightingKind::Class: return "entity.name.type.class.cpp"; case HighlightingKind::Enum: diff --git a/clang-tools-extra/clangd/SemanticHighlighting.h b/clang-tools-extra/clangd/SemanticHighlighting.h index 3cc507f553a..928c99c8223 100644 --- a/clang-tools-extra/clangd/SemanticHighlighting.h +++ b/clang-tools-extra/clangd/SemanticHighlighting.h @@ -29,7 +29,9 @@ enum class HighlightingKind { Parameter, Function, Method, + StaticMethod, Field, + StaticField, Class, Enum, EnumConstant, diff --git a/clang-tools-extra/clangd/test/semantic-highlighting.test b/clang-tools-extra/clangd/test/semantic-highlighting.test index 81b49f5259c..e984b5d6140 100644 --- a/clang-tools-extra/clangd/test/semantic-highlighting.test +++ b/clang-tools-extra/clangd/test/semantic-highlighting.test @@ -20,9 +20,15 @@ # CHECK-NEXT: "entity.name.function.method.cpp" # CHECK-NEXT: ], # CHECK-NEXT: [ +# CHECK-NEXT: "entity.name.function.method.static.cpp" +# CHECK-NEXT: ], +# CHECK-NEXT: [ # CHECK-NEXT: "variable.other.field.cpp" # CHECK-NEXT: ], # CHECK-NEXT: [ +# CHECK-NEXT: "variable.other.field.static.cpp" +# CHECK-NEXT: ], +# CHECK-NEXT: [ # CHECK-NEXT: "entity.name.type.class.cpp" # CHECK-NEXT: ], # CHECK-NEXT: [ @@ -49,7 +55,7 @@ # CHECK-NEXT: "lines": [ # CHECK-NEXT: { # CHECK-NEXT: "line": 0, -# CHECK-NEXT: "tokens": "AAAAAAADAAsAAAAEAAEAAA==" +# CHECK-NEXT: "tokens": "AAAAAAADAA0AAAAEAAEAAA==" # CHECK-NEXT: } # CHECK-NEXT: ], # CHECK-NEXT: "textDocument": { @@ -64,11 +70,11 @@ # CHECK-NEXT: "lines": [ # CHECK-NEXT: { # CHECK-NEXT: "line": 0, -# CHECK-NEXT: "tokens": "AAAAAAADAAsAAAAEAAEAAA==" +# CHECK-NEXT: "tokens": "AAAAAAADAA0AAAAEAAEAAA==" # CHECK-NEXT: } # CHECK-NEXT: { # CHECK-NEXT: "line": 1, -# CHECK-NEXT: "tokens": "AAAAAAADAAsAAAAEAAEAAA==" +# CHECK-NEXT: "tokens": "AAAAAAADAA0AAAAEAAEAAA==" # CHECK-NEXT: } # CHECK-NEXT: ], # CHECK-NEXT: "textDocument": { @@ -83,7 +89,7 @@ # CHECK-NEXT: "lines": [ # CHECK-NEXT: { # CHECK-NEXT: "line": 1, -# CHECK-NEXT: "tokens": "AAAAAAADAAsAAAAEAAEAAA==" +# CHECK-NEXT: "tokens": "AAAAAAADAA0AAAAEAAEAAA==" # CHECK-NEXT: } # CHECK-NEXT: ], # CHECK-NEXT: "textDocument": { diff --git a/clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp b/clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp index 0f55bf171d4..32510b494e0 100644 --- a/clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp +++ b/clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp @@ -35,6 +35,7 @@ makeHighlightingTokens(llvm::ArrayRef<Range> Ranges, HighlightingKind Kind) { std::vector<HighlightingToken> getExpectedTokens(Annotations &Test) { static const std::map<HighlightingKind, std::string> KindToString{ {HighlightingKind::Variable, "Variable"}, + {HighlightingKind::LocalVariable, "LocalVariable"}, {HighlightingKind::Parameter, "Parameter"}, {HighlightingKind::Function, "Function"}, {HighlightingKind::Class, "Class"}, @@ -42,10 +43,11 @@ std::vector<HighlightingToken> getExpectedTokens(Annotations &Test) { {HighlightingKind::Namespace, "Namespace"}, {HighlightingKind::EnumConstant, "EnumConstant"}, {HighlightingKind::Field, "Field"}, + {HighlightingKind::StaticField, "StaticField"}, {HighlightingKind::Method, "Method"}, + {HighlightingKind::StaticMethod, "StaticMethod"}, {HighlightingKind::TemplateParameter, "TemplateParameter"}, - {HighlightingKind::Primitive, "Primitive"}, - {HighlightingKind::LocalVariable, "LocalVariable"}}; + {HighlightingKind::Primitive, "Primitive"}}; std::vector<HighlightingToken> ExpectedTokens; for (const auto &KindString : KindToString) { std::vector<HighlightingToken> Toks = makeHighlightingTokens( @@ -200,13 +202,15 @@ TEST(SemanticHighlighting, GetsCorrectTokens) { struct $Class[[A]] { $Primitive[[double]] $Field[[B]]; $Class[[D]] $Field[[E]]; - static $Primitive[[double]] $Variable[[S]]; + static $Primitive[[double]] $StaticField[[S]]; + static $Primitive[[void]] $StaticMethod[[bar]]() {} $Primitive[[void]] $Method[[foo]]() { $Field[[B]] = 123; this->$Field[[B]] = 156; this->$Method[[foo]](); $Method[[foo]](); - $Variable[[S]] = 90.1; + $StaticMethod[[bar]](); + $StaticField[[S]] = 90.1; } }; $Primitive[[void]] $Function[[foo]]() { @@ -214,7 +218,7 @@ TEST(SemanticHighlighting, GetsCorrectTokens) { $LocalVariable[[AA]].$Field[[B]] += 2; $LocalVariable[[AA]].$Method[[foo]](); $LocalVariable[[AA]].$Field[[E]].$Field[[C]]; - $Class[[A]]::$Variable[[S]] = 90; + $Class[[A]]::$StaticField[[S]] = 90; } )cpp", R"cpp( @@ -629,4 +633,4 @@ TEST(SemanticHighlighting, DiffBeyondTheEndOfFile) { } // namespace } // namespace clangd -} // namespace clang +} // namespace clang
\ No newline at end of file |