26 lines
872 B
Swift
26 lines
872 B
Swift
import Foundation
|
|
import SourceKittenFramework
|
|
|
|
extension SyntaxMap {
|
|
/// Returns array of SyntaxTokens intersecting with byte range
|
|
///
|
|
/// - Parameter byteRange: byte based NSRange
|
|
internal func tokens(inByteRange byteRange: NSRange) -> [SyntaxToken] {
|
|
|
|
func intersect(_ token: SyntaxToken) -> Bool {
|
|
return NSRange(location: token.offset, length: token.length)
|
|
.intersects(byteRange)
|
|
}
|
|
|
|
guard let startIndex = tokens.index(where: intersect) else {
|
|
return []
|
|
}
|
|
let tokensBeginningIntersect = tokens.lazy.suffix(from: startIndex)
|
|
return Array(tokensBeginningIntersect.filter(intersect))
|
|
}
|
|
|
|
internal func kinds(inByteRange byteRange: NSRange) -> [SyntaxKind] {
|
|
return tokens(inByteRange: byteRange).compactMap { SyntaxKind(rawValue: $0.type) }
|
|
}
|
|
}
|