This revision was landed with ongoing or failed builds. This revision was automatically updated to reflect the committed changes. sammccall marked an inline comment as done. Closed by commit rGe42441835827: [clangd] Allow programmatically disabling rename of virtual method hierarchies. (authored by sammccall).
Changed prior to commit: https://reviews.llvm.org/D133440?vs=458520&id=461211#toc Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D133440/new/ https://reviews.llvm.org/D133440 Files: clang-tools-extra/clangd/refactor/Rename.cpp clang-tools-extra/clangd/refactor/Rename.h Index: clang-tools-extra/clangd/refactor/Rename.h =================================================================== --- clang-tools-extra/clangd/refactor/Rename.h +++ clang-tools-extra/clangd/refactor/Rename.h @@ -26,6 +26,10 @@ size_t LimitFiles = 50; /// If true, format the rename edits, only meaningful in ClangdServer layer. bool WantFormat = false; + /// Allow rename of virtual method hierarchies. + /// Disable to support broken index implementations with missing relations. + /// FIXME: fix those implementations and remove this option. + bool RenameVirtual = true; }; struct RenameInputs { Index: clang-tools-extra/clangd/refactor/Rename.cpp =================================================================== --- clang-tools-extra/clangd/refactor/Rename.cpp +++ clang-tools-extra/clangd/refactor/Rename.cpp @@ -181,8 +181,15 @@ llvm::Optional<ReasonToReject> renameable(const NamedDecl &RenameDecl, StringRef MainFilePath, - const SymbolIndex *Index) { + const SymbolIndex *Index, + const RenameOptions& Opts) { trace::Span Tracer("Renameable"); + if (!Opts.RenameVirtual) { + if (const auto *S = llvm::dyn_cast<CXXMethodDecl>(&RenameDecl)) { + if (S->isVirtual()) + return ReasonToReject::UnsupportedSymbol; + } + } // Filter out symbols that are unsupported in both rename modes. if (llvm::isa<NamespaceDecl>(&RenameDecl)) return ReasonToReject::UnsupportedSymbol; @@ -746,7 +753,8 @@ if (Invalid) return makeError(std::move(*Invalid)); - auto Reject = renameable(RenameDecl, RInputs.MainFilePath, RInputs.Index); + auto Reject = + renameable(RenameDecl, RInputs.MainFilePath, RInputs.Index, Opts); if (Reject) return makeError(*Reject);
Index: clang-tools-extra/clangd/refactor/Rename.h =================================================================== --- clang-tools-extra/clangd/refactor/Rename.h +++ clang-tools-extra/clangd/refactor/Rename.h @@ -26,6 +26,10 @@ size_t LimitFiles = 50; /// If true, format the rename edits, only meaningful in ClangdServer layer. bool WantFormat = false; + /// Allow rename of virtual method hierarchies. + /// Disable to support broken index implementations with missing relations. + /// FIXME: fix those implementations and remove this option. + bool RenameVirtual = true; }; struct RenameInputs { Index: clang-tools-extra/clangd/refactor/Rename.cpp =================================================================== --- clang-tools-extra/clangd/refactor/Rename.cpp +++ clang-tools-extra/clangd/refactor/Rename.cpp @@ -181,8 +181,15 @@ llvm::Optional<ReasonToReject> renameable(const NamedDecl &RenameDecl, StringRef MainFilePath, - const SymbolIndex *Index) { + const SymbolIndex *Index, + const RenameOptions& Opts) { trace::Span Tracer("Renameable"); + if (!Opts.RenameVirtual) { + if (const auto *S = llvm::dyn_cast<CXXMethodDecl>(&RenameDecl)) { + if (S->isVirtual()) + return ReasonToReject::UnsupportedSymbol; + } + } // Filter out symbols that are unsupported in both rename modes. if (llvm::isa<NamespaceDecl>(&RenameDecl)) return ReasonToReject::UnsupportedSymbol; @@ -746,7 +753,8 @@ if (Invalid) return makeError(std::move(*Invalid)); - auto Reject = renameable(RenameDecl, RInputs.MainFilePath, RInputs.Index); + auto Reject = + renameable(RenameDecl, RInputs.MainFilePath, RInputs.Index, Opts); if (Reject) return makeError(*Reject);
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits