[PATCH] D74112: [clangd] Filter out implicit references while renaming
Kirill Bobyrev via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Feb 6 00:21:16 PST 2020
kbobyrev created this revision.
kbobyrev added a reviewer: hokein.
Herald added subscribers: usaxena95, kadircet, arphaman, jkorous, MaskRay, ilya-biryukov.
Herald added a project: clang.
This patch is based on D72746 <https://reviews.llvm.org/D72746> and prevents non-spelled references from
being renamed which would cause incorrect behavior otherwise.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D74112
Files:
clang-tools-extra/clangd/refactor/Rename.cpp
clang-tools-extra/clangd/unittests/RenameTests.cpp
Index: clang-tools-extra/clangd/unittests/RenameTests.cpp
===================================================================
--- clang-tools-extra/clangd/unittests/RenameTests.cpp
+++ clang-tools-extra/clangd/unittests/RenameTests.cpp
@@ -33,7 +33,7 @@
// 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);
@@ -892,6 +892,22 @@
}
)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 (const auto& T : Cases) {
Index: clang-tools-extra/clangd/refactor/Rename.cpp
===================================================================
--- clang-tools-extra/clangd/refactor/Rename.cpp
+++ clang-tools-extra/clangd/refactor/Rename.cpp
@@ -306,6 +306,8 @@
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));
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D74112.242818.patch
Type: text/x-patch
Size: 1674 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20200206/49ab0932/attachment.bin>
More information about the cfe-commits
mailing list