[clang-tools-extra] Add support for renaming objc methods, even those with multiple selector pieces (PR #76466)

kadir çetinkaya via cfe-commits cfe-commits at lists.llvm.org
Wed Jan 24 05:04:06 PST 2024


================
@@ -681,12 +718,26 @@ renameOutsideFile(const NamedDecl &RenameDecl, llvm::StringRef MainFilePath,
            ExpBuffer.getError().message());
       continue;
     }
+    std::string RenameIdentifier = RenameDecl.getNameAsString();
+    std::optional<Selector> Selector = std::nullopt;
+    llvm::SmallVector<llvm::StringRef, 8> NewNames;
+    if (const auto *MD = dyn_cast<ObjCMethodDecl>(&RenameDecl)) {
+      if (MD->getSelector().getNumArgs() > 1) {
+        RenameIdentifier = MD->getSelector().getNameForSlot(0).str();
+        Selector = MD->getSelector();
+        NewName.split(NewNames, ":");
----------------
kadircet wrote:

you can perform the split unconditionally ,rather than pushing to `NewNames` below.

also is it possible to have "empty" selector segments? (e.g. is a NewName like `foo::bar` valid for a selector with 3 segments? if not we should probably raise an error when validating)

https://github.com/llvm/llvm-project/pull/76466


More information about the cfe-commits mailing list