diff options
author | Nathan Ridge <zeratul976@hotmail.com> | 2024-02-05 03:22:17 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-05 03:22:17 -0500 |
commit | 0a888fade2600dce737bc356a158e44c8f59b616 (patch) | |
tree | 33529bcc74c62002fcbaa534b384fb1c67a24044 /clang-tools-extra | |
parent | ab460797f3af80bd262648d4dd306ef751d4e0f6 (diff) | |
download | llvm-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.cpp | 2 | ||||
-rw-r--r-- | clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp | 16 |
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. |