in src/swift/SwiftAPIViewCore/Sources/SwiftSyntax+Extensions/SyntaxProtocol+Extensions.swift [233:290]
func tokenize(token: TokenSyntax, apiview a: CodeModel, parent: DeclarationModel?) {
let tokenKind = token.tokenKind
let tokenText = token.withoutTrivia().description
var options = ReviewTokenOptions()
options.applySpacing(tokenKind.spacing)
if tokenKind.isKeyword {
a.keyword(tokenText, options: options)
return
} else if tokenKind.isPunctuation {
a.punctuation(tokenText, options: options)
return
}
if case let SwiftSyntax.TokenKind.identifier(val) = tokenKind {
let nameInParent = self.childNameInParent
// used in @availabililty annotations
if nameInParent == "platform" {
a.text(tokenText)
a.currentLine.tokens.last?.hasSuffixSpace = true
} else {
a.typeReference(name: val, options: options)
}
} else if case let SwiftSyntax.TokenKind.spacedBinaryOperator(val) = tokenKind {
// in APIView, * is never used for multiplication
if val == "*" {
options.applySpacing(.Neither)
a.punctuation(val, options: options)
} else {
options.applySpacing(.Both)
a.punctuation(val, options: options)
}
} else if case let SwiftSyntax.TokenKind.unspacedBinaryOperator(val) = tokenKind {
options.applySpacing(.Neither)
a.punctuation(val, options: options)
} else if case let SwiftSyntax.TokenKind.prefixOperator(val) = tokenKind {
options.applySpacing(.Leading)
a.punctuation(val, options: options)
} else if case let SwiftSyntax.TokenKind.postfixOperator(val) = tokenKind {
options.applySpacing(.Trailing)
a.punctuation(val, options: options)
} else if case let SwiftSyntax.TokenKind.floatingLiteral(val) = tokenKind {
a.literal(val)
} else if case let SwiftSyntax.TokenKind.regexLiteral(val) = tokenKind {
a.literal(val)
} else if case let SwiftSyntax.TokenKind.stringLiteral(val) = tokenKind {
a.literal(val)
} else if case let SwiftSyntax.TokenKind.integerLiteral(val) = tokenKind {
a.literal(val)
} else if case let SwiftSyntax.TokenKind.contextualKeyword(val) = tokenKind {
options.applySpacing(tokenKind.spacing)
a.keyword(val, options: options)
} else if case let SwiftSyntax.TokenKind.stringSegment(val) = tokenKind {
a.text(val)
} else {
SharedLogger.warn("No implementation for token kind: \(tokenKind)")
a.text(tokenText)
}
}