This revision was automatically updated to reflect the committed changes. Closed by commit rG038f03cb5ef5: [clangd] Force delayed-template-parsing off in code completion. (authored by sammccall).
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D77176/new/ https://reviews.llvm.org/D77176 Files: clang-tools-extra/clangd/CodeComplete.cpp clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp Index: clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp +++ clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp @@ -127,7 +127,6 @@ Annotations Test(Text); auto TU = TestTU::withCode(Test.code()); // To make sure our tests for completiopns inside templates work on Windows. - TU.ExtraArgs = {"-fno-delayed-template-parsing"}; TU.Filename = FilePath.str(); return completions(TU, Test.point(), std::move(IndexSymbols), std::move(Opts)); @@ -2660,6 +2659,20 @@ EXPECT_THAT(Signatures, Contains(Sig("x() -> auto"))); } +TEST(CompletionTest, DelayedTemplateParsing) { + Annotations Test(R"cpp( + int xxx; + template <typename T> int foo() { return xx^; } + )cpp"); + auto TU = TestTU::withCode(Test.code()); + // Even though delayed-template-parsing is on, we will disable it to provide + // completion in templates. + TU.ExtraArgs.push_back("-fdelayed-template-parsing"); + + EXPECT_THAT(completions(TU, Test.point()).Completions, + Contains(Named("xxx"))); +} + TEST(CompletionTest, CompletionRange) { const char *WithRange = "auto x = [[abc]]^"; auto Completions = completions(WithRange); Index: clang-tools-extra/clangd/CodeComplete.cpp =================================================================== --- clang-tools-extra/clangd/CodeComplete.cpp +++ clang-tools-extra/clangd/CodeComplete.cpp @@ -1072,6 +1072,10 @@ FrontendOpts.SkipFunctionBodies = true; // Disable typo correction in Sema. CI->getLangOpts()->SpellChecking = false; + // Code completion won't trigger in delayed template bodies. + // This is on-by-default in windows to allow parsing SDK headers; we're only + // disabling it for the main-file (not preamble). + CI->getLangOpts()->DelayedTemplateParsing = false; // Setup code completion. FrontendOpts.CodeCompleteOpts = Options; FrontendOpts.CodeCompletionAt.FileName = std::string(Input.FileName);
Index: clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp +++ clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp @@ -127,7 +127,6 @@ Annotations Test(Text); auto TU = TestTU::withCode(Test.code()); // To make sure our tests for completiopns inside templates work on Windows. - TU.ExtraArgs = {"-fno-delayed-template-parsing"}; TU.Filename = FilePath.str(); return completions(TU, Test.point(), std::move(IndexSymbols), std::move(Opts)); @@ -2660,6 +2659,20 @@ EXPECT_THAT(Signatures, Contains(Sig("x() -> auto"))); } +TEST(CompletionTest, DelayedTemplateParsing) { + Annotations Test(R"cpp( + int xxx; + template <typename T> int foo() { return xx^; } + )cpp"); + auto TU = TestTU::withCode(Test.code()); + // Even though delayed-template-parsing is on, we will disable it to provide + // completion in templates. + TU.ExtraArgs.push_back("-fdelayed-template-parsing"); + + EXPECT_THAT(completions(TU, Test.point()).Completions, + Contains(Named("xxx"))); +} + TEST(CompletionTest, CompletionRange) { const char *WithRange = "auto x = [[abc]]^"; auto Completions = completions(WithRange); Index: clang-tools-extra/clangd/CodeComplete.cpp =================================================================== --- clang-tools-extra/clangd/CodeComplete.cpp +++ clang-tools-extra/clangd/CodeComplete.cpp @@ -1072,6 +1072,10 @@ FrontendOpts.SkipFunctionBodies = true; // Disable typo correction in Sema. CI->getLangOpts()->SpellChecking = false; + // Code completion won't trigger in delayed template bodies. + // This is on-by-default in windows to allow parsing SDK headers; we're only + // disabling it for the main-file (not preamble). + CI->getLangOpts()->DelayedTemplateParsing = false; // Setup code completion. FrontendOpts.CodeCompleteOpts = Options; FrontendOpts.CodeCompletionAt.FileName = std::string(Input.FileName);
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits