1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2021 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
import LSPLogging
import LanguageServerProtocol
import SourceKitD
/// A ranged token in the document used for syntax highlighting.
public struct SyntaxHighlightingToken: Hashable, Sendable {
/// The range of the token in the document. Must be on a single line.
public var range: Range<Position> {
didSet {
assert(range.lowerBound.line == range.upperBound.line)
}
}
/// The token type.
public var kind: SemanticTokenTypes
/// Additional metadata about the token.
public var modifiers: SemanticTokenModifiers
/// The (inclusive) start position of the token.
public var start: Position { range.lowerBound }
/// The (exclusive) end position of the token.
public var end: Position { range.upperBound }
/// The length of the token in UTF-16 code units.
public var utf16length: Int { end.utf16index - start.utf16index }
public init(range: Range<Position>, kind: SemanticTokenTypes, modifiers: SemanticTokenModifiers = []) {
assert(range.lowerBound.line == range.upperBound.line)
self.range = range
self.kind = kind
self.modifiers = modifiers
}
public init(start: Position, utf16length: Int, kind: SemanticTokenTypes, modifiers: SemanticTokenModifiers = []) {
let range = start..<Position(line: start.line, utf16index: start.utf16index + utf16length)
self.init(range: range, kind: kind, modifiers: modifiers)
}
}
|