Author: kadircet Date: Mon Feb 11 02:31:13 2019 New Revision: 353687 URL: http://llvm.org/viewvc/llvm-project?rev=353687&view=rev Log: [clangd] Make system header mappings available for PreambleParsedCallback
Summary: SystemHeaderMappings were added only after takeIncludes call, which resulted in getting mapping on main file ast updates but not on preamble ast updates. Fixes https://github.com/clangd/clangd/issues/8 Reviewers: hokein Subscribers: ilya-biryukov, ioeric, MaskRay, jkorous, arphaman, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D58029 Modified: clang-tools-extra/trunk/clangd/ClangdUnit.cpp clang-tools-extra/trunk/unittests/clangd/FileIndexTests.cpp Modified: clang-tools-extra/trunk/clangd/ClangdUnit.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/ClangdUnit.cpp?rev=353687&r1=353686&r2=353687&view=diff ============================================================================== --- clang-tools-extra/trunk/clangd/ClangdUnit.cpp (original) +++ clang-tools-extra/trunk/clangd/ClangdUnit.cpp Mon Feb 11 02:31:13 2019 @@ -96,14 +96,13 @@ private: class CppFilePreambleCallbacks : public PreambleCallbacks { public: CppFilePreambleCallbacks(PathRef File, PreambleParsedCallback ParsedCallback) - : File(File), ParsedCallback(ParsedCallback) {} + : File(File), ParsedCallback(ParsedCallback) { + addSystemHeadersMapping(&CanonIncludes); + } IncludeStructure takeIncludes() { return std::move(Includes); } - CanonicalIncludes takeCanonicalIncludes() { - addSystemHeadersMapping(&CanonIncludes); - return std::move(CanonIncludes); - } + CanonicalIncludes takeCanonicalIncludes() { return std::move(CanonIncludes); } void AfterExecute(CompilerInstance &CI) override { if (!ParsedCallback) Modified: clang-tools-extra/trunk/unittests/clangd/FileIndexTests.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/FileIndexTests.cpp?rev=353687&r1=353686&r2=353687&view=diff ============================================================================== --- clang-tools-extra/trunk/unittests/clangd/FileIndexTests.cpp (original) +++ clang-tools-extra/trunk/unittests/clangd/FileIndexTests.cpp Mon Feb 11 02:31:13 2019 @@ -212,6 +212,39 @@ TEST(FileIndexTest, IncludeCollected) { "<the/good/header.h>"); } +TEST(FileIndexTest, HasSystemHeaderMappingsInPreamble) { + FileIndex Index; + const std::string Header = R"cpp( + class Foo {}; + )cpp"; + auto MainFile = testPath("foo.cpp"); + auto HeaderFile = testPath("bits/alloc_traits.h"); + std::vector<const char *> Cmd = {"clang", "-xc++", MainFile.c_str(), + "-include", HeaderFile.c_str()}; + // Preparse ParseInputs. + ParseInputs PI; + PI.CompileCommand.Directory = testRoot(); + PI.CompileCommand.Filename = MainFile; + PI.CompileCommand.CommandLine = {Cmd.begin(), Cmd.end()}; + PI.Contents = ""; + PI.FS = buildTestFS({{MainFile, ""}, {HeaderFile, Header}}); + + // Prepare preamble. + auto CI = buildCompilerInvocation(PI); + auto PreambleData = buildPreamble( + MainFile, *buildCompilerInvocation(PI), /*OldPreamble=*/nullptr, + tooling::CompileCommand(), PI, std::make_shared<PCHContainerOperations>(), + /*StoreInMemory=*/true, + [&](ASTContext &Ctx, std::shared_ptr<Preprocessor> PP, + const CanonicalIncludes &Includes) { + Index.updatePreamble(MainFile, Ctx, PP, Includes); + }); + auto Symbols = runFuzzyFind(Index, ""); + EXPECT_THAT(Symbols, ElementsAre(_)); + EXPECT_THAT(Symbols.begin()->IncludeHeaders.front().IncludeHeader, + "<memory>"); +} + TEST(FileIndexTest, TemplateParamsInLabel) { auto Source = R"cpp( template <class Ty> _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits