Skip to content

Commit 0a888fa

Browse files
[clangd] Handle IndirectFieldDecl in kindForDecl (#80588)
Fixes clangd/clangd#1925
1 parent ab46079 commit 0a888fa

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

clang-tools-extra/clangd/SemanticHighlighting.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ std::optional<HighlightingKind> kindForDecl(const NamedDecl *D,
136136
if (auto *OMD = dyn_cast<ObjCMethodDecl>(D))
137137
return OMD->isClassMethod() ? HighlightingKind::StaticMethod
138138
: HighlightingKind::Method;
139-
if (isa<FieldDecl, ObjCPropertyDecl>(D))
139+
if (isa<FieldDecl, IndirectFieldDecl, ObjCPropertyDecl>(D))
140140
return HighlightingKind::Field;
141141
if (isa<EnumDecl>(D))
142142
return HighlightingKind::Enum;

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1076,6 +1076,22 @@ sizeof...($TemplateParameter[[Elements]]);
10761076
using $Class[[Y]]$Bracket[[<]]0$Bracket[[>]]::$Unknown_dependentName[[xxx]];
10771077
};
10781078
};
1079+
)cpp",
1080+
// Heuristically resolved IndirectFieldDecl
1081+
R"cpp(
1082+
template $Bracket[[<]]typename $TemplateParameter_def[[T]]$Bracket[[>]]
1083+
struct $Class_def[[Base]] {
1084+
struct {
1085+
int $Field_decl[[waldo]];
1086+
};
1087+
};
1088+
template $Bracket[[<]]typename $TemplateParameter_def[[T]]$Bracket[[>]]
1089+
struct $Class_def[[Derived]] : $Class[[Base]]$Bracket[[<]]$TemplateParameter[[T]]$Bracket[[>]] {
1090+
using $Class[[Base]]$Bracket[[<]]$TemplateParameter[[T]]$Bracket[[>]]::$Field_dependentName[[waldo]];
1091+
void $Method_def[[foo]]() {
1092+
$Field_dependentName[[waldo]];
1093+
}
1094+
};
10791095
)cpp"};
10801096
for (const auto &TestCase : TestCases)
10811097
// Mask off scope modifiers to keep the tests manageable.

0 commit comments

Comments
 (0)