4 changes: 2 additions & 2 deletions clang-tools-extra/unittests/clangd/ClangdTests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -477,8 +477,8 @@ int hello;

Locations = runFindDefinitions(Server, FooCpp, FooSource.point());
EXPECT_TRUE(bool(Locations));
EXPECT_THAT(*Locations, ElementsAre(FileRange(FooCpp,
FooSource.range("two"))));
EXPECT_THAT(*Locations,
ElementsAre(FileRange(FooCpp, FooSource.range("two"))));
}

TEST_F(ClangdVFSTest, MemoryUsage) {
Expand Down
19 changes: 9 additions & 10 deletions clang-tools-extra/unittests/clangd/ClangdUnitTests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -255,20 +255,19 @@ main.cpp:2:3: error: something terrible happened)");

// Transform dianostics and check the results.
std::vector<std::pair<clangd::Diagnostic, std::vector<clangd::Fix>>> LSPDiags;
toLSPDiags(
D,
toLSPDiags(D,
#ifdef _WIN32
URIForFile::canonicalize("c:\\path\\to\\foo\\bar\\main.cpp",
/*TUPath=*/""),
URIForFile::canonicalize("c:\\path\\to\\foo\\bar\\main.cpp",
/*TUPath=*/""),
#else
URIForFile::canonicalize("/path/to/foo/bar/main.cpp", /*TUPath=*/""),
#endif
ClangdDiagnosticOptions(),
[&](clangd::Diagnostic LSPDiag, ArrayRef<clangd::Fix> Fixes) {
LSPDiags.push_back(
{std::move(LSPDiag),
std::vector<clangd::Fix>(Fixes.begin(), Fixes.end())});
});
ClangdDiagnosticOptions(),
[&](clangd::Diagnostic LSPDiag, ArrayRef<clangd::Fix> Fixes) {
LSPDiags.push_back(
{std::move(LSPDiag),
std::vector<clangd::Fix>(Fixes.begin(), Fixes.end())});
});

EXPECT_THAT(
LSPDiags,
Expand Down
56 changes: 25 additions & 31 deletions clang-tools-extra/unittests/clangd/CodeCompleteTests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -516,7 +516,8 @@ TEST(CompletionTest, ScopedWithFilter) {

TEST(CompletionTest, ReferencesAffectRanking) {
auto Results = completions("int main() { abs^ }", {ns("absl"), func("absb")});
EXPECT_THAT(Results.Completions, HasSubsequence(Named("absb"), Named("absl")));
EXPECT_THAT(Results.Completions,
HasSubsequence(Named("absb"), Named("absl")));
Results = completions("int main() { abs^ }",
{withReferences(10000, ns("absl")), func("absb")});
EXPECT_THAT(Results.Completions,
Expand Down Expand Up @@ -1662,7 +1663,8 @@ TEST(CompletionTest, CompletionTokenRange) {
auto Results = completions(Server, TestCode.code(), TestCode.point());

EXPECT_EQ(Results.Completions.size(), 1u);
EXPECT_THAT(Results.Completions.front().CompletionTokenRange, TestCode.range());
EXPECT_THAT(Results.Completions.front().CompletionTokenRange,
TestCode.range());
}
}

Expand Down Expand Up @@ -2095,11 +2097,10 @@ TEST(SignatureHelpTest, ConstructorInitializeFields) {
A a_elem;
};
)cpp");
EXPECT_THAT(Results.signatures, UnorderedElementsAre(
Sig("A(int)", {"int"}),
Sig("A(A &&)", {"A &&"}),
Sig("A(const A &)", {"const A &"})
));
EXPECT_THAT(Results.signatures,
UnorderedElementsAre(Sig("A(int)", {"int"}),
Sig("A(A &&)", {"A &&"}),
Sig("A(const A &)", {"const A &"})));
}
{
const auto Results = signatures(R"cpp(
Expand All @@ -2115,11 +2116,10 @@ TEST(SignatureHelpTest, ConstructorInitializeFields) {
C c_elem;
};
)cpp");
EXPECT_THAT(Results.signatures, UnorderedElementsAre(
Sig("A(int)", {"int"}),
Sig("A(A &&)", {"A &&"}),
Sig("A(const A &)", {"const A &"})
));
EXPECT_THAT(Results.signatures,
UnorderedElementsAre(Sig("A(int)", {"int"}),
Sig("A(A &&)", {"A &&"}),
Sig("A(const A &)", {"const A &"})));
}
}

Expand All @@ -2134,10 +2134,9 @@ TEST(CompletionTest, IncludedCompletionKinds) {
IgnoreDiagnostics DiagConsumer;
ClangdServer Server(CDB, FS, DiagConsumer, ClangdServer::optsForTest());
auto Results = completions(Server,
R"cpp(
R"cpp(
#include "^"
)cpp"
);
)cpp");
EXPECT_THAT(Results.Completions,
AllOf(Has("sub/", CompletionItemKind::Folder),
Has("bar.h\"", CompletionItemKind::File)));
Expand All @@ -2147,8 +2146,7 @@ TEST(CompletionTest, NoCrashAtNonAlphaIncludeHeader) {
auto Results = completions(
R"cpp(
#include "./^"
)cpp"
);
)cpp");
EXPECT_TRUE(Results.Completions.empty());
}

Expand Down Expand Up @@ -2221,9 +2219,8 @@ TEST(CompletionTest, ObjectiveCMethodNoArguments) {
@end
Foo *foo = [Foo new]; int y = [foo v^]
)objc",
/*IndexSymbols=*/{},
/*Opts=*/{},
"Foo.m");
/*IndexSymbols=*/{},
/*Opts=*/{}, "Foo.m");

auto C = Results.Completions;
EXPECT_THAT(C, ElementsAre(Named("value")));
Expand All @@ -2240,9 +2237,8 @@ TEST(CompletionTest, ObjectiveCMethodOneArgument) {
@end
Foo *foo = [Foo new]; int y = [foo v^]
)objc",
/*IndexSymbols=*/{},
/*Opts=*/{},
"Foo.m");
/*IndexSymbols=*/{},
/*Opts=*/{}, "Foo.m");

auto C = Results.Completions;
EXPECT_THAT(C, ElementsAre(Named("valueForCharacter:")));
Expand All @@ -2259,17 +2255,16 @@ TEST(CompletionTest, ObjectiveCMethodTwoArgumentsFromBeginning) {
@end
id val = [Foo foo^]
)objc",
/*IndexSymbols=*/{},
/*Opts=*/{},
"Foo.m");
/*IndexSymbols=*/{},
/*Opts=*/{}, "Foo.m");

auto C = Results.Completions;
EXPECT_THAT(C, ElementsAre(Named("fooWithValue:")));
EXPECT_THAT(C, ElementsAre(Kind(CompletionItemKind::Method)));
EXPECT_THAT(C, ElementsAre(ReturnType("id")));
EXPECT_THAT(C, ElementsAre(Signature("(int) fooey:(unsigned int)")));
EXPECT_THAT(C,
ElementsAre(SnippetSuffix("${1:(int)} fooey:${2:(unsigned int)}")));
EXPECT_THAT(
C, ElementsAre(SnippetSuffix("${1:(int)} fooey:${2:(unsigned int)}")));
}

TEST(CompletionTest, ObjectiveCMethodTwoArgumentsFromMiddle) {
Expand All @@ -2279,9 +2274,8 @@ TEST(CompletionTest, ObjectiveCMethodTwoArgumentsFromMiddle) {
@end
id val = [Foo fooWithValue:10 f^]
)objc",
/*IndexSymbols=*/{},
/*Opts=*/{},
"Foo.m");
/*IndexSymbols=*/{},
/*Opts=*/{}, "Foo.m");

auto C = Results.Completions;
EXPECT_THAT(C, ElementsAre(Named("fooey:")));
Expand Down
2 changes: 1 addition & 1 deletion clang-tools-extra/unittests/clangd/DexTests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -659,7 +659,7 @@ TEST(DexTest, ProximityPathsBoosting) {
TEST(DexTests, Refs) {
DenseMap<SymbolID, std::vector<Ref>> Refs;
auto AddRef = [&](const Symbol &Sym, const char *Filename, RefKind Kind) {
auto& SymbolRefs = Refs[Sym.ID];
auto &SymbolRefs = Refs[Sym.ID];
SymbolRefs.emplace_back();
SymbolRefs.back().Kind = Kind;
SymbolRefs.back().Location.FileURI = Filename;
Expand Down
12 changes: 5 additions & 7 deletions clang-tools-extra/unittests/clangd/FileIndexTests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -343,7 +343,7 @@ TEST(FileIndexTest, ReferencesInMainFileWithPreamble) {
)cpp");
auto MainFile = testPath("foo.cpp");
auto HeaderFile = testPath("foo.h");
std::vector<const char*> Cmd = {"clang", "-xc++", MainFile.c_str()};
std::vector<const char *> Cmd = {"clang", "-xc++", MainFile.c_str()};
// Preparse ParseInputs.
ParseInputs PI;
PI.CompileCommand.Directory = testRoot();
Expand All @@ -355,10 +355,9 @@ TEST(FileIndexTest, ReferencesInMainFileWithPreamble) {
// Prepare preamble.
auto CI = buildCompilerInvocation(PI);
auto PreambleData = buildPreamble(
MainFile,
*buildCompilerInvocation(PI), /*OldPreamble=*/nullptr,
tooling::CompileCommand(), PI,
std::make_shared<PCHContainerOperations>(), /*StoreInMemory=*/true,
MainFile, *buildCompilerInvocation(PI), /*OldPreamble=*/nullptr,
tooling::CompileCommand(), PI, std::make_shared<PCHContainerOperations>(),
/*StoreInMemory=*/true,
[&](ASTContext &Ctx, std::shared_ptr<Preprocessor> PP) {});
// Build AST for main file with preamble.
auto AST =
Expand All @@ -369,8 +368,7 @@ TEST(FileIndexTest, ReferencesInMainFileWithPreamble) {
FileIndex Index;
Index.updateMain(MainFile, *AST);

auto Foo =
findSymbol(TestTU::withHeaderCode(Header).headerSymbols(), "Foo");
auto Foo = findSymbol(TestTU::withHeaderCode(Header).headerSymbols(), "Foo");
RefsRequest Request;
Request.IDs.insert(Foo.ID);

Expand Down
2 changes: 1 addition & 1 deletion clang-tools-extra/unittests/clangd/IndexTests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -303,7 +303,7 @@ TEST(MergeIndexTest, Refs) {
FileURI("unittest:///test2.cc"))))));
}

MATCHER_P2(IncludeHeaderWithRef, IncludeHeader, References, "") {
MATCHER_P2(IncludeHeaderWithRef, IncludeHeader, References, "") {
return (arg.IncludeHeader == IncludeHeader) && (arg.References == References);
}

Expand Down
5 changes: 2 additions & 3 deletions clang-tools-extra/unittests/clangd/JSONTransportTests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,8 @@ namespace {

// No fmemopen on windows or on versions of MacOS X earlier than 10.13, so we
// can't easily run this test.
#if !(defined(WIN32) || \
(defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && \
__MAC_OS_X_VERSION_MIN_REQUIRED < 101300))
#if !(defined(WIN32) || (defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && \
__MAC_OS_X_VERSION_MIN_REQUIRED < 101300))

// Fixture takes care of managing the input/output buffers for the transport.
class JSONTransportTest : public ::testing::Test {
Expand Down
2 changes: 1 addition & 1 deletion clang-tools-extra/unittests/clangd/QualityTests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -371,7 +371,7 @@ TEST(QualityTests, IsInstanceMember) {
Rel.merge(BarSym);
EXPECT_TRUE(Rel.IsInstanceMember);

Rel.IsInstanceMember =false;
Rel.IsInstanceMember = false;
const Symbol &TplSym = findSymbol(Symbols, "Foo::tpl");
Rel.merge(TplSym);
EXPECT_TRUE(Rel.IsInstanceMember);
Expand Down
11 changes: 5 additions & 6 deletions clang-tools-extra/unittests/clangd/SerializationTests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -99,9 +99,9 @@ TEST(SerializationTest, YAMLConversions) {
auto ParsedYAML = readIndexFile(YAML);
ASSERT_TRUE(bool(ParsedYAML)) << ParsedYAML.takeError();
ASSERT_TRUE(bool(ParsedYAML->Symbols));
EXPECT_THAT(*ParsedYAML->Symbols,
UnorderedElementsAre(ID("057557CEBF6E6B2D"),
ID("057557CEBF6E6B2E")));
EXPECT_THAT(
*ParsedYAML->Symbols,
UnorderedElementsAre(ID("057557CEBF6E6B2D"), ID("057557CEBF6E6B2E")));

auto Sym1 = *ParsedYAML->Symbols->find(
cantFail(SymbolID::fromStr("057557CEBF6E6B2D")));
Expand Down Expand Up @@ -131,9 +131,8 @@ TEST(SerializationTest, YAMLConversions) {
ASSERT_TRUE(bool(ParsedYAML->Refs));
EXPECT_THAT(
*ParsedYAML->Refs,
UnorderedElementsAre(
Pair(cantFail(SymbolID::fromStr("057557CEBF6E6B2D")),
testing::SizeIs(1))));
UnorderedElementsAre(Pair(cantFail(SymbolID::fromStr("057557CEBF6E6B2D")),
testing::SizeIs(1))));
auto Ref1 = ParsedYAML->Refs->begin()->second.front();
EXPECT_EQ(Ref1.Kind, RefKind::Reference);
EXPECT_EQ(StringRef(Ref1.Location.FileURI), "file:///path/foo.cc");
Expand Down
46 changes: 21 additions & 25 deletions clang-tools-extra/unittests/clangd/SymbolCollectorTests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ MATCHER_P(IncludeHeader, P, "") {
return (arg.IncludeHeaders.size() == 1) &&
(arg.IncludeHeaders.begin()->IncludeHeader == P);
}
MATCHER_P2(IncludeHeaderWithRef, IncludeHeader, References, "") {
MATCHER_P2(IncludeHeaderWithRef, IncludeHeader, References, "") {
return (arg.IncludeHeader == IncludeHeader) && (arg.References == References);
}
MATCHER_P(DeclRange, Pos, "") {
Expand Down Expand Up @@ -123,7 +123,7 @@ class ShouldCollectSymbolTest : public ::testing::Test {
std::string HeaderName = "f.h";
std::string FileName = "f.cpp";
TestTU File;
Optional<ParsedAST> AST; // Initialized after build.
Optional<ParsedAST> AST; // Initialized after build.
};

TEST_F(ShouldCollectSymbolTest, ShouldCollectSymbol) {
Expand Down Expand Up @@ -248,8 +248,7 @@ class SymbolCollectorTest : public ::testing::Test {
Args.push_back(TestFileName);

tooling::ToolInvocation Invocation(
Args,
Factory->create(), Files.get(),
Args, Factory->create(), Files.get(),
std::make_shared<PCHContainerOperations>());

InMemoryFileSystem->addFile(TestHeaderName, 0,
Expand Down Expand Up @@ -422,18 +421,16 @@ o]]();
int Y;
)cpp");
runSymbolCollector(Header.code(), Main.code());
EXPECT_THAT(
Symbols,
UnorderedElementsAre(
AllOf(QName("X"), DeclRange(Header.range("xdecl")),
DefRange(Main.range("xdef"))),
AllOf(QName("Cls"), DeclRange(Header.range("clsdecl")),
DefRange(Main.range("clsdef"))),
AllOf(QName("print"), DeclRange(Header.range("printdecl")),
DefRange(Main.range("printdef"))),
AllOf(QName("Z"), DeclRange(Header.range("zdecl"))),
AllOf(QName("foo"), DeclRange(Header.range("foodecl")))
));
EXPECT_THAT(Symbols,
UnorderedElementsAre(
AllOf(QName("X"), DeclRange(Header.range("xdecl")),
DefRange(Main.range("xdef"))),
AllOf(QName("Cls"), DeclRange(Header.range("clsdecl")),
DefRange(Main.range("clsdef"))),
AllOf(QName("print"), DeclRange(Header.range("printdecl")),
DefRange(Main.range("printdef"))),
AllOf(QName("Z"), DeclRange(Header.range("zdecl"))),
AllOf(QName("foo"), DeclRange(Header.range("foodecl")))));
}

TEST_F(SymbolCollectorTest, Refs) {
Expand Down Expand Up @@ -537,8 +534,8 @@ TEST_F(SymbolCollectorTest, SymbolRelativeWithFallback) {
TestHeaderURI = URI::create(testPath(TestHeaderName)).toString();
CollectorOpts.FallbackDir = testRoot();
runSymbolCollector("class Foo {};", /*Main=*/"");
EXPECT_THAT(Symbols,
UnorderedElementsAre(AllOf(QName("Foo"), DeclURI(TestHeaderURI))));
EXPECT_THAT(Symbols, UnorderedElementsAre(
AllOf(QName("Foo"), DeclURI(TestHeaderURI))));
}

TEST_F(SymbolCollectorTest, UnittestURIScheme) {
Expand Down Expand Up @@ -605,13 +602,12 @@ TEST_F(SymbolCollectorTest, SymbolFormedFromRegisteredSchemeFromMacro) {
)");

runSymbolCollector(Header.code(), /*Main=*/"");
EXPECT_THAT(
Symbols,
UnorderedElementsAre(
AllOf(QName("abc_Test"), DeclRange(Header.range("expansion")),
DeclURI(TestHeaderURI)),
AllOf(QName("Test"), DeclRange(Header.range("spelling")),
DeclURI(TestHeaderURI))));
EXPECT_THAT(Symbols,
UnorderedElementsAre(
AllOf(QName("abc_Test"), DeclRange(Header.range("expansion")),
DeclURI(TestHeaderURI)),
AllOf(QName("Test"), DeclRange(Header.range("spelling")),
DeclURI(TestHeaderURI))));
}

TEST_F(SymbolCollectorTest, SymbolFormedByCLI) {
Expand Down
231 changes: 103 additions & 128 deletions clang-tools-extra/unittests/clangd/SymbolInfoTests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,37 +37,34 @@ auto CreateExpectedSymbolDetails = [](const std::string &name,
TEST(SymbolInfoTests, All) {
std::pair<const char *, std::vector<SymbolDetails>>
TestInputExpectedOutput[] = {
{
R"cpp( // Simple function reference - declaration
{
R"cpp( // Simple function reference - declaration
void foo();
int bar() {
fo^o();
}
)cpp",
{CreateExpectedSymbolDetails("foo", "", "c:@F@foo#")}
},
{
R"cpp( // Simple function reference - definition
{CreateExpectedSymbolDetails("foo", "", "c:@F@foo#")}},
{
R"cpp( // Simple function reference - definition
void foo() {}
int bar() {
fo^o();
}
)cpp",
{CreateExpectedSymbolDetails("foo", "", "c:@F@foo#")}
},
{
R"cpp( // Function in namespace reference
{CreateExpectedSymbolDetails("foo", "", "c:@F@foo#")}},
{
R"cpp( // Function in namespace reference
namespace bar {
void foo();
int baz() {
fo^o();
}
}
)cpp",
{CreateExpectedSymbolDetails("foo", "bar::", "c:@N@bar@F@foo#")}
},
{
R"cpp( // Function in different namespace reference
{CreateExpectedSymbolDetails("foo", "bar::", "c:@N@bar@F@foo#")}},
{
R"cpp( // Function in different namespace reference
namespace bar {
void foo();
}
Expand All @@ -77,10 +74,9 @@ TEST(SymbolInfoTests, All) {
}
}
)cpp",
{CreateExpectedSymbolDetails("foo", "bar::", "c:@N@bar@F@foo#")}
},
{
R"cpp( // Function in global namespace reference
{CreateExpectedSymbolDetails("foo", "bar::", "c:@N@bar@F@foo#")}},
{
R"cpp( // Function in global namespace reference
void foo();
namespace Nbar {
namespace Nbaz {
Expand All @@ -90,10 +86,9 @@ TEST(SymbolInfoTests, All) {
}
}
)cpp",
{CreateExpectedSymbolDetails("foo", "", "c:@F@foo#")}
},
{
R"cpp( // Function in anonymous namespace reference
{CreateExpectedSymbolDetails("foo", "", "c:@F@foo#")}},
{
R"cpp( // Function in anonymous namespace reference
namespace {
void foo();
}
Expand All @@ -103,10 +98,10 @@ TEST(SymbolInfoTests, All) {
}
}
)cpp",
{CreateExpectedSymbolDetails("foo", "(anonymous)", "c:TestTU.cpp@aN@F@foo#")}
},
{
R"cpp( // Function reference - ADL
{CreateExpectedSymbolDetails("foo", "(anonymous)",
"c:TestTU.cpp@aN@F@foo#")}},
{
R"cpp( // Function reference - ADL
namespace bar {
struct BarType {};
void foo(const BarType&);
Expand All @@ -118,64 +113,59 @@ TEST(SymbolInfoTests, All) {
}
}
)cpp",
{CreateExpectedSymbolDetails("foo", "bar::", "c:@N@bar@F@foo#&1$@N@bar@S@BarType#")}
},
{
R"cpp( // Global value reference
{CreateExpectedSymbolDetails(
"foo", "bar::", "c:@N@bar@F@foo#&1$@N@bar@S@BarType#")}},
{
R"cpp( // Global value reference
int value;
void foo(int) { }
void bar() {
foo(val^ue);
}
)cpp",
{CreateExpectedSymbolDetails("value", "", "c:@value")}
},
{
R"cpp( // Local value reference
{CreateExpectedSymbolDetails("value", "", "c:@value")}},
{
R"cpp( // Local value reference
void foo() { int aaa; int bbb = aa^a; }
)cpp",
{CreateExpectedSymbolDetails("aaa", "foo", "c:TestTU.cpp@49@F@foo#@aaa")}
},
{
R"cpp( // Function param
{CreateExpectedSymbolDetails("aaa", "foo",
"c:TestTU.cpp@49@F@foo#@aaa")}},
{
R"cpp( // Function param
void bar(int aaa) {
int bbb = a^aa;
}
)cpp",
{CreateExpectedSymbolDetails("aaa", "bar", "c:TestTU.cpp@38@F@bar#I#@aaa")}
},
{
R"cpp( // Lambda capture
{CreateExpectedSymbolDetails("aaa", "bar",
"c:TestTU.cpp@38@F@bar#I#@aaa")}},
{
R"cpp( // Lambda capture
int ii;
auto lam = [ii]() {
return i^i;
};
)cpp",
{CreateExpectedSymbolDetails("ii", "", "c:@ii")}
},
{
R"cpp( // Macro reference
{CreateExpectedSymbolDetails("ii", "", "c:@ii")}},
{
R"cpp( // Macro reference
#define MACRO 5\nint i = MAC^RO;
)cpp",
{CreateExpectedSymbolDetails("MACRO", "", "c:TestTU.cpp@55@macro@MACRO")}
},
{
R"cpp( // Multiple symbols returned - using overloaded function name
{CreateExpectedSymbolDetails("MACRO", "",
"c:TestTU.cpp@55@macro@MACRO")}},
{
R"cpp( // Multiple symbols returned - using overloaded function name
void foo() {}
void foo(bool) {}
void foo(int) {}
namespace bar {
using ::fo^o;
}
)cpp",
{
CreateExpectedSymbolDetails("foo", "", "c:@F@foo#"),
CreateExpectedSymbolDetails("foo", "", "c:@F@foo#b#"),
CreateExpectedSymbolDetails("foo", "", "c:@F@foo#I#")
}
},
{
R"cpp( // Multiple symbols returned - implicit conversion
{CreateExpectedSymbolDetails("foo", "", "c:@F@foo#"),
CreateExpectedSymbolDetails("foo", "", "c:@F@foo#b#"),
CreateExpectedSymbolDetails("foo", "", "c:@F@foo#I#")}},
{
R"cpp( // Multiple symbols returned - implicit conversion
struct foo {};
struct bar {
bar(const foo&) {}
Expand All @@ -186,53 +176,49 @@ TEST(SymbolInfoTests, All) {
func_baz1(f^f);
}
)cpp",
{
CreateExpectedSymbolDetails("ff", "func_baz2", "c:TestTU.cpp@218@F@func_baz2#@ff"),
CreateExpectedSymbolDetails("bar", "bar::", "c:@S@bar@F@bar#&1$@S@foo#"),
}
},
{
R"cpp( // Type reference - declaration
{
CreateExpectedSymbolDetails(
"ff", "func_baz2", "c:TestTU.cpp@218@F@func_baz2#@ff"),
CreateExpectedSymbolDetails(
"bar", "bar::", "c:@S@bar@F@bar#&1$@S@foo#"),
}},
{
R"cpp( // Type reference - declaration
struct foo;
void bar(fo^o*);
)cpp",
{CreateExpectedSymbolDetails("foo", "", "c:@S@foo")}
},
{
R"cpp( // Type reference - definition
{CreateExpectedSymbolDetails("foo", "", "c:@S@foo")}},
{
R"cpp( // Type reference - definition
struct foo {};
void bar(fo^o*);
)cpp",
{CreateExpectedSymbolDetails("foo", "", "c:@S@foo")}
},
{
R"cpp( // Type Reference - template argumen
{CreateExpectedSymbolDetails("foo", "", "c:@S@foo")}},
{
R"cpp( // Type Reference - template argumen
struct foo {};
template<class T> struct bar {};
void baz() {
bar<fo^o> b;
}
)cpp",
{CreateExpectedSymbolDetails("foo", "", "c:@S@foo")}
},
{
R"cpp( // Template parameter reference - type param
{CreateExpectedSymbolDetails("foo", "", "c:@S@foo")}},
{
R"cpp( // Template parameter reference - type param
template<class TT> struct bar {
T^T t;
};
)cpp",
{ /* not implemented */ }
},
{
R"cpp( // Template parameter reference - type param
{/* not implemented */}},
{
R"cpp( // Template parameter reference - type param
template<int NN> struct bar {
int a = N^N;
};
)cpp",
{ /* not implemented */ }
},
{
R"cpp( // Class member reference - objec
{/* not implemented */}},
{
R"cpp( // Class member reference - objec
struct foo {
int aa;
};
Expand All @@ -241,21 +227,19 @@ TEST(SymbolInfoTests, All) {
f.a^a;
}
)cpp",
{CreateExpectedSymbolDetails("aa", "foo::", "c:@S@foo@FI@aa")}
},
{
R"cpp( // Class member reference - pointer
{CreateExpectedSymbolDetails("aa", "foo::", "c:@S@foo@FI@aa")}},
{
R"cpp( // Class member reference - pointer
struct foo {
int aa;
};
void bar() {
&foo::a^a;
}
)cpp",
{CreateExpectedSymbolDetails("aa", "foo::", "c:@S@foo@FI@aa")}
},
{
R"cpp( // Class method reference - objec
{CreateExpectedSymbolDetails("aa", "foo::", "c:@S@foo@FI@aa")}},
{
R"cpp( // Class method reference - objec
struct foo {
void aa() {}
};
Expand All @@ -264,83 +248,74 @@ TEST(SymbolInfoTests, All) {
f.a^a();
}
)cpp",
{CreateExpectedSymbolDetails("aa", "foo::", "c:@S@foo@F@aa#")}
},
{
R"cpp( // Class method reference - pointer
{CreateExpectedSymbolDetails("aa", "foo::", "c:@S@foo@F@aa#")}},
{
R"cpp( // Class method reference - pointer
struct foo {
void aa() {}
};
void bar() {
&foo::a^a;
}
)cpp",
{CreateExpectedSymbolDetails("aa", "foo::", "c:@S@foo@F@aa#")}
},
{
R"cpp( // Typedef
{CreateExpectedSymbolDetails("aa", "foo::", "c:@S@foo@F@aa#")}},
{
R"cpp( // Typedef
typedef int foo;
void bar() {
fo^o a;
}
)cpp",
{CreateExpectedSymbolDetails("foo", "", "c:TestTU.cpp@T@foo")}
},
{
R"cpp( // Type alias
{CreateExpectedSymbolDetails("foo", "", "c:TestTU.cpp@T@foo")}},
{
R"cpp( // Type alias
using foo = int;
void bar() {
fo^o a;
}
)cpp",
{CreateExpectedSymbolDetails("foo", "", "c:@foo")}
},
{
R"cpp( // Namespace reference
{CreateExpectedSymbolDetails("foo", "", "c:@foo")}},
{
R"cpp( // Namespace reference
namespace foo {}
using namespace fo^o;
)cpp",
{CreateExpectedSymbolDetails("foo", "", "c:@N@foo")}
},
{
R"cpp( // Enum value reference
{CreateExpectedSymbolDetails("foo", "", "c:@N@foo")}},
{
R"cpp( // Enum value reference
enum foo { bar, baz };
void f() {
foo fff = ba^r;
}
)cpp",
{CreateExpectedSymbolDetails("bar", "foo", "c:@E@foo@bar")}
},
{
R"cpp( // Enum class value reference
{CreateExpectedSymbolDetails("bar", "foo", "c:@E@foo@bar")}},
{
R"cpp( // Enum class value reference
enum class foo { bar, baz };
void f() {
foo fff = foo::ba^r;
}
)cpp",
{CreateExpectedSymbolDetails("bar", "foo::", "c:@E@foo@bar")}
},
{
R"cpp( // Type inferrence with auto keyword
{CreateExpectedSymbolDetails("bar", "foo::", "c:@E@foo@bar")}},
{
R"cpp( // Type inferrence with auto keyword
struct foo {};
foo getfoo() { return foo{}; }
void f() {
au^to a = getfoo();
}
)cpp",
{/* not implemented */}
},
{
R"cpp( // decltype
{/* not implemented */}},
{
R"cpp( // decltype
struct foo {};
void f() {
foo f;
declt^ype(f);
}
)cpp",
{/* not implemented */}
},
};
{/* not implemented */}},
};

for (const auto &T : TestInputExpectedOutput) {
Annotations TestInput(T.first);
Expand Down
1 change: 0 additions & 1 deletion clang-tools-extra/unittests/clangd/SyncAPI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,5 @@ RefSlab getRefs(const SymbolIndex &Index, SymbolID ID) {
return std::move(Slab).build();
}


} // namespace clangd
} // namespace clang
64 changes: 31 additions & 33 deletions clang-tools-extra/unittests/clangd/TUSchedulerTests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@
#include "Matchers.h"
#include "TUScheduler.h"
#include "TestFS.h"
#include "gmock/gmock.h"
#include "llvm/ADT/ScopeExit.h"
#include "gmock/gmock.h"
#include "gtest/gtest.h"
#include <algorithm>
#include <utility>
Expand Down Expand Up @@ -389,22 +389,20 @@ TEST_F(TUSchedulerTests, ManyUpdates) {
}
{
WithContextValue WithNonce(NonceKey, ++Nonce);
S.runWithAST("CheckAST", File,
[File, Inputs, Nonce, &Mut,
&TotalASTReads](Expected<InputsAndAST> AST) {
EXPECT_THAT(Context::current().get(NonceKey),
Pointee(Nonce));

ASSERT_TRUE((bool)AST);
EXPECT_EQ(AST->Inputs.FS, Inputs.FS);
EXPECT_EQ(AST->Inputs.Contents, Inputs.Contents);

std::lock_guard<std::mutex> Lock(Mut);
++TotalASTReads;
EXPECT_EQ(
File,
*TUScheduler::getFileBeingProcessedInContext());
});
S.runWithAST(
"CheckAST", File,
[File, Inputs, Nonce, &Mut,
&TotalASTReads](Expected<InputsAndAST> AST) {
EXPECT_THAT(Context::current().get(NonceKey), Pointee(Nonce));

ASSERT_TRUE((bool)AST);
EXPECT_EQ(AST->Inputs.FS, Inputs.FS);
EXPECT_EQ(AST->Inputs.Contents, Inputs.Contents);

std::lock_guard<std::mutex> Lock(Mut);
++TotalASTReads;
EXPECT_EQ(File, *TUScheduler::getFileBeingProcessedInContext());
});
}

{
Expand Down Expand Up @@ -505,29 +503,29 @@ TEST_F(TUSchedulerTests, EmptyPreamble) {
)cpp";
auto WithEmptyPreamble = R"cpp(int main() {})cpp";
S.update(Foo, getInputs(Foo, WithPreamble), WantDiagnostics::Auto);
S.runWithPreamble("getNonEmptyPreamble", Foo, TUScheduler::Stale,
[&](Expected<InputsAndPreamble> Preamble) {
// We expect to get a non-empty preamble.
EXPECT_GT(cantFail(std::move(Preamble))
.Preamble->Preamble.getBounds()
.Size,
0u);
});
S.runWithPreamble(
"getNonEmptyPreamble", Foo, TUScheduler::Stale,
[&](Expected<InputsAndPreamble> Preamble) {
// We expect to get a non-empty preamble.
EXPECT_GT(
cantFail(std::move(Preamble)).Preamble->Preamble.getBounds().Size,
0u);
});
// Wait for the preamble is being built.
ASSERT_TRUE(S.blockUntilIdle(timeoutSeconds(10)));

// Update the file which results in an empty preamble.
S.update(Foo, getInputs(Foo, WithEmptyPreamble), WantDiagnostics::Auto);
// Wait for the preamble is being built.
ASSERT_TRUE(S.blockUntilIdle(timeoutSeconds(10)));
S.runWithPreamble("getEmptyPreamble", Foo, TUScheduler::Stale,
[&](Expected<InputsAndPreamble> Preamble) {
// We expect to get an empty preamble.
EXPECT_EQ(cantFail(std::move(Preamble))
.Preamble->Preamble.getBounds()
.Size,
0u);
});
S.runWithPreamble(
"getEmptyPreamble", Foo, TUScheduler::Stale,
[&](Expected<InputsAndPreamble> Preamble) {
// We expect to get an empty preamble.
EXPECT_EQ(
cantFail(std::move(Preamble)).Preamble->Preamble.getBounds().Size,
0u);
});
}

TEST_F(TUSchedulerTests, RunWaitsForPreamble) {
Expand Down
3 changes: 2 additions & 1 deletion clang-tools-extra/unittests/clangd/XRefsTests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,8 @@ TEST(GoToDefinition, WithIndex) {
)cpp");
EXPECT_THAT(runFindDefinitionsWithIndex(Test),
testing::ElementsAreArray({
RangeIs(Test.range()), RangeIs(SymbolHeader.range("forward")),
RangeIs(Test.range()),
RangeIs(SymbolHeader.range("forward")),
}));
}

Expand Down