[PATCH] D147034: [clangd] Replace the hacky include-cleaner macro-reference implementation.

Kadir Cetinkaya via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Apr 20 04:55:29 PDT 2023


kadircet added a comment.

thanks!



================
Comment at: clang-tools-extra/clangd/IncludeCleaner.cpp:143
+  std::vector<include_cleaner::SymbolReference> Macros;
+  for (const auto &MAndRefs : AST.getMacros().MacroRefs) {
+    for (const auto &Ref : MAndRefs.second) {
----------------
nit: `const auto &[SID, Refs]`


================
Comment at: clang-tools-extra/clangd/IncludeCleaner.cpp:145
+    for (const auto &Ref : MAndRefs.second) {
+      auto L = sourceLocationInMainFile(SM, Ref.Rng.start);
+      if (!L) {
----------------
it's unfortunate that we're scanning the file for every occurrence of a macro just to get an offset. this might get problematic in big test files, what about introducing an offset to `MacroOccurence`?


================
Comment at: clang-tools-extra/clangd/IncludeCleaner.cpp:150
+      }
+      if (const auto *Tok =
+             AST.getTokens().spelledTokenAt(*L)) {
----------------
nit: early exit instead


================
Comment at: clang-tools-extra/clangd/IncludeCleaner.cpp:156
+
+        if (auto DefLoc = Macro->Info->getDefinitionLoc(); DefLoc.isValid())
+          Macros.push_back(
----------------
we should use `Macro->NameLoc`, not the definition loc inside macro-info


================
Comment at: clang-tools-extra/clangd/IncludeCleaner.cpp:162
+               Ref.InConditionalDirective
+                   ? include_cleaner::RefType::Implicit
+                   : include_cleaner::RefType::Explicit});
----------------
i believe you meant `Ambigious` here. the reference is "explicitly" in the code, but we can't say for sure if it's intended.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D147034/new/

https://reviews.llvm.org/D147034



More information about the cfe-commits mailing list