[PATCH] D146028: [clangd] Patch main file macros in preamble
Kadir Cetinkaya via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Mar 14 03:14:13 PDT 2023
kadircet created this revision.
Herald added a subscriber: arphaman.
Herald added a project: All.
kadircet requested review of this revision.
Herald added subscribers: cfe-commits, MaskRay, ilya-biryukov.
Herald added a project: clang-tools-extra.
Depends on D146026 <https://reviews.llvm.org/D146026>
Fixes https://github.com/clangd/clangd/issues/1537.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D146028
Files:
clang-tools-extra/clangd/Preamble.cpp
clang-tools-extra/clangd/Preamble.h
clang-tools-extra/clangd/unittests/PreambleTests.cpp
Index: clang-tools-extra/clangd/unittests/PreambleTests.cpp
===================================================================
--- clang-tools-extra/clangd/unittests/PreambleTests.cpp
+++ clang-tools-extra/clangd/unittests/PreambleTests.cpp
@@ -31,7 +31,6 @@
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/ScopedPrinter.h"
#include "llvm/Support/VirtualFileSystem.h"
-#include "llvm/Testing/Support/SupportHelpers.h"
#include "gmock/gmock.h"
#include "gtest/gtest-matchers.h"
#include "gtest/gtest.h"
@@ -856,11 +855,12 @@
]]
#pragma $y[[mark YY
]]
+#define BAZ
#endif)cpp");
auto AST = createPatchedAST(Code.code(), NewCode.code());
- // FIXME: Macros and marks have locations that need to be patched.
- EXPECT_THAT(AST->getMacros().Names, IsEmpty());
+ EXPECT_THAT(AST->getMacros().Names.keys(),
+ UnorderedElementsAreArray({"FOO", "BAR", "BAZ"}));
EXPECT_THAT(AST->getMarks(),
UnorderedElementsAre(Mark(NewCode.range("x"), " XX"),
Mark(NewCode.range("y"), " YY")));
Index: clang-tools-extra/clangd/Preamble.h
===================================================================
--- clang-tools-extra/clangd/Preamble.h
+++ clang-tools-extra/clangd/Preamble.h
@@ -183,6 +183,7 @@
PreambleBounds ModifiedBounds = {0, false};
const PreambleData *Baseline = nullptr;
std::vector<PragmaMark> PatchedMarks;
+ MainFileMacros PatchedMacros;
};
} // namespace clangd
Index: clang-tools-extra/clangd/Preamble.cpp
===================================================================
--- clang-tools-extra/clangd/Preamble.cpp
+++ clang-tools-extra/clangd/Preamble.cpp
@@ -324,6 +324,7 @@
// Literal lines of the preamble contents.
std::vector<llvm::StringRef> Lines;
PreambleBounds Bounds = {0, false};
+ MainFileMacros Macros;
};
/// Scans the preprocessor directives in the preamble section of the file by
@@ -378,6 +379,8 @@
SP.Bounds = Bounds;
PP.addPPCallbacks(
std::make_unique<DirectiveCollector>(PP, SP.TextualDirectives));
+ PP.addPPCallbacks(std::make_unique<CollectMainFileMacros>(
+ PP.getSourceManager(), SP.Macros));
if (llvm::Error Err = Action.Execute())
return std::move(Err);
Action.EndSourceFile();
@@ -879,6 +882,7 @@
PP.PatchedDiags = patchDiags(Baseline.Diags, *BaselineScan, *ModifiedScan);
PP.PatchedMarks = getPragmaMarks(*ModifiedScan);
+ PP.PatchedMacros = std::move(ModifiedScan->Macros);
dlog("Created preamble patch: {0}", Patch.str());
Patch.flush();
return PP;
@@ -938,8 +942,7 @@
MainFileMacros PreamblePatch::mainFileMacros() const {
if (PatchContents.empty())
return Baseline->Macros;
- // FIXME: Patch main file macros.
- return MainFileMacros();
+ return PatchedMacros;
}
} // namespace clangd
} // namespace clang
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D146028.505007.patch
Type: text/x-patch
Size: 2848 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20230314/8e143a45/attachment.bin>
More information about the cfe-commits
mailing list