Skip to content

Commit afbfae4

Browse files
authored
Merge pull request swiftlang#16204 from rintaro/4.2-migrator-fixit-insert
[4.2][Migrator] Use RewriteBuffer::InsertText() for applying insertion
2 parents 817554b + 87ecb28 commit afbfae4

File tree

7 files changed

+73
-2
lines changed

7 files changed

+73
-2
lines changed

lib/Migrator/FixitApplyDiagnosticConsumer.cpp

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,15 +55,27 @@ handleDiagnostic(SourceManager &SM, SourceLoc Loc,
5555
auto Offset = SM.getLocOffsetInBuffer(Fixit.getRange().getStart(),
5656
ThisBufferID);
5757
auto Length = Fixit.getRange().getByteLength();
58+
auto Text = Fixit.getText();
5859

59-
Replacement R { Offset, Length, Fixit.getText() };
60+
// Ignore meaningless Fix-its.
61+
if (Length == 0 && Text.size() == 0)
62+
return;
63+
64+
// Ignore pre-applied equivalents.
65+
Replacement R { Offset, Length, Text };
6066
if (Replacements.count(R)) {
6167
return;
6268
} else {
6369
Replacements.insert(R);
6470
}
6571

66-
RewriteBuf.ReplaceText(Offset, Length, Fixit.getText());
72+
if (Length == 0) {
73+
RewriteBuf.InsertText(Offset, Text);
74+
} else if (Text.size() == 0) {
75+
RewriteBuf.RemoveText(Offset, Length);
76+
} else {
77+
RewriteBuf.ReplaceText(Offset, Length, Text);
78+
}
6779
++NumFixitsApplied;
6880
}
6981
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
// RUN: %empty-directory(%t)
2+
// RUN: %target-swift-frontend -typecheck -update-code -primary-file %s -F %S/mock-sdk -emit-migrated-file-path %t/result.swift
3+
// RUN: diff -u %s.expected %t/result.swift
4+
5+
import TestMyTime
6+
7+
let zero = kMyTimeZero
8+
9+
let _ = MyTimeAdd(kMyTimeZero, kMyTimeZero)
10+
let _ = MyTimeAdd(
11+
kMyTimeZero, kMyTimeZero)
12+
let _ = MyTimeAdd(
13+
kMyTimeZero,
14+
kMyTimeZero)
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
// RUN: %empty-directory(%t)
2+
// RUN: %target-swift-frontend -typecheck -update-code -primary-file %s -F %S/mock-sdk -emit-migrated-file-path %t/result.swift
3+
// RUN: diff -u %s.expected %t/result.swift
4+
5+
import TestMyTime
6+
7+
let zero = MyTime.z
8+
9+
let _ = MyTime.add(this: MyTime.z, that: MyTime.z)
10+
let _ = MyTime.add(
11+
this: MyTime.z, that: MyTime.z)
12+
let _ = MyTime.add(
13+
this: MyTime.z,
14+
that: MyTime.z)
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
2+
typedef struct {
3+
int value;
4+
} MyTime;
5+
6+
extern const MyTime kMyTimeZero;
7+
8+
extern MyTime MyTimeAdd(MyTime lhs, MyTime rhs);
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
Name: TestMyTime
2+
Globals:
3+
- Name: kMyTimeZero
4+
SwiftName: "MyTime.z"
5+
Functions:
6+
- Name: MyTimeAdd
7+
SwiftName: "MyTime.add(this:that:)"
8+
SwiftVersions:
9+
- Version: 3
10+
Globals:
11+
- Name: kMyTimeZero
12+
SwiftName: "kMyTimeZero"
13+
Functions:
14+
- Name: MyTimeAdd
15+
SwiftName: "MyTimeAdd(_:_:)"
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
2+
#include <TestMyTime/MyTime.h>
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
framework module TestMyTime {
2+
umbrella header "TestMyTime.h"
3+
4+
export *
5+
module * { export * }
6+
}

0 commit comments

Comments
 (0)