func parseTokens()

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)
    }
  }