@@ -14,20 +14,6 @@ import SwiftDiagnostics
14
14
import SwiftSyntax
15
15
16
16
public enum FixItApplier {
17
- struct Edit : Equatable {
18
- var startUtf8Offset : Int
19
- var endUtf8Offset : Int
20
- let replacement : String
21
-
22
- var replacementLength : Int {
23
- return replacement. utf8. count
24
- }
25
-
26
- var replacementRange : Range < Int > {
27
- return startUtf8Offset..< endUtf8Offset
28
- }
29
- }
30
-
31
17
/// Applies selected or all Fix-Its from the provided diagnostics to a given syntax tree.
32
18
///
33
19
/// - Parameters:
@@ -50,18 +36,18 @@ public enum FixItApplier {
50
36
. filter { messages. contains ( $0. message. message) }
51
37
. flatMap ( \. changes)
52
38
53
- var edits : [ Edit ] = changes. map ( \. edit)
39
+ var edits : [ FixIt . Change . Edit ] = changes. map ( \. edit)
54
40
var source = tree. description
55
41
56
42
while let edit = edits. first {
57
43
edits = Array ( edits. dropFirst ( ) )
58
44
59
- let startIndex = source. utf8. index ( source. utf8. startIndex, offsetBy: edit. startUtf8Offset )
60
- let endIndex = source. utf8. index ( source. utf8. startIndex, offsetBy: edit. endUtf8Offset )
45
+ let startIndex = source. utf8. index ( source. utf8. startIndex, offsetBy: edit. startPosition . utf8Offset )
46
+ let endIndex = source. utf8. index ( source. utf8. startIndex, offsetBy: edit. endPosition . utf8Offset )
61
47
62
48
source. replaceSubrange ( startIndex..< endIndex, with: edit. replacement)
63
49
64
- edits = edits. compactMap { remainingEdit -> FixItApplier . Edit ? in
50
+ edits = edits. compactMap { remainingEdit -> FixIt . Change . Edit ? in
65
51
var remainingEdit = remainingEdit
66
52
67
53
if remainingEdit. replacementRange. overlaps ( edit. replacementRange) {
@@ -73,9 +59,9 @@ public enum FixItApplier {
73
6D40
td>59
74
60
// If the remaining edit starts after or at the end of the edit that we just applied,
75
61
// shift it by the current edit's difference in length.
76
- if edit. endUtf8Offset <= remainingEdit. startUtf8Offset {
77
- remainingEdit. startUtf8Offset = remainingEdit. startUtf8Offset - edit. replacementRange . count + edit. replacementLength
78
- remainingEdit. endUtf8Offset = remainingEdit. endUtf8Offset - edit. replacementRange . count + edit. replacementLength
62
+ if edit. endPosition . utf8Offset <= remainingEdit. startPosition . utf8Offset {
63
+ remainingEdit. startPosition = AbsolutePosition ( utf8Offset : remainingEdit. startPosition . utf8Offset - edit. replacementRangeCount + edit. replacementLength)
64
+ remainingEdit. endPosition = AbsolutePosition ( utf8Offset : remainingEdit. endPosition . utf8Offset - edit. replacementRangeCount + edit. replacementLength)
79
65
}
80
66
81
67
return remainingEdit
@@ -85,30 +71,3 @@ public enum FixItApplier {
85
71
return source
86
72
}
87
73
}
88
-
89
- fileprivate extension FixIt . Change {
90
- var edit : FixItApplier . Edit {
91
- switch self {
92
- case . replace( let oldNode, let newNode) :
93
- return FixItApplier . Edit (
94
- startUtf8Offset: oldNode. position. utf8Offset,
95
- endUtf8Offset: oldNode. endPosition. utf8Offset,
96
- replacement: newNode. description
97
- )
98
-
99
- case . replaceLeadingTrivia( let token, let newTrivia) :
100
- return FixItApplier . Edit (
101
- startUtf8Offset: token. position. utf8Offset,
102
- endUtf8Offset: token. positionAfterSkippingLeadingTrivia. utf8Offset,
103
- replacement: newTrivia. description
104
- )
105
-
106
- case . replaceTrailingTrivia( let token, let newTrivia) :
107
- return FixItApplier . Edit (
108
- startUtf8Offset: token. endPositionBeforeTrailingTrivia. utf8Offset,
109
- endUtf8Offset: token. endPosition. utf8Offset,
110
- replacement: newTrivia. description
111
- )
112
- }
113
- }
114
- }
0 commit comments