[clang-tools-extra] [clangd] Avoid round-trip from SourceLocation to clangd::Range and back in SymbolCollector::handleMacros() (PR #127757)
Nathan Ridge via cfe-commits
cfe-commits at lists.llvm.org
Tue Feb 18 23:35:27 PST 2025
https://github.com/HighCommander4 created https://github.com/llvm/llvm-project/pull/127757
…
>From d7f83b154b17856b1de2d97cf0a3aca72dd0379c Mon Sep 17 00:00:00 2001
From: Nathan Ridge <zeratul976 at hotmail.com>
Date: Wed, 19 Feb 2025 02:25:16 -0500
Subject: [PATCH] [clangd] Avoid round-trip from SourceLocation to
clangd::Range and back in SymbolCollector::handleMacros()
---
clang-tools-extra/clangd/CollectMacros.cpp | 9 ++++++---
clang-tools-extra/clangd/CollectMacros.h | 1 +
clang-tools-extra/clangd/index/SymbolCollector.cpp | 7 +++----
3 files changed, 10 insertions(+), 7 deletions(-)
diff --git a/clang-tools-extra/clangd/CollectMacros.cpp b/clang-tools-extra/clangd/CollectMacros.cpp
index 96298ee3ea50a..1e7d765f0b6f1 100644
--- a/clang-tools-extra/clangd/CollectMacros.cpp
+++ b/clang-tools-extra/clangd/CollectMacros.cpp
@@ -18,10 +18,13 @@
namespace clang {
namespace clangd {
-Range MacroOccurrence::toRange(const SourceManager &SM) const {
+CharSourceRange MacroOccurrence::toSourceRange(const SourceManager &SM) const {
auto MainFile = SM.getMainFileID();
- return halfOpenToRange(
- SM, syntax::FileRange(MainFile, StartOffset, EndOffset).toCharRange(SM));
+ return syntax::FileRange(MainFile, StartOffset, EndOffset).toCharRange(SM);
+}
+
+Range MacroOccurrence::toRange(const SourceManager &SM) const {
+ return halfOpenToRange(SM, toSourceRange(SM));
}
void CollectMainFileMacros::add(const Token &MacroNameTok, const MacroInfo *MI,
diff --git a/clang-tools-extra/clangd/CollectMacros.h b/clang-tools-extra/clangd/CollectMacros.h
index e7198641d8d53..20a3fc24d759c 100644
--- a/clang-tools-extra/clangd/CollectMacros.h
+++ b/clang-tools-extra/clangd/CollectMacros.h
@@ -31,6 +31,7 @@ struct MacroOccurrence {
// True if the occurence is used in a conditional directive, e.g. #ifdef MACRO
bool InConditionalDirective;
+ CharSourceRange toSourceRange(const SourceManager &SM) const;
Range toRange(const SourceManager &SM) const;
};
diff --git a/clang-tools-extra/clangd/index/SymbolCollector.cpp b/clang-tools-extra/clangd/index/SymbolCollector.cpp
index 1de7faf81746e..3f5633357073d 100644
--- a/clang-tools-extra/clangd/index/SymbolCollector.cpp
+++ b/clang-tools-extra/clangd/index/SymbolCollector.cpp
@@ -713,7 +713,8 @@ void SymbolCollector::handleMacros(const MainFileMacros &MacroRefsToIndex) {
// Add macro references.
for (const auto &IDToRefs : MacroRefsToIndex.MacroRefs) {
for (const auto &MacroRef : IDToRefs.second) {
- const auto &Range = MacroRef.toRange(SM);
+ const auto &SR = MacroRef.toSourceRange(SM);
+ auto Range = halfOpenToRange(SM, SR);
bool IsDefinition = MacroRef.IsDefinition;
Ref R;
R.Location.Start.setLine(Range.start.line);
@@ -726,9 +727,7 @@ void SymbolCollector::handleMacros(const MainFileMacros &MacroRefsToIndex) {
if (IsDefinition) {
Symbol S;
S.ID = IDToRefs.first;
- auto StartLoc = cantFail(sourceLocationInMainFile(SM, Range.start));
- auto EndLoc = cantFail(sourceLocationInMainFile(SM, Range.end));
- S.Name = toSourceCode(SM, SourceRange(StartLoc, EndLoc));
+ S.Name = toSourceCode(SM, SR.getAsRange());
S.SymInfo.Kind = index::SymbolKind::Macro;
S.SymInfo.SubKind = index::SymbolSubKind::None;
S.SymInfo.Properties = index::SymbolPropertySet();
More information about the cfe-commits
mailing list