diff options
8 files changed, 57 insertions, 7 deletions
diff --git a/clang-tools-extra/clangd/unittests/FindTargetTests.cpp b/clang-tools-extra/clangd/unittests/FindTargetTests.cpp index bf100630b30..9e1f1c18989 100644 --- a/clang-tools-extra/clangd/unittests/FindTargetTests.cpp +++ b/clang-tools-extra/clangd/unittests/FindTargetTests.cpp @@ -226,18 +226,26 @@ TEST_F(TargetDeclTest, Types) { EXPECT_DECLS("TypedefTypeLoc", {"typedef S X", Rel::Alias}, {"struct S", Rel::Underlying}); + // FIXME: Auto-completion in a template requires disabling delayed template + // parsing. + Flags = {"-fno-delayed-template-parsing"}; Code = R"cpp( template<class T> void foo() { [[T]] x; } )cpp"; // FIXME: We don't do a good job printing TemplateTypeParmDecls, apparently! EXPECT_DECLS("TemplateTypeParmTypeLoc", ""); + Flags.clear(); + // FIXME: Auto-completion in a template requires disabling delayed template + // parsing. + Flags = {"-fno-delayed-template-parsing"}; Code = R"cpp( template<template<typename> class T> void foo() { [[T<int>]] x; } )cpp"; EXPECT_DECLS("TemplateSpecializationTypeLoc", "template <typename> class T"); + Flags.clear(); Code = R"cpp( struct S{}; @@ -394,6 +402,10 @@ TEST_F(TargetDeclTest, Lambda) { } TEST_F(TargetDeclTest, OverloadExpr) { + // FIXME: Auto-completion in a template requires disabling delayed template + // parsing. + Flags = {"-fno-delayed-template-parsing"}; + Code = R"cpp( void func(int*); void func(char*); @@ -509,6 +521,10 @@ protected: TestTU TU; TU.Code = Code; + // FIXME: Auto-completion in a template requires disabling delayed template + // parsing. + TU.ExtraArgs.push_back("-fno-delayed-template-parsing"); + auto AST = TU.build(); auto *TestDecl = &findDecl(AST, "foo"); diff --git a/clang-tools-extra/clangd/unittests/ParsedASTTests.cpp b/clang-tools-extra/clangd/unittests/ParsedASTTests.cpp index 53e2f4b68e1..04a57676934 100644 --- a/clang-tools-extra/clangd/unittests/ParsedASTTests.cpp +++ b/clang-tools-extra/clangd/unittests/ParsedASTTests.cpp @@ -144,6 +144,9 @@ TEST(ParsedASTTest, template <> int foo<bool> = 0; )cpp"; + // FIXME: Auto-completion in a template requires disabling delayed template + // parsing. + TU.ExtraArgs.push_back("-fno-delayed-template-parsing"); auto AST = TU.build(); EXPECT_THAT( diff --git a/clang-tools-extra/clangd/unittests/SelectionTests.cpp b/clang-tools-extra/clangd/unittests/SelectionTests.cpp index e2cbff37b3d..309f4c0dbcd 100644 --- a/clang-tools-extra/clangd/unittests/SelectionTests.cpp +++ b/clang-tools-extra/clangd/unittests/SelectionTests.cpp @@ -289,7 +289,15 @@ TEST(SelectionTest, CommonAncestor) { }; for (const Case &C : Cases) { Annotations Test(C.Code); - auto AST = TestTU::withCode(Test.code()).build(); + + TestTU TU; + TU.Code = Test.code(); + + // FIXME: Auto-completion in a template requires disabling delayed template + // parsing. + TU.ExtraArgs.push_back("-fno-delayed-template-parsing"); + + auto AST = TU.build(); auto T = makeSelectionTree(C.Code, AST); EXPECT_EQ("TranslationUnitDecl", nodeKind(&T.root())) << C.Code; diff --git a/clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp b/clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp index 8003e359bbb..1085b6f4928 100644 --- a/clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp +++ b/clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp @@ -99,7 +99,13 @@ void checkHighlightings(llvm::StringRef Code, /*FileContent*/ llvm::StringRef>> AdditionalFiles = {}) { Annotations Test(Code); - auto TU = TestTU::withCode(Test.code()); + TestTU TU; + TU.Code = Test.code(); + + // FIXME: Auto-completion in a template requires disabling delayed template + // parsing. + TU.ExtraArgs.push_back("-fno-delayed-template-parsing"); + for (auto File : AdditionalFiles) TU.AdditionalFiles.insert({File.first, File.second}); auto AST = TU.build(); @@ -720,4 +726,4 @@ TEST(SemanticHighlighting, DiffBeyondTheEndOfFile) { } // namespace } // namespace clangd -} // namespace clang
\ No newline at end of file +} // namespace clang diff --git a/clang-tools-extra/clangd/unittests/TweakTesting.cpp b/clang-tools-extra/clangd/unittests/TweakTesting.cpp index 2e72cbd0a70..63ecd7b4d4d 100644 --- a/clang-tools-extra/clangd/unittests/TweakTesting.cpp +++ b/clang-tools-extra/clangd/unittests/TweakTesting.cpp @@ -82,9 +82,11 @@ std::string TweakTest::apply(llvm::StringRef MarkedCode) const { std::string WrappedCode = wrap(Context, MarkedCode); Annotations Input(WrappedCode); auto Selection = rangeOrPoint(Input); + TestTU TU; TU.HeaderCode = Header; TU.Code = Input.code(); + TU.ExtraArgs = ExtraArgs; ParsedAST AST = TU.build(); Tweak::Selection S(AST, Selection.first, Selection.second); diff --git a/clang-tools-extra/clangd/unittests/TweakTesting.h b/clang-tools-extra/clangd/unittests/TweakTesting.h index 6817e727699..1e8cd58849b 100644 --- a/clang-tools-extra/clangd/unittests/TweakTesting.h +++ b/clang-tools-extra/clangd/unittests/TweakTesting.h @@ -55,6 +55,9 @@ protected: // testcases. std::string Header; + // Extra flags passed to the compilation in apply(). + std::vector<const char *> ExtraArgs; + // Context in which snippets of code should be placed to run tweaks. CodeContext Context = File; diff --git a/clang-tools-extra/clangd/unittests/TweakTests.cpp b/clang-tools-extra/clangd/unittests/TweakTests.cpp index 8cc29dd182b..36efbef0a1a 100644 --- a/clang-tools-extra/clangd/unittests/TweakTests.cpp +++ b/clang-tools-extra/clangd/unittests/TweakTests.cpp @@ -481,6 +481,7 @@ TEST_F(ExpandMacroTest, Test) { TWEAK_TEST(ExpandAutoType); TEST_F(ExpandAutoTypeTest, Test) { + Header = R"cpp( namespace ns { struct Class { @@ -507,9 +508,6 @@ TEST_F(ExpandAutoTypeTest, Test) { // check that namespaces are shortened EXPECT_EQ(apply("namespace ns { void f() { ^auto C = Class(); } }"), "namespace ns { void f() { Class C = Class(); } }"); - // unknown types in a template should not be replaced - EXPECT_THAT(apply("template <typename T> void x() { ^auto y = T::z(); }"), - StartsWith("fail: Could not deduce type for 'auto' type")); // undefined functions should not be replaced EXPECT_THAT(apply("au^to x = doesnt_exist();"), StartsWith("fail: Could not deduce type for 'auto' type")); @@ -530,6 +528,13 @@ TEST_F(ExpandAutoTypeTest, Test) { R"cpp(const char * x = "test")cpp"); EXPECT_UNAVAILABLE("dec^ltype(au^to) x = 10;"); + + // FIXME: Auto-completion in a template requires disabling delayed template + // parsing. + ExtraArgs.push_back("-fno-delayed-template-parsing"); + // unknown types in a template should not be replaced + EXPECT_THAT(apply("template <typename T> void x() { ^auto y = T::z(); }"), + StartsWith("fail: Could not deduce type for 'auto' type")); } TWEAK_TEST(ExtractFunction); diff --git a/clang-tools-extra/clangd/unittests/XRefsTests.cpp b/clang-tools-extra/clangd/unittests/XRefsTests.cpp index 60cba82492d..aafcb475baa 100644 --- a/clang-tools-extra/clangd/unittests/XRefsTests.cpp +++ b/clang-tools-extra/clangd/unittests/XRefsTests.cpp @@ -462,7 +462,14 @@ TEST(LocateSymbol, All) { if (!T.ranges("def").empty()) WantDef = T.range("def"); - auto AST = TestTU::withCode(T.code()).build(); + TestTU TU; + TU.Code = T.code(); + + // FIXME: Auto-completion in a template requires disabling delayed template + // parsing. + TU.ExtraArgs.push_back("-fno-delayed-template-parsing"); + + auto AST = TU.build(); auto Results = locateSymbolAt(AST, T.point()); if (!WantDecl) { |