Author: Kirill Bobyrev Date: 2020-02-06T11:28:23+01:00 New Revision: 10540e480dfb243d992ff77db14219f696cc774a
URL: https://github.com/llvm/llvm-project/commit/10540e480dfb243d992ff77db14219f696cc774a DIFF: https://github.com/llvm/llvm-project/commit/10540e480dfb243d992ff77db14219f696cc774a.diff LOG: [clangd] Filter out implicit references while renaming This patch is based on D72746 and prevents non-spelled references from being renamed which would cause incorrect behavior otherwise. Reviewed by: hokein Differential Revision: https://reviews.llvm.org/D74112 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 83f3a02d80d7..31fabc787625 100644 --- a/clang-tools-extra/clangd/refactor/Rename.cpp +++ b/clang-tools-extra/clangd/refactor/Rename.cpp @@ -306,6 +306,8 @@ findOccurrencesOutsideFile(const NamedDecl &RenameDecl, bool HasMore = Index.refs(RQuest, [&](const Ref &R) { if (AffectedFiles.size() > MaxLimitFiles) return; + if ((R.Kind & RefKind::Spelled) == RefKind::Unknown) + return; if (auto RefFilePath = filePath(R.Location, /*HintFilePath=*/MainFile)) { if (*RefFilePath != MainFile) AffectedFiles[*RefFilePath].push_back(toRange(R.Location)); diff --git a/clang-tools-extra/clangd/unittests/RenameTests.cpp b/clang-tools-extra/clangd/unittests/RenameTests.cpp index 94f78ac0d977..43e6c778a7ad 100644 --- a/clang-tools-extra/clangd/unittests/RenameTests.cpp +++ b/clang-tools-extra/clangd/unittests/RenameTests.cpp @@ -33,7 +33,7 @@ using testing::UnorderedElementsAreArray; // Convert a Range to a Ref. Ref refWithRange(const clangd::Range &Range, const std::string &URI) { Ref Result; - Result.Kind = RefKind::Reference; + Result.Kind = RefKind::Reference | RefKind::Spelled; Result.Location.Start.setLine(Range.start.line); Result.Location.Start.setColumn(Range.start.character); Result.Location.End.setLine(Range.end.line); @@ -440,6 +440,23 @@ TEST(RenameTest, WithinFileRename) { template <template<typename> class Z> struct Bar { }; template <> struct Bar<[[Foo]]> {}; )cpp", + + { + // Implicit references in macro expansions. + R"cpp( + class [[Fo^o]] {}; + #define FooFoo Foo + #define FOO Foo + )cpp", + R"cpp( + #include "foo.h" + void bar() { + [[Foo]] x; + FOO y; + FooFoo z; + } + )cpp", + }, }; for (llvm::StringRef T : Tests) { SCOPED_TRACE(T); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits