[clang-tools-extra] 990c189 - [clangd] Add scoped enum constants to all-scopes-completion
Tom Praschan via cfe-commits
cfe-commits at lists.llvm.org
Wed Nov 2 11:41:03 PDT 2022
Author: Tom Praschan
Date: 2022-11-02T20:38:01+01:00
New Revision: 990c189379679f92cd9af4cd384e476a94c0e819
URL: https://github.com/llvm/llvm-project/commit/990c189379679f92cd9af4cd384e476a94c0e819
DIFF: https://github.com/llvm/llvm-project/commit/990c189379679f92cd9af4cd384e476a94c0e819.diff
LOG: [clangd] Add scoped enum constants to all-scopes-completion
This was originally part of https://reviews.llvm.org/D136925, but we decided to move it to a separate patch.
In case it turns out to be controversial, it can be reverted more easily.
Differential Revision: https://reviews.llvm.org/D137104
Added:
Modified:
clang-tools-extra/clangd/CodeComplete.cpp
clang-tools-extra/clangd/CodeComplete.h
clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp
clang-tools-extra/clangd/unittests/SymbolCollectorTests.cpp
Removed:
################################################################################
diff --git a/clang-tools-extra/clangd/CodeComplete.cpp b/clang-tools-extra/clangd/CodeComplete.cpp
index a3e518b4ba054..e52cb2643babd 100644
--- a/clang-tools-extra/clangd/CodeComplete.cpp
+++ b/clang-tools-extra/clangd/CodeComplete.cpp
@@ -2145,7 +2145,7 @@ bool isIndexedForCodeCompletion(const NamedDecl &ND, ASTContext &ASTCtx) {
// when
// --all-scopes-completion is set, we'll want to complete those as well.
if (const auto *EnumDecl = dyn_cast<clang::EnumDecl>(ND.getDeclContext()))
- return (InTopLevelScope(*EnumDecl) || InClassScope(*EnumDecl)) && !EnumDecl->isScoped();
+ return (InTopLevelScope(*EnumDecl) || InClassScope(*EnumDecl));
return false;
}
diff --git a/clang-tools-extra/clangd/CodeComplete.h b/clang-tools-extra/clangd/CodeComplete.h
index 269be8944df17..19ef4c17d3b0f 100644
--- a/clang-tools-extra/clangd/CodeComplete.h
+++ b/clang-tools-extra/clangd/CodeComplete.h
@@ -291,7 +291,7 @@ SignatureHelp signatureHelp(PathRef FileName, Position Pos,
// For index-based completion, we only consider:
// * symbols in namespaces or translation unit scopes (e.g. no class
// members, no locals)
-// * enum constants in unscoped enum decl (e.g. "red" in "enum {red};")
+// * enum constants (both scoped and unscoped)
// * primary templates (no specializations)
// For the other cases, we let Clang do the completion because it does not
// need any non-local information and it will be much better at following
diff --git a/clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp b/clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp
index 77451bf445e0f..99d09ad43466a 100644
--- a/clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp
+++ b/clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp
@@ -3382,11 +3382,13 @@ TEST(CompletionTest, Enums) {
Opts.Index = Index.get();
Opts.AllScopes = true;
auto R = completions(Source, {}, Opts);
- EXPECT_THAT(R.Completions,
- ElementsAre(AllOf(scope("ns::"), named("Clangd1"),
- kind(CompletionItemKind::EnumMember)),
- AllOf(scope("ns::C::"), named("Clangd2"),
- kind(CompletionItemKind::EnumMember))));
+ EXPECT_THAT(R.Completions, UnorderedElementsAre(
+ AllOf(scope("ns::"), named("Clangd1"),
+ kind(CompletionItemKind::EnumMember)),
+ AllOf(scope("ns::C::"), named("Clangd2"),
+ kind(CompletionItemKind::EnumMember)),
+ AllOf(scope("ns::Scoped::"), named("Clangd3"),
+ kind(CompletionItemKind::EnumMember))));
}
TEST(CompletionTest, ScopeIsUnresolved) {
diff --git a/clang-tools-extra/clangd/unittests/SymbolCollectorTests.cpp b/clang-tools-extra/clangd/unittests/SymbolCollectorTests.cpp
index bb651b851afeb..62564b989a186 100644
--- a/clang-tools-extra/clangd/unittests/SymbolCollectorTests.cpp
+++ b/clang-tools-extra/clangd/unittests/SymbolCollectorTests.cpp
@@ -1329,7 +1329,7 @@ TEST_F(SymbolCollectorTest, IncludeEnums) {
AllOf(qName("Color"), forCodeCompletion(true)),
AllOf(qName("Green"), forCodeCompletion(true)),
AllOf(qName("Color2"), forCodeCompletion(true)),
- AllOf(qName("Color2::Yellow"), forCodeCompletion(false)),
+ AllOf(qName("Color2::Yellow"), forCodeCompletion(true)),
AllOf(qName("ns"), forCodeCompletion(true)),
AllOf(qName("ns::Black"), forCodeCompletion(true)),
AllOf(qName("Color3"), forCodeCompletion(true)),
More information about the cfe-commits
mailing list