[PATCH] D71247: [clangd] Rename constructors and destructors in cross-file case
Sam McCall via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Dec 11 10:11:09 PST 2019
sammccall added inline comments.
================
Comment at: clang-tools-extra/clangd/refactor/Rename.cpp:91
+ DeclRelation::Alias | DeclRelation::TemplatePattern)) {
+ // If the cursor is at the underlying CXXRecordDecl of the
+ // ClassTemplateDecl, ND will be the CXXRecordDecl. In this case, we need to
----------------
why is this code being moved?
================
Comment at: clang-tools-extra/clangd/refactor/Rename.cpp:453
+ if (!Offset) {
+ return makeError(ReasonToReject::UsedOutsideFile);
+ }
----------------
so getting an invalid location from the editor isn't the same thing as the symbol being used outside the file! Here we already have an Error to return.
```
if (!Offset)
return Offset.takeError();
```
but really there's a helper to do this:
```
SourceLocation Loc = sourceLocationInMainFile(SM, RInputs.Pos);
if (!Loc)
return Loc.takeError();
const syntax::Token *IdentifierToken = spelledIdentifierTouching(Loc, AST.getTokens());
```
================
Comment at: clang-tools-extra/clangd/refactor/Rename.cpp:456
+ SourceLocation TokenLocation = SM.getComposedLoc(FID, *Offset);
+ const auto IdentifierToken =
+ syntax::spelledIdentifierTouching(TokenLocation, AST.getTokens());
----------------
nit: auto* for pointers, but spelling out the type here would be clearer I think
================
Comment at: clang-tools-extra/clangd/refactor/Rename.cpp:458
+ syntax::spelledIdentifierTouching(TokenLocation, AST.getTokens());
+ // There should be exactly one identifier token the cursor is pointing to.
+ // Renames should only triggered on identifiers.
----------------
this is an invariant of the function we're calling, not this one - no need to document it (next line is good though)
================
Comment at: clang-tools-extra/clangd/refactor/Rename.cpp:462
+ return makeError(ReasonToReject::NoSymbolFound);
+ SourceLocation SourceLocationBeg =
+ SM.getMacroArgExpandedLocation(IdentifierToken->location());
----------------
This unwrapping doesn't seem necessary, - it doesn't make a difference for macros (which we don't support anyway), nor for selectiontree. Just inline usages of IdentifierToken->location() below?
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D71247/new/
https://reviews.llvm.org/D71247
More information about the cfe-commits
mailing list