[PATCH] D52357: [clangd] Force Dex to respect symbol collector flags
Kirill Bobyrev via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Sep 21 07:38:18 PDT 2018
kbobyrev updated this revision to Diff 166482.
kbobyrev marked 2 inline comments as done.
https://reviews.llvm.org/D52357
Files:
clang-tools-extra/clangd/index/dex/Dex.cpp
clang-tools-extra/unittests/clangd/DexTests.cpp
Index: clang-tools-extra/unittests/clangd/DexTests.cpp
===================================================================
--- clang-tools-extra/unittests/clangd/DexTests.cpp
+++ clang-tools-extra/unittests/clangd/DexTests.cpp
@@ -583,6 +583,20 @@
EXPECT_THAT(lookup(*I, SymbolID("ns::nonono")), UnorderedElementsAre());
}
+TEST(DexTest, SymbolIndexOptionsFilter) {
+ auto CodeCompletionSymbol = symbol("Completion");
+ auto NonCodeCompletionSymbol = symbol("NoCompletion");
+ CodeCompletionSymbol.Flags = Symbol::SymbolFlag::IndexedForCodeCompletion;
+ NonCodeCompletionSymbol.Flags = Symbol::SymbolFlag::None;
+ std::vector<Symbol> Symbols{CodeCompletionSymbol, NonCodeCompletionSymbol};
+ Dex I(Symbols, URISchemes);
+ FuzzyFindRequest Req;
+ Req.RestrictForCodeCompletion = false;
+ EXPECT_THAT(match(I, Req), ElementsAre("Completion", "NoCompletion"));
+ Req.RestrictForCodeCompletion = true;
+ EXPECT_THAT(match(I, Req), ElementsAre("Completion"));
+}
+
TEST(DexTest, ProximityPathsBoosting) {
auto RootSymbol = symbol("root::abc");
RootSymbol.CanonicalDeclaration.FileURI = "unittest:///file.h";
Index: clang-tools-extra/clangd/index/dex/Dex.cpp
===================================================================
--- clang-tools-extra/clangd/index/dex/Dex.cpp
+++ clang-tools-extra/clangd/index/dex/Dex.cpp
@@ -22,6 +22,10 @@
namespace {
+// Mark symbols which are can be used for code completion.
+static const Token RestrictedForCodeCompletion =
+ Token(Token::Kind::Sentinel, "Restricted For Code Completion");
+
// Returns the tokens which are given symbol's characteristics. Currently, the
// generated tokens only contain fuzzy matching trigrams and symbol's scope,
// but in the future this will also return path proximity tokens and other
@@ -39,6 +43,8 @@
for (const auto &ProximityURI :
generateProximityURIs(Sym.CanonicalDeclaration.FileURI))
Result.emplace_back(Token::Kind::ProximityURI, ProximityURI);
+ if (Sym.Flags & Symbol::IndexedForCodeCompletion)
+ Result.emplace_back(RestrictedForCodeCompletion);
return Result;
}
@@ -175,6 +181,10 @@
TopLevelChildren.push_back(createOr(move(BoostingIterators)));
}
+ if (Req.RestrictForCodeCompletion)
+ TopLevelChildren.push_back(
+ InvertedIndex.find(RestrictedForCodeCompletion)->second.iterator());
+
// Use TRUE iterator if both trigrams and scopes from the query are not
// present in the symbol index.
auto QueryIterator = TopLevelChildren.empty()
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D52357.166482.patch
Type: text/x-patch
Size: 2518 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20180921/058583df/attachment.bin>
More information about the cfe-commits
mailing list