summaryrefslogtreecommitdiffstats
path: root/clang/lib/Tooling
diff options
context:
space:
mode:
authorDaniel Jasper <djasper@google.com>2015-06-16 10:22:10 +0000
committerDaniel Jasper <djasper@google.com>2015-06-16 10:22:10 +0000
commit0f291276361f863ed2898e1eecbbf3da94e2dfe8 (patch)
tree681ac9ffc9a71f516e55a848d1dece8807fd71f6 /clang/lib/Tooling
parentc535d93b47c79add08a84917e3dcad1daf0323dd (diff)
downloadbcm5719-llvm-0f291276361f863ed2898e1eecbbf3da94e2dfe8.tar.gz
bcm5719-llvm-0f291276361f863ed2898e1eecbbf3da94e2dfe8.zip
Tooling: When applying a set of replacements, do deletions before
insertions. It is unlikely to be the intention to delete parts of newly inserted code. To do so, changed sorting Replacements at the same offset to have decreasing length. llvm-svn: 239809
Diffstat (limited to 'clang/lib/Tooling')
-rw-r--r--clang/lib/Tooling/Core/Replacement.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/clang/lib/Tooling/Core/Replacement.cpp b/clang/lib/Tooling/Core/Replacement.cpp
index 32e8e5bd6b9..6d37a49db38 100644
--- a/clang/lib/Tooling/Core/Replacement.cpp
+++ b/clang/lib/Tooling/Core/Replacement.cpp
@@ -88,8 +88,13 @@ std::string Replacement::toString() const {
bool operator<(const Replacement &LHS, const Replacement &RHS) {
if (LHS.getOffset() != RHS.getOffset())
return LHS.getOffset() < RHS.getOffset();
+
+ // Apply longer replacements first, specifically so that deletions are
+ // executed before insertions. It is (hopefully) never the intention to
+ // delete parts of newly inserted code.
if (LHS.getLength() != RHS.getLength())
- return LHS.getLength() < RHS.getLength();
+ return LHS.getLength() > RHS.getLength();
+
if (LHS.getFilePath() != RHS.getFilePath())
return LHS.getFilePath() < RHS.getFilePath();
return LHS.getReplacementText() < RHS.getReplacementText();
OpenPOWER on IntegriCloud