[PATCH] D99052: [clangd] Produce semantic token for name referring to UnresolvedUsingValueDecl
Nathan Ridge via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Sun Apr 25 13:41:56 PDT 2021
nridge updated this revision to Diff 340381.
nridge added a comment.
Address review comment
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D99052/new/
https://reviews.llvm.org/D99052
Files:
clang-tools-extra/clangd/SemanticHighlighting.cpp
clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp
Index: clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp
===================================================================
--- clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp
+++ clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp
@@ -688,6 +688,20 @@
@implementation $Class[[Foo]]($Namespace_decl[[Bar]])
@end
)cpp",
+ // Member imported from dependent base
+ R"cpp(
+ template <typename> struct $Class_decl[[Base]] {
+ int $Field_decl[[member]];
+ };
+ template <typename $TemplateParameter_decl[[T]]>
+ struct $Class_decl[[Derived]] : $Class[[Base]]<$TemplateParameter[[T]]> {
+ using $Class[[Base]]<$TemplateParameter[[T]]>::$Unknown_dependentName[[member]];
+
+ void $Method_decl[[method]]() {
+ (void)$Unknown_dependentName[[member]];
+ }
+ };
+ )cpp",
};
for (const auto &TestCase : TestCases)
// Mask off scope modifiers to keep the tests manageable.
Index: clang-tools-extra/clangd/SemanticHighlighting.cpp
===================================================================
--- clang-tools-extra/clangd/SemanticHighlighting.cpp
+++ clang-tools-extra/clangd/SemanticHighlighting.cpp
@@ -133,6 +133,10 @@
return HighlightingKind::TemplateParameter;
if (isa<ConceptDecl>(D))
return HighlightingKind::Concept;
+ if (isa<UnresolvedUsingValueDecl>(D)) {
+ // FIXME: We may be able to do better using HeuristicResolver.
+ return HighlightingKind::Unknown;
+ }
return llvm::None;
}
llvm::Optional<HighlightingKind> kindForType(const Type *TP) {
@@ -228,6 +232,12 @@
return false;
}
+bool isDependent(const Decl *D) {
+ if (isa<UnresolvedUsingValueDecl>(D))
+ return true;
+ return false;
+}
+
// For a macro usage `DUMP(foo)`, we want:
// - DUMP --> "macro"
// - foo --> "variable".
@@ -618,9 +628,14 @@
Tok.addModifier(HighlightingModifier::Static);
if (isAbstract(Decl))
Tok.addModifier(HighlightingModifier::Abstract);
+ if (isDependent(Decl))
+ Tok.addModifier(HighlightingModifier::DependentName);
if (Decl->isDeprecated())
Tok.addModifier(HighlightingModifier::Deprecated);
- if (R.IsDecl)
+ // Do not treat an UnresolvedUsingValueDecl as a declaration.
+ // It's more common to think of it as a reference to the
+ // underlying declaration.
+ if (R.IsDecl && !isa<UnresolvedUsingValueDecl>(Decl))
Tok.addModifier(HighlightingModifier::Declaration);
}
},
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D99052.340381.patch
Type: text/x-patch
Size: 2640 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20210425/e6947522/attachment.bin>
More information about the cfe-commits
mailing list