[clang-tools-extra] r353687 - [clangd] Make system header mappings available for PreambleParsedCallback
Kadir Cetinkaya via cfe-commits
cfe-commits at lists.llvm.org
Mon Feb 11 02:31:13 PST 2019
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>
More information about the cfe-commits
mailing list