[PATCH] D79881: [clangd] locateMacroAt returns definition range instead of MacroInfo
Kadir Cetinkaya via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed May 13 09:44:36 PDT 2020
kadircet created this revision.
Herald added subscribers: cfe-commits, usaxena95, arphaman, jkorous, MaskRay, ilya-biryukov.
Herald added a project: clang.
Depends on D79879 <https://reviews.llvm.org/D79879>.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D79881
Files:
clang-tools-extra/clangd/Hover.cpp
clang-tools-extra/clangd/SourceCode.cpp
clang-tools-extra/clangd/SourceCode.h
clang-tools-extra/clangd/XRefs.cpp
clang-tools-extra/clangd/unittests/CollectMacrosTests.cpp
Index: clang-tools-extra/clangd/unittests/CollectMacrosTests.cpp
===================================================================
--- clang-tools-extra/clangd/unittests/CollectMacrosTests.cpp
+++ clang-tools-extra/clangd/unittests/CollectMacrosTests.cpp
@@ -92,8 +92,8 @@
const auto *Id = syntax::spelledIdentifierTouching(*Loc, AST.getTokens());
ASSERT_TRUE(Id);
auto Macro = locateMacroAt(*Id, PP);
- assert(Macro && Macro->Info);
- auto SID = getSymbolID(Macro->Name, Macro->Info->getDefinitionLoc(), SM);
+ assert(Macro);
+ auto SID = getSymbolID(Macro->Name, Macro->DefRange.getBegin(), SM);
assert(SID);
EXPECT_THAT(ExpectedRefs,
Index: clang-tools-extra/clangd/XRefs.cpp
===================================================================
--- clang-tools-extra/clangd/XRefs.cpp
+++ clang-tools-extra/clangd/XRefs.cpp
@@ -206,8 +206,8 @@
locateMacroReferent(const syntax::Token &TouchedIdentifier, ParsedAST &AST,
llvm::StringRef MainFilePath) {
if (auto M = locateMacroAt(TouchedIdentifier, AST.getPreprocessor())) {
- if (auto Loc = makeLocation(AST.getASTContext(),
- M->Info->getDefinitionLoc(), MainFilePath)) {
+ if (auto Loc = makeLocation(AST.getASTContext(), M->DefRange.getBegin(),
+ MainFilePath)) {
LocatedSymbol Macro;
Macro.Name = std::string(M->Name);
Macro.PreferredDeclaration = *Loc;
@@ -753,10 +753,10 @@
}
RefsRequest Req;
- if (Macro && Macro->Info) {
+ if (Macro) {
// Handle references to macro.
if (auto MacroSID =
- getSymbolID(Macro->Name, Macro->Info->getDefinitionLoc(), SM)) {
+ getSymbolID(Macro->Name, Macro->DefRange.getBegin(), SM)) {
// Collect macro references from main file.
const auto &IDToRefs = AST.getMacros().MacroRefs;
auto Refs = IDToRefs.find(*MacroSID);
@@ -875,8 +875,8 @@
SymbolDetails NewMacro;
NewMacro.name = std::string(M->Name);
llvm::SmallString<32> USR;
- if (!index::generateUSRForMacro(NewMacro.name, M->Info->getDefinitionLoc(),
- SM, USR)) {
+ if (!index::generateUSRForMacro(NewMacro.name, M->DefRange.getBegin(), SM,
+ USR)) {
NewMacro.USR = std::string(USR.str());
NewMacro.ID = SymbolID(NewMacro.USR);
}
Index: clang-tools-extra/clangd/SourceCode.h
===================================================================
--- clang-tools-extra/clangd/SourceCode.h
+++ clang-tools-extra/clangd/SourceCode.h
@@ -291,7 +291,7 @@
struct DefinedMacro {
llvm::StringRef Name;
- const MacroInfo *Info;
+ CharSourceRange DefRange;
};
/// Gets the macro referenced by \p SpelledTok. It must be a spelled token
/// aligned to the beginning of an identifier.
Index: clang-tools-extra/clangd/SourceCode.cpp
===================================================================
--- clang-tools-extra/clangd/SourceCode.cpp
+++ clang-tools-extra/clangd/SourceCode.cpp
@@ -961,7 +961,11 @@
Loc = Loc.getLocWithOffset(-1);
MacroDefinition MacroDef = PP.getMacroDefinitionAtLoc(IdentifierInfo, Loc);
if (auto *MI = MacroDef.getMacroInfo())
- return DefinedMacro{IdentifierInfo->getName(), MI};
+ return DefinedMacro{
+ IdentifierInfo->getName(),
+ // MacroInfo::getDefinitionEndLoc returns the location for last token.
+ CharSourceRange::getTokenRange(MI->getDefinitionLoc(),
+ MI->getDefinitionEndLoc())};
return None;
}
Index: clang-tools-extra/clangd/Hover.cpp
===================================================================
--- clang-tools-extra/clangd/Hover.cpp
+++ clang-tools-extra/clangd/Hover.cpp
@@ -553,8 +553,8 @@
// FIXME: Populate parameters
// Try to get the full definition, not just the name
- SourceLocation StartLoc = Macro.Info->getDefinitionLoc();
- SourceLocation EndLoc = Macro.Info->getDefinitionEndLoc();
+ SourceLocation StartLoc = Macro.DefRange.getBegin();
+ SourceLocation EndLoc = Macro.DefRange.getEnd();
if (EndLoc.isValid()) {
EndLoc = Lexer::getLocForEndOfToken(EndLoc, 0, SM, AST.getLangOpts());
bool Invalid;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D79881.263756.patch
Type: text/x-patch
Size: 4258 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20200513/db5bcb38/attachment-0001.bin>
More information about the cfe-commits
mailing list