hokein added a comment.

Thanks, this looks nicer now.



================
Comment at: clang-tools-extra/clangd/refactor/Rename.cpp:247
+  if (const auto *Destructor = dyn_cast<CXXDestructorDecl>(D))
+    return canonicalRenameDecl(Destructor->getParent());
+  if (const auto *VarTemplate = dyn_cast<VarTemplateSpecializationDecl>(D))
----------------
ctor & dtor is one of the kinds of `CXXMethodDecl`, I think we can merge the 
ctor & dtor cases into the `if (const auto *Method = 
dyn_cast<CXXMethodDecl>(D)) {`. 


================
Comment at: clang-tools-extra/clangd/refactor/Rename.cpp:257
+            ->getTemplatedDecl();
+  if (const auto *Method = dyn_cast<CXXMethodDecl>(D)) {
+    if (const FunctionDecl *InstantiatedMethod =
----------------
using `else if` would be more clear  -- as now we modify `D` is the preceding 
`if`, if the D is assigned to a CXXMethodDecl in the `preceding` if, then it 
may fall into this branch.


================
Comment at: clang-tools-extra/clangd/refactor/Rename.cpp:262
+    while (Method->isVirtual() && Method->size_overridden_methods())
+      Method = *Method->overridden_methods().begin();
+    D = Method;
----------------
oh, it is a tricky case where a method overrides > 1 virtual methods. Looks 
like we will regress this case in this patch, e.g.

```
class Foo {
  virtual void foo();
};

class Bar {
  virtual void foo();
};

class C : public Foo, Bar {
  void foo() override; // -> rename foo => bar
};
```

prior to the patch, both `Foo::foo` and `Bar::foo` will be renamed, after this 
patch, only one of them will be renamed (with within-file rename)? I think it 
is ok, but probably need some comments here.


================
Comment at: clang-tools-extra/clangd/refactor/Rename.cpp:265
+  }
+  if (const auto *Function = dyn_cast<FunctionDecl>(D))
+    if (const FunctionTemplateDecl *Template = Function->getPrimaryTemplate())
----------------
the same, `else`

IIUC, `CXXMethodDecl` must be processed before `FunctionDecl`, I think we can 
add an assertion (the FunctionDecl must not be `CXXMethodDecl`).


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D71880/new/

https://reviews.llvm.org/D71880

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to