summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/unittests/clangd/DexTests.cpp
diff options
context:
space:
mode:
authorSam McCall <sam.mccall@gmail.com>2018-10-04 14:01:55 +0000
committerSam McCall <sam.mccall@gmail.com>2018-10-04 14:01:55 +0000
commitb5bbfef6cd89af8b13a3e96e72202400f6783b68 (patch)
tree91d6df61813be6edb6b51a701a1ad8f9ec45a496 /clang-tools-extra/unittests/clangd/DexTests.cpp
parent87f69eaf4e5022aa98b4b8c340efb72101fd16f5 (diff)
downloadbcm5719-llvm-b5bbfef6cd89af8b13a3e96e72202400f6783b68.tar.gz
bcm5719-llvm-b5bbfef6cd89af8b13a3e96e72202400f6783b68.zip
[cland] Dex: fix/simplify short-trigram generation
Summary: 1) Instead of x$$ for a short-query trigram, just use x 2) Make rules more coherent: prefixes of length 1-2, and first char + next head 3) Fix Dex::fuzzyFind to mark results as incomplete, because short-trigram rules only yield a subset of results. Reviewers: ioeric Subscribers: ilya-biryukov, jkorous, mgrang, arphaman, kadircet, cfe-commits Differential Revision: https://reviews.llvm.org/D52808 llvm-svn: 343775
Diffstat (limited to 'clang-tools-extra/unittests/clangd/DexTests.cpp')
-rw-r--r--clang-tools-extra/unittests/clangd/DexTests.cpp74
1 files changed, 50 insertions, 24 deletions
diff --git a/clang-tools-extra/unittests/clangd/DexTests.cpp b/clang-tools-extra/unittests/clangd/DexTests.cpp
index c36573c1a80..29319303e51 100644
--- a/clang-tools-extra/unittests/clangd/DexTests.cpp
+++ b/clang-tools-extra/unittests/clangd/DexTests.cpp
@@ -367,53 +367,54 @@ trigramsAre(std::initializer_list<std::string> Trigrams) {
TEST(DexTrigrams, IdentifierTrigrams) {
EXPECT_THAT(generateIdentifierTrigrams("X86"),
- trigramsAre({"x86", "x$$", "x8$"}));
+ trigramsAre({"x86", "x", "x8"}));
- EXPECT_THAT(generateIdentifierTrigrams("nl"), trigramsAre({"nl$", "n$$"}));
+ EXPECT_THAT(generateIdentifierTrigrams("nl"), trigramsAre({"nl", "n"}));
- EXPECT_THAT(generateIdentifierTrigrams("n"), trigramsAre({"n$$"}));
+ EXPECT_THAT(generateIdentifierTrigrams("n"), trigramsAre({"n"}));
EXPECT_THAT(generateIdentifierTrigrams("clangd"),
- trigramsAre({"c$$", "cl$", "cla", "lan", "ang", "ngd"}));
+ trigramsAre({"c", "cl", "cla", "lan", "ang", "ngd"}));
EXPECT_THAT(generateIdentifierTrigrams("abc_def"),
- trigramsAre({"a$$", "abc", "abd", "ade", "bcd", "bde", "cde",
- "def", "ab$", "ad$"}));
+ trigramsAre({"a", "ab", "ad", "abc", "abd", "ade", "bcd", "bde",
+ "cde", "def"}));
EXPECT_THAT(generateIdentifierTrigrams("a_b_c_d_e_"),
- trigramsAre({"a$$", "a_$", "a_b", "abc", "abd", "acd", "ace",
- "bcd", "bce", "bde", "cde", "ab$"}));
+ trigramsAre({"a", "a_", "ab", "abc", "abd", "acd", "ace", "bcd",
+ "bce", "bde", "cde"}));
EXPECT_THAT(generateIdentifierTrigrams("unique_ptr"),
- trigramsAre({"u$$", "uni", "unp", "upt", "niq", "nip", "npt",
- "iqu", "iqp", "ipt", "que", "qup", "qpt", "uep",
- "ept", "ptr", "un$", "up$"}));
+ trigramsAre({"u", "un", "up", "uni", "unp", "upt", "niq", "nip",
+ "npt", "iqu", "iqp", "ipt", "que", "qup", "qpt",
+ "uep", "ept", "ptr"}));
EXPECT_THAT(
generateIdentifierTrigrams("TUDecl"),
- trigramsAre({"t$$", "tud", "tde", "ude", "dec", "ecl", "tu$", "td$"}));
+ trigramsAre({"t", "tu", "td", "tud", "tde", "ude", "dec", "ecl"}));
EXPECT_THAT(generateIdentifierTrigrams("IsOK"),
- trigramsAre({"i$$", "iso", "iok", "sok", "is$", "io$"}));
+ trigramsAre({"i", "is", "io", "iso", "iok", "sok"}));
+ auto X = generateIdentifierTrigrams("abc_defGhij__klm");
EXPECT_THAT(
generateIdentifierTrigrams("abc_defGhij__klm"),
- trigramsAre({"a$$", "abc", "abd", "abg", "ade", "adg", "adk", "agh",
- "agk", "bcd", "bcg", "bde", "bdg", "bdk", "bgh", "bgk",
- "cde", "cdg", "cdk", "cgh", "cgk", "def", "deg", "dek",
- "dgh", "dgk", "dkl", "efg", "efk", "egh", "egk", "ekl",
- "fgh", "fgk", "fkl", "ghi", "ghk", "gkl", "hij", "hik",
- "hkl", "ijk", "ikl", "jkl", "klm", "ab$", "ad$"}));
+ trigramsAre({"a", "ab", "ad", "abc", "abd", "abg", "ade", "adg",
+ "adk", "agh", "agk", "bcd", "bcg", "bde", "bdg", "bdk",
+ "bgh", "bgk", "cde", "cdg", "cdk", "cgh", "cgk", "def",
+ "deg", "dek", "dgh", "dgk", "dkl", "efg", "efk", "egh",
+ "egk", "ekl", "fgh", "fgk", "fkl", "ghi", "ghk", "gkl",
+ "hij", "hik", "hkl", "ijk", "ikl", "jkl", "klm"}));
}
TEST(DexTrigrams, QueryTrigrams) {
- EXPECT_THAT(generateQueryTrigrams("c"), trigramsAre({"c$$"}));
- EXPECT_THAT(generateQueryTrigrams("cl"), trigramsAre({"cl$"}));
+ EXPECT_THAT(generateQueryTrigrams("c"), trigramsAre({"c"}));
+ EXPECT_THAT(generateQueryTrigrams("cl"), trigramsAre({"cl"}));
EXPECT_THAT(generateQueryTrigrams("cla"), trigramsAre({"cla"}));
- EXPECT_THAT(generateQueryTrigrams("_"), trigramsAre({"_$$"}));
- EXPECT_THAT(generateQueryTrigrams("__"), trigramsAre({"__$"}));
- EXPECT_THAT(generateQueryTrigrams("___"), trigramsAre({"___"}));
+ EXPECT_THAT(generateQueryTrigrams("_"), trigramsAre({"_"}));
+ EXPECT_THAT(generateQueryTrigrams("__"), trigramsAre({"__"}));
+ EXPECT_THAT(generateQueryTrigrams("___"), trigramsAre({}));
EXPECT_THAT(generateQueryTrigrams("X86"), trigramsAre({"x86"}));
@@ -529,6 +530,31 @@ TEST(DexTest, FuzzyMatch) {
UnorderedElementsAre("LaughingOutLoud", "LittleOldLady"));
}
+// TODO(sammccall): enable after D52796 bugfix.
+#if 0
+TEST(DexTest, ShortQuery) {
+ auto I =
+ Dex::build(generateSymbols({"OneTwoThreeFour"}), RefSlab(), URISchemes);
+ FuzzyFindRequest Req;
+ bool Incomplete;
+
+ EXPECT_THAT(match(*I, Req, &Incomplete), ElementsAre("OneTwoThreeFour"));
+ EXPECT_FALSE(Incomplete) << "Empty string is not a short query";
+
+ Req.Query = "t";
+ EXPECT_THAT(match(*I, Req, &Incomplete), ElementsAre());
+ EXPECT_TRUE(Incomplete) << "Short queries have different semantics";
+
+ Req.Query = "tt";
+ EXPECT_THAT(match(*I, Req, &Incomplete), ElementsAre());
+ EXPECT_TRUE(Incomplete) << "Short queries have different semantics";
+
+ Req.Query = "ttf";
+ EXPECT_THAT(match(*I, Req, &Incomplete), ElementsAre("OneTwoThreeFour"));
+ EXPECT_FALSE(Incomplete) << "3-char string is not a short query";
+}
+#endif
+
TEST(DexTest, MatchQualifiedNamesWithoutSpecificScope) {
auto I = Dex::build(generateSymbols({"a::y1", "b::y2", "y3"}), RefSlab(),
URISchemes);
OpenPOWER on IntegriCloud