Skip to content
This repository was archived by the owner on Nov 1, 2021. It is now read-only.

Commit 4b44666

Browse files
committed
Add replace interface with range in AtomicChange.
Reviewers: ioeric Reviewed By: ioeric Subscribers: alexshap, klimek, cfe-commits Differential Revision: https://reviews.llvm.org/D31492 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@299073 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent b048bc8 commit 4b44666

File tree

3 files changed

+24
-11
lines changed

3 files changed

+24
-11
lines changed

Diff for: include/clang/Tooling/Refactoring/AtomicChange.h

+6
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,12 @@ class AtomicChange {
7070
/// \brief Returns the error message or an empty string if it does not exist.
7171
const std::string &getError() const { return Error; }
7272

73+
/// \brief Adds a replacement that replaces the given Range with
74+
/// ReplacementText.
75+
/// \returns An llvm::Error carrying ReplacementError on error.
76+
llvm::Error replace(const SourceManager &SM, const CharSourceRange &Range,
77+
llvm::StringRef ReplacementText);
78+
7379
/// \brief Adds a replacement that replaces range [Loc, Loc+Length) with
7480
/// \p Text.
7581
/// \returns An llvm::Error carrying ReplacementError on error.

Diff for: lib/Tooling/Refactoring/AtomicChange.cpp

+6
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,12 @@ AtomicChange AtomicChange::convertFromYAML(llvm::StringRef YAMLContent) {
132132
return E;
133133
}
134134

135+
llvm::Error AtomicChange::replace(const SourceManager &SM,
136+
const CharSourceRange &Range,
137+
llvm::StringRef ReplacementText) {
138+
return Replaces.add(Replacement(SM, Range, ReplacementText));
139+
}
140+
135141
llvm::Error AtomicChange::replace(const SourceManager &SM, SourceLocation Loc,
136142
unsigned Length, llvm::StringRef Text) {
137143
return Replaces.add(Replacement(SM, Loc, Length, Text));

Diff for: unittests/Tooling/RefactoringTest.cpp

+12-11
Original file line numberDiff line numberDiff line change
@@ -1092,7 +1092,7 @@ TEST(DeduplicateByFileTest, NonExistingFilePath) {
10921092

10931093
class AtomicChangeTest : public ::testing::Test {
10941094
protected:
1095-
void setUp() {
1095+
void SetUp() override {
10961096
DefaultFileID = Context.createInMemoryFile("input.cpp", DefaultCode);
10971097
DefaultLoc = Context.Sources.getLocForStartOfFile(DefaultFileID)
10981098
.getLocWithOffset(20);
@@ -1107,7 +1107,6 @@ class AtomicChangeTest : public ::testing::Test {
11071107
};
11081108

11091109
TEST_F(AtomicChangeTest, AtomicChangeToYAML) {
1110-
setUp();
11111110
AtomicChange Change(Context.Sources, DefaultLoc);
11121111
llvm::Error Err =
11131112
Change.insert(Context.Sources, DefaultLoc, "aa", /*InsertAfter=*/false);
@@ -1140,7 +1139,6 @@ TEST_F(AtomicChangeTest, AtomicChangeToYAML) {
11401139
}
11411140

11421141
TEST_F(AtomicChangeTest, YAMLToAtomicChange) {
1143-
setUp();
11441142
std::string YamlContent = "---\n"
11451143
"Key: 'input.cpp:20'\n"
11461144
"FilePath: input.cpp\n"
@@ -1187,14 +1185,12 @@ TEST_F(AtomicChangeTest, YAMLToAtomicChange) {
11871185
}
11881186

11891187
TEST_F(AtomicChangeTest, CheckKeyAndKeyFile) {
1190-
setUp();
11911188
AtomicChange Change(Context.Sources, DefaultLoc);
11921189
EXPECT_EQ("input.cpp:20", Change.getKey());
11931190
EXPECT_EQ("input.cpp", Change.getFilePath());
11941191
}
11951192

11961193
TEST_F(AtomicChangeTest, Replace) {
1197-
setUp();
11981194
AtomicChange Change(Context.Sources, DefaultLoc);
11991195
llvm::Error Err = Change.replace(Context.Sources, DefaultLoc, 2, "aa");
12001196
ASSERT_TRUE(!Err);
@@ -1209,8 +1205,18 @@ TEST_F(AtomicChangeTest, Replace) {
12091205
EXPECT_EQ(Change.getReplacements().size(), 1u);
12101206
}
12111207

1208+
TEST_F(AtomicChangeTest, ReplaceWithRange) {
1209+
AtomicChange Change(Context.Sources, DefaultLoc);
1210+
SourceLocation End = DefaultLoc.getLocWithOffset(20);
1211+
llvm::Error Err = Change.replace(
1212+
Context.Sources, CharSourceRange::getCharRange(DefaultLoc, End), "aa");
1213+
ASSERT_TRUE(!Err);
1214+
EXPECT_EQ(Change.getReplacements().size(), 1u);
1215+
EXPECT_EQ(*Change.getReplacements().begin(),
1216+
Replacement(Context.Sources, DefaultLoc, 20, "aa"));
1217+
}
1218+
12121219
TEST_F(AtomicChangeTest, InsertBefore) {
1213-
setUp();
12141220
AtomicChange Change(Context.Sources, DefaultLoc);
12151221
llvm::Error Err = Change.insert(Context.Sources, DefaultLoc, "aa");
12161222
ASSERT_TRUE(!Err);
@@ -1225,7 +1231,6 @@ TEST_F(AtomicChangeTest, InsertBefore) {
12251231
}
12261232

12271233
TEST_F(AtomicChangeTest, InsertAfter) {
1228-
setUp();
12291234
AtomicChange Change(Context.Sources, DefaultLoc);
12301235
llvm::Error Err = Change.insert(Context.Sources, DefaultLoc, "aa");
12311236
ASSERT_TRUE(!Err);
@@ -1240,7 +1245,6 @@ TEST_F(AtomicChangeTest, InsertAfter) {
12401245
}
12411246

12421247
TEST_F(AtomicChangeTest, InsertBeforeWithInvalidLocation) {
1243-
setUp();
12441248
AtomicChange Change(Context.Sources, DefaultLoc);
12451249
llvm::Error Err =
12461250
Change.insert(Context.Sources, DefaultLoc, "a", /*InsertAfter=*/false);
@@ -1254,11 +1258,9 @@ TEST_F(AtomicChangeTest, InsertBeforeWithInvalidLocation) {
12541258
std::move(Err), replacement_error::wrong_file_path,
12551259
Replacement(Context.Sources, DefaultLoc, 0, "a"),
12561260
Replacement(Context.Sources, SourceLocation(), 0, "a")));
1257-
12581261
}
12591262

12601263
TEST_F(AtomicChangeTest, InsertBeforeToWrongFile) {
1261-
setUp();
12621264
AtomicChange Change(Context.Sources, DefaultLoc);
12631265
llvm::Error Err =
12641266
Change.insert(Context.Sources, DefaultLoc, "a", /*InsertAfter=*/false);
@@ -1276,7 +1278,6 @@ TEST_F(AtomicChangeTest, InsertBeforeToWrongFile) {
12761278
}
12771279

12781280
TEST_F(AtomicChangeTest, InsertAfterWithInvalidLocation) {
1279-
setUp();
12801281
AtomicChange Change(Context.Sources, DefaultLoc);
12811282
llvm::Error Err = Change.insert(Context.Sources, DefaultLoc, "a");
12821283
ASSERT_TRUE(!Err);

0 commit comments

Comments
 (0)