Skip to content

Commit bd0f840

Browse files
[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
1 parent a070f12 commit bd0f840

File tree

4 files changed

+33
-14
lines changed

4 files changed

+33
-14
lines changed

clang-tools-extra/clangd/SemanticHighlighting.cpp

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -205,8 +205,9 @@ class HighlightingTokenCollector
205205
addToken(Loc, HighlightingKind::Class);
206206
return;
207207
}
208-
if (isa<CXXMethodDecl>(D)) {
209-
addToken(Loc, HighlightingKind::Method);
208+
if (auto *MD = dyn_cast<CXXMethodDecl>(D)) {
209+
addToken(Loc, MD->isStatic() ? HighlightingKind::StaticMethod
210+
: HighlightingKind::Method);
210211
return;
211212
}
212213
if (isa<FieldDecl>(D)) {
@@ -226,8 +227,10 @@ class HighlightingTokenCollector
226227
return;
227228
}
228229
if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {
229-
addToken(Loc, VD->isLocalVarDecl() ? HighlightingKind::LocalVariable
230-
: HighlightingKind::Variable);
230+
addToken(Loc, VD->isStaticDataMember()
231+
? HighlightingKind::StaticField
232+
: VD->isLocalVarDecl() ? HighlightingKind::LocalVariable
233+
: HighlightingKind::Variable);
231234
return;
232235
}
233236
if (isa<FunctionDecl>(D)) {
@@ -435,6 +438,8 @@ llvm::StringRef toTextMateScope(HighlightingKind Kind) {
435438
return "entity.name.function.cpp";
436439
case HighlightingKind::Method:
437440
return "entity.name.function.method.cpp";
441+
case HighlightingKind::StaticMethod:
442+
return "entity.name.function.method.static.cpp";
438443
case HighlightingKind::Variable:
439444
return "variable.other.cpp";
440445
case HighlightingKind::LocalVariable:
@@ -443,6 +448,8 @@ llvm::StringRef toTextMateScope(HighlightingKind Kind) {
443448
return "variable.parameter.cpp";
444449
case HighlightingKind::Field:
445450
return "variable.other.field.cpp";
451+
case HighlightingKind::StaticField:
452+
return "variable.other.field.static.cpp";
446453
case HighlightingKind::Class:
447454
return "entity.name.type.class.cpp";
448455
case HighlightingKind::Enum:

clang-tools-extra/clangd/SemanticHighlighting.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,9 @@ enum class HighlightingKind {
2929
Parameter,
3030
Function,
3131
Method,
32+
StaticMethod,
3233
Field,
34+
StaticField,
3335
Class,
3436
Enum,
3537
EnumConstant,

clang-tools-extra/clangd/test/semantic-highlighting.test

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,15 @@
2020
# CHECK-NEXT: "entity.name.function.method.cpp"
2121
# CHECK-NEXT: ],
2222
# CHECK-NEXT: [
23+
# CHECK-NEXT: "entity.name.function.method.static.cpp"
24+
# CHECK-NEXT: ],
25+
# CHECK-NEXT: [
2326
# CHECK-NEXT: "variable.other.field.cpp"
2427
# CHECK-NEXT: ],
2528
# CHECK-NEXT: [
29+
# CHECK-NEXT: "variable.other.field.static.cpp"
30+
# CHECK-NEXT: ],
31+
# CHECK-NEXT: [
2632
# CHECK-NEXT: "entity.name.type.class.cpp"
2733
# CHECK-NEXT: ],
2834
# CHECK-NEXT: [
@@ -49,7 +55,7 @@
4955
# CHECK-NEXT: "lines": [
5056
# CHECK-NEXT: {
5157
# CHECK-NEXT: "line": 0,
52-
# CHECK-NEXT: "tokens": "AAAAAAADAAsAAAAEAAEAAA=="
58+
# CHECK-NEXT: "tokens": "AAAAAAADAA0AAAAEAAEAAA=="
5359
# CHECK-NEXT: }
5460
# CHECK-NEXT: ],
5561
# CHECK-NEXT: "textDocument": {
@@ -64,11 +70,11 @@
6470
# CHECK-NEXT: "lines": [
6571
# CHECK-NEXT: {
6672
# CHECK-NEXT: "line": 0,
67-
# CHECK-NEXT: "tokens": "AAAAAAADAAsAAAAEAAEAAA=="
73+
# CHECK-NEXT: "tokens": "AAAAAAADAA0AAAAEAAEAAA=="
6874
# CHECK-NEXT: }
6975
# CHECK-NEXT: {
7076
# CHECK-NEXT: "line": 1,
71-
# CHECK-NEXT: "tokens": "AAAAAAADAAsAAAAEAAEAAA=="
77+
# CHECK-NEXT: "tokens": "AAAAAAADAA0AAAAEAAEAAA=="
7278
# CHECK-NEXT: }
7379
# CHECK-NEXT: ],
7480
# CHECK-NEXT: "textDocument": {
@@ -83,7 +89,7 @@
8389
# CHECK-NEXT: "lines": [
8490
# CHECK-NEXT: {
8591
# CHECK-NEXT: "line": 1,
86-
# CHECK-NEXT: "tokens": "AAAAAAADAAsAAAAEAAEAAA=="
92+
# CHECK-NEXT: "tokens": "AAAAAAADAA0AAAAEAAEAAA=="
8793
# CHECK-NEXT: }
8894
# CHECK-NEXT: ],
8995
# CHECK-NEXT: "textDocument": {

clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,17 +35,19 @@ makeHighlightingTokens(llvm::ArrayRef<Range> Ranges, HighlightingKind Kind) {
3535
std::vector<HighlightingToken> getExpectedTokens(Annotations &Test) {
3636
static const std::map<HighlightingKind, std::string> KindToString{
3737
{HighlightingKind::Variable, "Variable"},
38+
{HighlightingKind::LocalVariable, "LocalVariable"},
3839
{HighlightingKind::Parameter, "Parameter"},
3940
{HighlightingKind::Function, "Function"},
4041
{HighlightingKind::Class, "Class"},
4142
{HighlightingKind::Enum, "Enum"},
4243
{HighlightingKind::Namespace, "Namespace"},
4344
{HighlightingKind::EnumConstant, "EnumConstant"},
4445
{HighlightingKind::Field, "Field"},
46+
{HighlightingKind::StaticField, "StaticField"},
4547
{HighlightingKind::Method, "Method"},
48+
{HighlightingKind::StaticMethod, "StaticMethod"},
4649
{HighlightingKind::TemplateParameter, "TemplateParameter"},
47-
{HighlightingKind::Primitive, "Primitive"},
48-
{HighlightingKind::LocalVariable, "LocalVariable"}};
50+
{HighlightingKind::Primitive, "Primitive"}};
4951
std::vector<HighlightingToken> ExpectedTokens;
5052
for (const auto &KindString : KindToString) {
5153
std::vector<HighlightingToken> Toks = makeHighlightingTokens(
@@ -200,21 +202,23 @@ TEST(SemanticHighlighting, GetsCorrectTokens) {
200202
struct $Class[[A]] {
201203
$Primitive[[double]] $Field[[B]];
202204
$Class[[D]] $Field[[E]];
203-
static $Primitive[[double]] $Variable[[S]];
205+
static $Primitive[[double]] $StaticField[[S]];
206+
static $Primitive[[void]] $StaticMethod[[bar]]() {}
204207
$Primitive[[void]] $Method[[foo]]() {
205208
$Field[[B]] = 123;
206209
this->$Field[[B]] = 156;
207210
this->$Method[[foo]]();
208211
$Method[[foo]]();
209-
$Variable[[S]] = 90.1;
212+
$StaticMethod[[bar]]();
213+
$StaticField[[S]] = 90.1;
210214
}
211215
};
212216
$Primitive[[void]] $Function[[foo]]() {
213217
$Class[[A]] $LocalVariable[[AA]];
214218
$LocalVariable[[AA]].$Field[[B]] += 2;
215219
$LocalVariable[[AA]].$Method[[foo]]();
216220
$LocalVariable[[AA]].$Field[[E]].$Field[[C]];
217-
$Class[[A]]::$Variable[[S]] = 90;
221+
$Class[[A]]::$StaticField[[S]] = 90;
218222
}
219223
)cpp",
220224
R"cpp(
@@ -629,4 +633,4 @@ TEST(SemanticHighlighting, DiffBeyondTheEndOfFile) {
629633

630634
} // namespace
631635
} // namespace clangd
632-
} // namespace clang
636+
} // namespace clang

0 commit comments

Comments
 (0)