[PATCH] D71247: [clangd] Rename constructors and destructors in cross-file case
Sam McCall via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Dec 12 03:21:00 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
----------------
kbobyrev wrote:
> sammccall wrote:
> > why is this code being moved?
> So, this code was previously only in the within-file rename path and hence triggering rename from a constructor/destructor-s was only possible there. Moving the code here improves overall "symbol selection" and fixes it for global renames, too.
Clangd as a whole actually canonicalizes in the other direction (templatedecl -> templated decl).
So I think this change introduces a bug (the references you seek won't be in the index).
Certainly up for discussion which is better (behavior is historical) but that's a larger change.
================
Comment at: clang-tools-extra/clangd/refactor/Rename.cpp:96
+ D = D->getDescribedTemplate() ? D->getDescribedTemplate() : D;
+ const auto *ND = llvm::dyn_cast<NamedDecl>(D);
+ // Get to CXXRecordDecl from constructor or destructor.
----------------
dyn_cast then unconditionally inserting seems dodgy - if it can be null, it must be checked, and if it can't, it should be plain `cast`
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D71247/new/
https://reviews.llvm.org/D71247
More information about the cfe-commits
mailing list