================ @@ -508,24 +513,46 @@ static bool mayBeValidIdentifier(llvm::StringRef Ident) { !isAsciiIdentifierStart(Ident.front(), AllowDollar)) return false; for (char C : Ident) { + if (AllowColon && C == ':') + continue; if (llvm::isASCII(C) && !isAsciiIdentifierContinue(C, AllowDollar)) return false; } return true; } +std::string getName(const NamedDecl &RenameDecl) { + if (const auto *MD = dyn_cast<ObjCMethodDecl>(&RenameDecl)) + return MD->getSelector().getAsString(); + if (const auto *ID = RenameDecl.getIdentifier()) + return ID->getName().str(); + return ""; +} + // Check if we can rename the given RenameDecl into NewName. // Return details if the rename would produce a conflict. -std::optional<InvalidName> checkName(const NamedDecl &RenameDecl, - llvm::StringRef NewName) { +std::optional<llvm::Error> checkName(const NamedDecl &RenameDecl, + llvm::StringRef NewName, + llvm::StringRef OldName) { trace::Span Tracer("CheckName"); static constexpr trace::Metric InvalidNameMetric( "rename_name_invalid", trace::Metric::Counter, "invalid_kind"); + + if (OldName == NewName) + return makeError(ReasonToReject::SameName); + + if (const auto *MD = dyn_cast<ObjCMethodDecl>(&RenameDecl)) { + const auto Sel = MD->getSelector(); + if (Sel.getNumArgs() != NewName.count(':') && ---------------- ahoppen wrote:
Instead of effectively doing a stripped-down selector parsing here, I would make `checkName` take a `SymbolName`. https://github.com/llvm/llvm-project/pull/76466 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits