[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