|
1 | 1 | import Foundation |
2 | 2 | import SourceKittenFramework |
| 3 | +import SwiftSyntax |
3 | 4 | import XCTest |
4 | 5 |
|
5 | 6 | import SwiftLintFramework |
@@ -198,18 +199,18 @@ public extension Collection where Element == Example { |
198 | 199 | } |
199 | 200 | } |
200 | 201 |
|
201 | | -private func cleanedContentsAndMarkerOffsets(from contents: String) -> (String, [Int]) { |
202 | | - var markerOffsets = [Int]() |
| 202 | +private func cleanedContentsAndMarkerOffsets(from contents: String) -> (String, [AbsolutePosition]) { |
| 203 | + var markerOffsets = [AbsolutePosition]() |
203 | 204 | var cleanedContents = "" |
204 | 205 | cleanedContents.reserveCapacity(contents.count) |
205 | 206 |
|
206 | | - var offset = 0 |
| 207 | + var offset = AbsolutePosition(utf8Offset: 0) |
207 | 208 | for char in contents { |
208 | 209 | if char == violationMarkerChar { |
209 | 210 | markerOffsets.append(offset) |
210 | 211 | } else { |
211 | 212 | cleanedContents.append(char) |
212 | | - offset += 1 |
| 213 | + offset = offset.advanced(by: char.utf8.count) |
213 | 214 | } |
214 | 215 | } |
215 | 216 |
|
@@ -575,11 +576,7 @@ public extension XCTestCase { |
575 | 576 | } |
576 | 577 | let file = SwiftLintFile.testFile(withContents: cleanTrigger) |
577 | 578 |
|
578 | | - // Convert grapheme cluster indices to UTF-16 offsets |
579 | | - let expectedLocations = markerOffsets.map { graphemeOffset -> Location in |
580 | | - let utf16Offset = cleanTrigger.utf16OffsetFrom(graphemeOffset: graphemeOffset) |
581 | | - return Location(file: file, characterOffset: utf16Offset) |
582 | | - } |
| 579 | + let expectedLocations = markerOffsets.map { Location(file: file, position: $0) } |
583 | 580 |
|
584 | 581 | // Assert violations on unexpected location |
585 | 582 | let violationsAtUnexpectedLocation = triggerViolations |
@@ -672,21 +669,3 @@ package extension [any Rule] { |
672 | 669 | first(where: { $0 is CustomRules }) as? CustomRules |
673 | 670 | } |
674 | 671 | } |
675 | | - |
676 | | -private extension String { |
677 | | - /// Converts a grapheme cluster offset to a UTF-16 code unit offset |
678 | | - func utf16OffsetFrom(graphemeOffset: Int) -> Int { |
679 | | - var currentGraphemeIndex = 0 |
680 | | - var utf16Offset = 0 |
681 | | - |
682 | | - for char in self { |
683 | | - if currentGraphemeIndex == graphemeOffset { |
684 | | - return utf16Offset |
685 | | - } |
686 | | - utf16Offset += char.utf16.count |
687 | | - currentGraphemeIndex += 1 |
688 | | - } |
689 | | - |
690 | | - return utf16Offset |
691 | | - } |
692 | | -} |
0 commit comments