[clang-tools-extra] [include-cleaner] Respect langopts when analyzing macro names (PR #123634)

2025-01-21 Thread kadir çetinkaya via cfe-commits

https://github.com/kadircet closed 
https://github.com/llvm/llvm-project/pull/123634
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [include-cleaner] Respect langopts when analyzing macro names (PR #123634)

2025-01-20 Thread Haojian Wu via cfe-commits

https://github.com/hokein approved this pull request.


https://github.com/llvm/llvm-project/pull/123634
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [include-cleaner] Respect langopts when analyzing macro names (PR #123634)

2025-01-20 Thread via cfe-commits

llvmbot wrote:




@llvm/pr-subscribers-clangd

Author: kadir çetinkaya (kadircet)


Changes

Fixes https://github.com/llvm/llvm-project/issues/113926.
Fixes https://github.com/llvm/llvm-project/issues/63976.


---
Full diff: https://github.com/llvm/llvm-project/pull/123634.diff


11 Files Affected:

- (modified) clang-tools-extra/clangd/Hover.cpp (+3-2) 
- (modified) clang-tools-extra/clangd/index/SymbolCollector.cpp (+1-1) 
- (modified) 
clang-tools-extra/include-cleaner/include/clang-include-cleaner/Analysis.h 
(+1-1) 
- (modified) clang-tools-extra/include-cleaner/lib/Analysis.cpp (+2-2) 
- (modified) clang-tools-extra/include-cleaner/lib/AnalysisInternal.h (+5-2) 
- (modified) clang-tools-extra/include-cleaner/lib/FindHeaders.cpp (+4-2) 
- (modified) clang-tools-extra/include-cleaner/lib/HTMLReport.cpp (+10-8) 
- (modified) clang-tools-extra/include-cleaner/lib/LocateSymbol.cpp (+8-4) 
- (modified) clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp (+3-4) 
- (modified) clang-tools-extra/include-cleaner/unittests/FindHeadersTest.cpp 
(+29-6) 
- (modified) clang-tools-extra/include-cleaner/unittests/LocateSymbolTest.cpp 
(+11-8) 


``diff
diff --git a/clang-tools-extra/clangd/Hover.cpp 
b/clang-tools-extra/clangd/Hover.cpp
index 5e136d0e76ece7..3ab3d890305204 100644
--- a/clang-tools-extra/clangd/Hover.cpp
+++ b/clang-tools-extra/clangd/Hover.cpp
@@ -1193,12 +1193,13 @@ void maybeAddSymbolProviders(ParsedAST &AST, HoverInfo 
&HI,
  include_cleaner::Symbol Sym) {
   trace::Span Tracer("Hover::maybeAddSymbolProviders");
 
-  const SourceManager &SM = AST.getSourceManager();
   llvm::SmallVector RankedProviders =
-  include_cleaner::headersForSymbol(Sym, SM, &AST.getPragmaIncludes());
+  include_cleaner::headersForSymbol(Sym, AST.getPreprocessor(),
+&AST.getPragmaIncludes());
   if (RankedProviders.empty())
 return;
 
+  const SourceManager &SM = AST.getSourceManager();
   std::string Result;
   include_cleaner::Includes ConvertedIncludes = convertIncludes(AST);
   for (const auto &P : RankedProviders) {
diff --git a/clang-tools-extra/clangd/index/SymbolCollector.cpp 
b/clang-tools-extra/clangd/index/SymbolCollector.cpp
index 6d0af20e31260c..1de7faf81746ee 100644
--- a/clang-tools-extra/clangd/index/SymbolCollector.cpp
+++ b/clang-tools-extra/clangd/index/SymbolCollector.cpp
@@ -888,7 +888,7 @@ void SymbolCollector::setIncludeLocation(const Symbol &S, 
SourceLocation DefLoc,
   // might run while parsing, rather than at the end of a translation unit.
   // Hence we see more and more redecls over time.
   SymbolProviders[S.ID] =
-  include_cleaner::headersForSymbol(Sym, SM, Opts.PragmaIncludes);
+  include_cleaner::headersForSymbol(Sym, *PP, Opts.PragmaIncludes);
 }
 
 llvm::StringRef getStdHeader(const Symbol *S, const LangOptions &LangOpts) {
diff --git 
a/clang-tools-extra/include-cleaner/include/clang-include-cleaner/Analysis.h 
b/clang-tools-extra/include-cleaner/include/clang-include-cleaner/Analysis.h
index 46ca3c9d080740..c3241763237d14 100644
--- a/clang-tools-extra/include-cleaner/include/clang-include-cleaner/Analysis.h
+++ b/clang-tools-extra/include-cleaner/include/clang-include-cleaner/Analysis.h
@@ -90,7 +90,7 @@ std::string fixIncludes(const AnalysisResults &Results,
 /// Returned headers are sorted by relevance, first element is the most
 /// likely provider for the symbol.
 llvm::SmallVector headersForSymbol(const Symbol &S,
-   const SourceManager &SM,
+   const Preprocessor &PP,
const PragmaIncludes *PI);
 } // namespace include_cleaner
 } // namespace clang
diff --git a/clang-tools-extra/include-cleaner/lib/Analysis.cpp 
b/clang-tools-extra/include-cleaner/lib/Analysis.cpp
index e3a4834cb19aeb..a1781f4e24f2e8 100644
--- a/clang-tools-extra/include-cleaner/lib/Analysis.cpp
+++ b/clang-tools-extra/include-cleaner/lib/Analysis.cpp
@@ -64,7 +64,7 @@ void walkUsed(llvm::ArrayRef ASTRoots,
   // FIXME: Most of the work done here is repetitive. It might be useful to
   // have a cache/batching.
   SymbolReference SymRef{ND, Loc, RT};
-  return CB(SymRef, headersForSymbol(ND, SM, PI));
+  return CB(SymRef, headersForSymbol(ND, PP, PI));
 });
   }
   for (const SymbolReference &MacroRef : MacroRefs) {
@@ -72,7 +72,7 @@ void walkUsed(llvm::ArrayRef ASTRoots,
 if (!SM.isWrittenInMainFile(SM.getSpellingLoc(MacroRef.RefLocation)) ||
 shouldIgnoreMacroReference(PP, MacroRef.Target.macro()))
   continue;
-CB(MacroRef, headersForSymbol(MacroRef.Target, SM, PI));
+CB(MacroRef, headersForSymbol(MacroRef.Target, PP, PI));
   }
 }
 
diff --git a/clang-tools-extra/include-cleaner/lib/AnalysisInternal.h 
b/clang-tools-extra/include-cleaner/lib/AnalysisInternal.h
index cd796c2da7b805..7d170fd15014d2 100644
--- a/clang-tools-extra/include-

[clang-tools-extra] [include-cleaner] Respect langopts when analyzing macro names (PR #123634)

2025-01-20 Thread kadir çetinkaya via cfe-commits

https://github.com/kadircet created 
https://github.com/llvm/llvm-project/pull/123634

Fixes https://github.com/llvm/llvm-project/issues/113926.
Fixes https://github.com/llvm/llvm-project/issues/63976.


From 6d363897befee25fe498da24c00420777eb5958d Mon Sep 17 00:00:00 2001
From: Kadir Cetinkaya 
Date: Mon, 20 Jan 2025 16:42:40 +0100
Subject: [PATCH] [include-cleaner] Respect langopts when analyzing macro names

Fixes https://github.com/llvm/llvm-project/issues/113926.
Fixes https://github.com/llvm/llvm-project/issues/63976.
---
 clang-tools-extra/clangd/Hover.cpp|  5 +--
 .../clangd/index/SymbolCollector.cpp  |  2 +-
 .../include/clang-include-cleaner/Analysis.h  |  2 +-
 .../include-cleaner/lib/Analysis.cpp  |  4 +--
 .../include-cleaner/lib/AnalysisInternal.h|  7 ++--
 .../include-cleaner/lib/FindHeaders.cpp   |  6 ++--
 .../include-cleaner/lib/HTMLReport.cpp| 18 +-
 .../include-cleaner/lib/LocateSymbol.cpp  | 12 ---
 .../include-cleaner/tool/IncludeCleaner.cpp   |  7 ++--
 .../unittests/FindHeadersTest.cpp | 35 +++
 .../unittests/LocateSymbolTest.cpp| 19 +-
 11 files changed, 77 insertions(+), 40 deletions(-)

diff --git a/clang-tools-extra/clangd/Hover.cpp 
b/clang-tools-extra/clangd/Hover.cpp
index 5e136d0e76ece7..3ab3d890305204 100644
--- a/clang-tools-extra/clangd/Hover.cpp
+++ b/clang-tools-extra/clangd/Hover.cpp
@@ -1193,12 +1193,13 @@ void maybeAddSymbolProviders(ParsedAST &AST, HoverInfo 
&HI,
  include_cleaner::Symbol Sym) {
   trace::Span Tracer("Hover::maybeAddSymbolProviders");
 
-  const SourceManager &SM = AST.getSourceManager();
   llvm::SmallVector RankedProviders =
-  include_cleaner::headersForSymbol(Sym, SM, &AST.getPragmaIncludes());
+  include_cleaner::headersForSymbol(Sym, AST.getPreprocessor(),
+&AST.getPragmaIncludes());
   if (RankedProviders.empty())
 return;
 
+  const SourceManager &SM = AST.getSourceManager();
   std::string Result;
   include_cleaner::Includes ConvertedIncludes = convertIncludes(AST);
   for (const auto &P : RankedProviders) {
diff --git a/clang-tools-extra/clangd/index/SymbolCollector.cpp 
b/clang-tools-extra/clangd/index/SymbolCollector.cpp
index 6d0af20e31260c..1de7faf81746ee 100644
--- a/clang-tools-extra/clangd/index/SymbolCollector.cpp
+++ b/clang-tools-extra/clangd/index/SymbolCollector.cpp
@@ -888,7 +888,7 @@ void SymbolCollector::setIncludeLocation(const Symbol &S, 
SourceLocation DefLoc,
   // might run while parsing, rather than at the end of a translation unit.
   // Hence we see more and more redecls over time.
   SymbolProviders[S.ID] =
-  include_cleaner::headersForSymbol(Sym, SM, Opts.PragmaIncludes);
+  include_cleaner::headersForSymbol(Sym, *PP, Opts.PragmaIncludes);
 }
 
 llvm::StringRef getStdHeader(const Symbol *S, const LangOptions &LangOpts) {
diff --git 
a/clang-tools-extra/include-cleaner/include/clang-include-cleaner/Analysis.h 
b/clang-tools-extra/include-cleaner/include/clang-include-cleaner/Analysis.h
index 46ca3c9d080740..c3241763237d14 100644
--- a/clang-tools-extra/include-cleaner/include/clang-include-cleaner/Analysis.h
+++ b/clang-tools-extra/include-cleaner/include/clang-include-cleaner/Analysis.h
@@ -90,7 +90,7 @@ std::string fixIncludes(const AnalysisResults &Results,
 /// Returned headers are sorted by relevance, first element is the most
 /// likely provider for the symbol.
 llvm::SmallVector headersForSymbol(const Symbol &S,
-   const SourceManager &SM,
+   const Preprocessor &PP,
const PragmaIncludes *PI);
 } // namespace include_cleaner
 } // namespace clang
diff --git a/clang-tools-extra/include-cleaner/lib/Analysis.cpp 
b/clang-tools-extra/include-cleaner/lib/Analysis.cpp
index e3a4834cb19aeb..a1781f4e24f2e8 100644
--- a/clang-tools-extra/include-cleaner/lib/Analysis.cpp
+++ b/clang-tools-extra/include-cleaner/lib/Analysis.cpp
@@ -64,7 +64,7 @@ void walkUsed(llvm::ArrayRef ASTRoots,
   // FIXME: Most of the work done here is repetitive. It might be useful to
   // have a cache/batching.
   SymbolReference SymRef{ND, Loc, RT};
-  return CB(SymRef, headersForSymbol(ND, SM, PI));
+  return CB(SymRef, headersForSymbol(ND, PP, PI));
 });
   }
   for (const SymbolReference &MacroRef : MacroRefs) {
@@ -72,7 +72,7 @@ void walkUsed(llvm::ArrayRef ASTRoots,
 if (!SM.isWrittenInMainFile(SM.getSpellingLoc(MacroRef.RefLocation)) ||
 shouldIgnoreMacroReference(PP, MacroRef.Target.macro()))
   continue;
-CB(MacroRef, headersForSymbol(MacroRef.Target, SM, PI));
+CB(MacroRef, headersForSymbol(MacroRef.Target, PP, PI));
   }
 }
 
diff --git a/clang-tools-extra/include-cleaner/lib/AnalysisInternal.h 
b/clang-tools-extra/include-cleaner/lib/AnalysisInternal.h
index cd796