File tree 2 files changed +48
-11
lines changed
Sources/SwiftFormat/PrettyPrint
Tests/SwiftFormatTests/PrettyPrint 2 files changed +48
-11
lines changed Original file line number Diff line number Diff line change @@ -119,18 +119,21 @@ struct PrettyPrintBuffer {
119
119
consecutiveNewlineCount = 0
120
120
pendingSpaces = 0
121
121
122
- // In case of comments, we may get a multi-line string.
123
- // To account for that case, we need to correct the lineNumber count.
124
- // The new column is only the position within the last line.
125
- let lines = text. split ( separator: " \n " )
126
- lineNumber += lines. count - 1
127
- if lines. count > 1 {
128
- // in case we have inserted new lines, we need to reset the column
129
- column = lines. last? . count ?? 0
122
+ // In case of comments, we may get a multi-line string. To account for that case, we need to correct the
123
+ // `lineNumber` count. The new `column` is the position within the last line.
124
+
125
+ var lastNewlineIndex : String . Index ? = nil
126
+ for i in text. utf8. indices {
127
+ if text. utf8 [ i] == UInt8 ( ascii: " \n " ) {
128
+ lastNewlineIndex = i
129
+ lineNumber += 1
130
+ }
131
+ }
132
+
133
+ if let lastNewlineIndex {
134
+ column = text. distance ( from: text. utf8. index ( after: lastNewlineIndex) , to: text. endIndex)
130
135
} else {
131
- // in case it is an end of line comment or a single line comment,
132
- // we just add to the current column
133
- column += lines. last? . count ?? 0
136
+ column += text. count
134
137
}
135
138
}
136
139
Original file line number Diff line number Diff line change @@ -81,4 +81,38 @@ final class LineNumbersTests: PrettyPrintTestCase {
81
81
]
82
82
)
83
83
}
84
+
85
+ func testCharacterVsCodepoint( ) {
86
+ let input =
87
+ """
88
+ let fo = 1 // 🤥
89
+
90
+ """
91
+
92
+ assertPrettyPrintEqual (
93
+ input: input,
94
+ expected: input,
95
+ linelength: 16 ,
96
+ whitespaceOnly: true ,
97
+ findings: [ ]
98
+ )
99
+ }
100
+
101
+ func testCharacterVsCodepointMultiline( ) {
102
+ let input =
103
+ #"""
104
+ /// This is a multiline
105
+ /// comment that is in 🤥
106
+ /// fact perfectly sized
107
+
108
+ """#
109
+
110
+ assertPrettyPrintEqual (
111
+ input: input,
112
+ expected: input,
113
+ linelength: 25 ,
114
+ whitespaceOnly: true ,
115
+ findings: [ ]
116
+ )
117
+ }
84
118
}
You can’t perform that action at this time.
0 commit comments