in Sources/SourceKitLSP/Swift/SyntaxHighlightingTokenParser.swift [25:62]
func parseTokens(_ response: SKDResponseDictionary, in snapshot: DocumentSnapshot, into tokens: inout [SyntaxHighlightingToken]) {
let keys = sourcekitd.keys
if let offset: Int = response[keys.offset],
var length: Int = response[keys.length],
let start: Position = snapshot.positionOf(utf8Offset: offset),
let skKind: sourcekitd_uid_t = response[keys.kind],
case (let kind, var modifiers)? = parseKindAndModifiers(skKind) {
// If the name is escaped in backticks, we need to add two characters to the
// length for the backticks.
if modifiers.contains(.declaration),
let index = snapshot.indexOf(utf8Offset: offset), snapshot.text[index] == "`" {
length += 2
}
if let isSystem: Bool = response[keys.is_system], isSystem {
modifiers.insert(.defaultLibrary)
}
if let end: Position = snapshot.positionOf(utf8Offset: offset + length) {
let multiLineRange = start..<end
let ranges = multiLineRange.splitToSingleLineRanges(in: snapshot)
tokens += ranges.map {
SyntaxHighlightingToken(
range: $0,
kind: kind,
modifiers: modifiers
)
}
}
}
if let substructure: SKDResponseArray = response[keys.substructure] {
parseTokens(substructure, in: snapshot, into: &tokens)
}
}