Author: Haojian Wu Date: 2020-02-21T09:57:10+01:00 New Revision: bc498198b5559829d8f7138db01b0f51afefe2a7
URL: https://github.com/llvm/llvm-project/commit/bc498198b5559829d8f7138db01b0f51afefe2a7 DIFF: https://github.com/llvm/llvm-project/commit/bc498198b5559829d8f7138db01b0f51afefe2a7.diff LOG: [clangd] Allow renaming class templates in cross-file rename. Summary: It was disabled because we don't handle explicit template specialization well (due to the index limitation). renaming templates is normal in practic, rather than disabling it, this patch allows to rename them though it is not perfect (just a known limitation). Context: https://github.com/clangd/clangd/issues/280 Reviewers: kbobyrev Reviewed By: kbobyrev Subscribers: ilya-biryukov, MaskRay, jkorous, arphaman, kadircet, usaxena95, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D74709 Added: Modified: clang-tools-extra/clangd/refactor/Rename.cpp clang-tools-extra/clangd/unittests/RenameTests.cpp Removed: ################################################################################ diff --git a/clang-tools-extra/clangd/refactor/Rename.cpp b/clang-tools-extra/clangd/refactor/Rename.cpp index c5dd09b99508..02e355ecf164 100644 --- a/clang-tools-extra/clangd/refactor/Rename.cpp +++ b/clang-tools-extra/clangd/refactor/Rename.cpp @@ -184,13 +184,6 @@ llvm::Optional<ReasonToReject> renameable(const NamedDecl &RenameDecl, if (!Index) return ReasonToReject::NoIndexProvided; - // Blacklist symbols that are not supported yet in cross-file mode due to the - // limitations of our index. - // FIXME: Renaming templates requires to rename all related specializations, - // our index doesn't have this information. - if (RenameDecl.getDescribedTemplate()) - return ReasonToReject::UnsupportedSymbol; - // FIXME: Renaming virtual methods requires to rename all overridens in // subclasses, our index doesn't have this information. // Note: Within-file rename does support this through the AST. diff --git a/clang-tools-extra/clangd/unittests/RenameTests.cpp b/clang-tools-extra/clangd/unittests/RenameTests.cpp index 3561ff6438f7..aa08be484ea3 100644 --- a/clang-tools-extra/clangd/unittests/RenameTests.cpp +++ b/clang-tools-extra/clangd/unittests/RenameTests.cpp @@ -887,6 +887,23 @@ TEST(CrossFileRenameTests, WithUpToDateIndex) { } )cpp", }, + { + // class templates. + R"cpp( + template <typename T> + class [[Foo]] {}; + // FIXME: explicit template specilizations are not supported due the + // clangd index limitations. + template <> + class Foo<double> {}; + )cpp", + R"cpp( + #include "foo.h" + void func() { + [[F^oo]]<int> foo; + } + )cpp", + }, { // class methods. R"cpp( _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits