aboutsummaryrefslogtreecommitdiff
path: root/clang-tools-extra
diff options
context:
space:
mode:
authorNathan Ridge <zeratul976@hotmail.com>2024-02-05 03:22:17 -0500
committerGitHub <noreply@github.com>2024-02-05 03:22:17 -0500
commit0a888fade2600dce737bc356a158e44c8f59b616 (patch)
tree33529bcc74c62002fcbaa534b384fb1c67a24044 /clang-tools-extra
parentab460797f3af80bd262648d4dd306ef751d4e0f6 (diff)
downloadllvm-0a888fade2600dce737bc356a158e44c8f59b616.zip
llvm-0a888fade2600dce737bc356a158e44c8f59b616.tar.gz
llvm-0a888fade2600dce737bc356a158e44c8f59b616.tar.bz2
[clangd] Handle IndirectFieldDecl in kindForDecl (#80588)
Fixes https://github.com/clangd/clangd/issues/1925
Diffstat (limited to 'clang-tools-extra')
-rw-r--r--clang-tools-extra/clangd/SemanticHighlighting.cpp2
-rw-r--r--clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp16
2 files changed, 17 insertions, 1 deletions
diff --git a/clang-tools-extra/clangd/SemanticHighlighting.cpp b/clang-tools-extra/clangd/SemanticHighlighting.cpp
index ee3772e..08f99e1 100644
--- a/clang-tools-extra/clangd/SemanticHighlighting.cpp
+++ b/clang-tools-extra/clangd/SemanticHighlighting.cpp
@@ -136,7 +136,7 @@ std::optional<HighlightingKind> kindForDecl(const NamedDecl *D,
if (auto *OMD = dyn_cast<ObjCMethodDecl>(D))
return OMD->isClassMethod() ? HighlightingKind::StaticMethod
: HighlightingKind::Method;
- if (isa<FieldDecl, ObjCPropertyDecl>(D))
+ if (isa<FieldDecl, IndirectFieldDecl, ObjCPropertyDecl>(D))
return HighlightingKind::Field;
if (isa<EnumDecl>(D))
return HighlightingKind::Enum;
diff --git a/clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp b/clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp
index da12acc..4156921 100644
--- a/clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp
+++ b/clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp
@@ -1076,6 +1076,22 @@ $Bracket[[>]]$Bracket[[>]] $LocalVariable_def[[s6]];
using $Class[[Y]]$Bracket[[<]]0$Bracket[[>]]::$Unknown_dependentName[[xxx]];
};
};
+ )cpp",
+ // Heuristically resolved IndirectFieldDecl
+ R"cpp(
+ template $Bracket[[<]]typename $TemplateParameter_def[[T]]$Bracket[[>]]
+ struct $Class_def[[Base]] {
+ struct {
+ int $Field_decl[[waldo]];
+ };
+ };
+ template $Bracket[[<]]typename $TemplateParameter_def[[T]]$Bracket[[>]]
+ struct $Class_def[[Derived]] : $Class[[Base]]$Bracket[[<]]$TemplateParameter[[T]]$Bracket[[>]] {
+ using $Class[[Base]]$Bracket[[<]]$TemplateParameter[[T]]$Bracket[[>]]::$Field_dependentName[[waldo]];
+ void $Method_def[[foo]]() {
+ $Field_dependentName[[waldo]];
+ }
+ };
)cpp"};
for (const auto &TestCase : TestCases)
// Mask off scope modifiers to keep the tests manageable.