[clang-tools-extra] [clangd] Replay macro definitions from preamble for clang-tidy checks (PR #202495)

Aleksandr Platonov via cfe-commits cfe-commits at lists.llvm.org
Mon Jun 15 08:29:11 PDT 2026


================
@@ -107,6 +113,52 @@ MATCHER_P(rangeIs, R, "") {
   return arg.beginOffset() == R.Begin && arg.endOffset() == R.End;
 }
 
+TEST(ReplayPreambleTest, MacroDefinitions) {
+  DefinedMacros.clear();
+
+  TestTU TU;
+  TU.ClangTidyProvider = addTidyChecks(CheckName);
+  TU.Code = R"cpp(
+      #ifndef _TEST_H
+      #define _TEST_H
+      #define _TEST_MACRO
+      #endif
+  )cpp";
+
+  Config Cfg;
+  Cfg.Diagnostics.ClangTidy.FastCheckFilter = Config::FastCheckPolicy::Loose;
+  WithContextValue WithCfg(Config::Key, std::move(Cfg));
+
+  TU.build();
+
+  EXPECT_THAT(DefinedMacros, testing::Contains(std::string("_TEST_H")));
+  EXPECT_THAT(DefinedMacros, testing::Contains(std::string("_TEST_MACRO")));
----------------
ArcsinX wrote:

nit: I think we can use macros from the AST instead of manually writing `"_TEST_MACRO"` and `"_TEST_H"`.

Something like this:
```cpp
  auto AST = TU.build();
  EXPECT_THAT(AST.getMacros().Names.keys(),
              testing::UnorderedElementsAreArray(DefinedMacros));
```

We can assume that `AST.getMacros().Names` is correct, because we already have tests in `PreambleTest.cpp` for this.

https://github.com/llvm/llvm-project/pull/202495


More information about the cfe-commits mailing list