[PATCH] D70828: [clangd] Correct the file path in Edit::replacements when generating the rename edit.
Haojian Wu via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Nov 28 07:55:31 PST 2019
hokein created this revision.
hokein added a reviewer: ilya-biryukov.
Herald added subscribers: usaxena95, kadircet, arphaman, jkorous, MaskRay.
Herald added a project: clang.
The file path was set to the file content previously, and it isn't
covered by normal clangd & unittest code path (as we only uses the
offset, length, replacement text).
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D70828
Files:
clang-tools-extra/clangd/refactor/Rename.cpp
clang-tools-extra/clangd/refactor/Rename.h
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
@@ -669,14 +669,16 @@
TEST(CrossFileRenameTests, BuildRenameEdits) {
Annotations Code("[[😂]]");
auto LSPRange = Code.range();
- auto Edit = buildRenameEdit(Code.code(), {LSPRange}, "abc");
+ llvm::StringRef FilePath = "/test/TestTU.cpp";
+ auto Edit = buildRenameEdit(FilePath, Code.code(), {LSPRange}, "abc");
ASSERT_TRUE(bool(Edit)) << Edit.takeError();
ASSERT_EQ(1UL, Edit->Replacements.size());
+ EXPECT_EQ(FilePath, Edit->Replacements.begin()->getFilePath());
EXPECT_EQ(4UL, Edit->Replacements.begin()->getLength());
// Test invalid range.
LSPRange.end = {10, 0}; // out of range
- Edit = buildRenameEdit(Code.code(), {LSPRange}, "abc");
+ Edit = buildRenameEdit(FilePath, Code.code(), {LSPRange}, "abc");
EXPECT_FALSE(Edit);
EXPECT_THAT(llvm::toString(Edit.takeError()),
testing::HasSubstr("fail to convert"));
@@ -687,7 +689,7 @@
[[range]]
[[range]]
)cpp");
- Edit = buildRenameEdit(T.code(), T.ranges(), "abc");
+ Edit = buildRenameEdit(FilePath, T.code(), T.ranges(), "abc");
ASSERT_TRUE(bool(Edit)) << Edit.takeError();
EXPECT_EQ(applyEdits(FileEdits{{T.code(), std::move(*Edit)}}).front().second,
expectedResult(Code, expectedResult(T, "abc")));
Index: clang-tools-extra/clangd/refactor/Rename.h
===================================================================
--- clang-tools-extra/clangd/refactor/Rename.h
+++ clang-tools-extra/clangd/refactor/Rename.h
@@ -50,7 +50,8 @@
/// Generates rename edits that replaces all given occurrences with the
/// NewName.
/// Exposed for testing only.
-llvm::Expected<Edit> buildRenameEdit(llvm::StringRef InitialCode,
+llvm::Expected<Edit> buildRenameEdit(llvm::StringRef AbsFilePath,
+ llvm::StringRef InitialCode,
std::vector<Range> Occurrences,
llvm::StringRef NewName);
Index: clang-tools-extra/clangd/refactor/Rename.cpp
===================================================================
--- clang-tools-extra/clangd/refactor/Rename.cpp
+++ clang-tools-extra/clangd/refactor/Rename.cpp
@@ -349,8 +349,9 @@
elog("Fail to read file content: {0}", AffectedFileCode.takeError());
continue;
}
- auto RenameEdit = buildRenameEdit(
- *AffectedFileCode, std::move(FileAndOccurrences.second), NewName);
+ auto RenameEdit =
+ buildRenameEdit(FilePath, *AffectedFileCode,
+ std::move(FileAndOccurrences.second), NewName);
if (!RenameEdit) {
return llvm::make_error<llvm::StringError>(
llvm::formatv("fail to build rename edit for file {0}: {1}", FilePath,
@@ -451,7 +452,8 @@
return Results;
}
-llvm::Expected<Edit> buildRenameEdit(llvm::StringRef InitialCode,
+llvm::Expected<Edit> buildRenameEdit(llvm::StringRef AbsFilePath,
+ llvm::StringRef InitialCode,
std::vector<Range> Occurrences,
llvm::StringRef NewName) {
llvm::sort(Occurrences);
@@ -491,7 +493,7 @@
for (const auto &R : OccurrencesOffsets) {
auto ByteLength = R.second - R.first;
if (auto Err = RenameEdit.add(
- tooling::Replacement(InitialCode, R.first, ByteLength, NewName)))
+ tooling::Replacement(AbsFilePath, R.first, ByteLength, NewName)))
return std::move(Err);
}
return Edit(InitialCode, std::move(RenameEdit));
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D70828.231439.patch
Type: text/x-patch
Size: 3738 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20191128/284e57d2/attachment.bin>
More information about the cfe-commits
mailing list