Skip to content

Move TokenSyntax to SyntaxNodes.swift.gyb #163

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
137 changes: 0 additions & 137 deletions Sources/SwiftSyntax/Syntax.swift
Original file line number Diff line number Diff line change
Expand Up @@ -372,143 +372,6 @@ public extension SyntaxProtocol {

/// MARK: - Nodes

/// A Syntax node representing a single token.
public struct TokenSyntax: SyntaxProtocol {
public let _syntaxNode: Syntax

/// Converts the given `Syntax` node to a `TokenSyntax` if possible. Returns
/// `nil` if the conversion is not possible.
public init?(_ syntax: Syntax) {
guard syntax.raw.kind == .token else { return nil }
self._syntaxNode = syntax
}

/// Creates a Syntax node from the given `SyntaxData`. This assumes
/// that the `SyntaxData` is of the correct kind. If it is not, the behaviour
/// is undefined.
internal init(_ data: SyntaxData) {
assert(data.raw.kind == .token)
self._syntaxNode = Syntax(data)
}

public var presence: SourcePresence {
return raw.presence
}

/// The text of the token as written in the source code.
public var text: String {
return tokenKind.text
}

/// Returns a new TokenSyntax with its kind replaced
/// by the provided token kind.
public func withKind(_ tokenKind: TokenKind) -> TokenSyntax {
guard raw.kind == .token else {
fatalError("TokenSyntax must have token as its raw")
}
let newRaw = RawSyntax.createAndCalcLength(kind: tokenKind,
leadingTrivia: raw.formLeadingTrivia()!, trailingTrivia: raw.formTrailingTrivia()!,
presence: raw.presence)
let newData = data.replacingSelf(newRaw)
return TokenSyntax(newData)
}

/// Returns a new TokenSyntax with its leading trivia replaced
/// by the provided trivia.
public func withLeadingTrivia(_ leadingTrivia: Trivia) -> TokenSyntax {
guard raw.kind == .token else {
fatalError("TokenSyntax must have token as its raw")
}
return TokenSyntax(data.withLeadingTrivia(leadingTrivia))
}

/// Returns a new TokenSyntax with its trailing trivia replaced
/// by the provided trivia.
public func withTrailingTrivia(_ trailingTrivia: Trivia) -> TokenSyntax {
guard raw.kind == .token else {
fatalError("TokenSyntax must have token as its raw")
}
return TokenSyntax(data.withTrailingTrivia(trailingTrivia))
}

/// Returns a new TokenSyntax with its leading trivia removed.
public func withoutLeadingTrivia() -> TokenSyntax {
return withLeadingTrivia([])
}

/// Returns a new TokenSyntax with its trailing trivia removed.
public func withoutTrailingTrivia() -> TokenSyntax {
return withTrailingTrivia([])
}

/// Returns a new TokenSyntax with all trivia removed.
public func withoutTrivia() -> TokenSyntax {
return withoutLeadingTrivia().withoutTrailingTrivia()
}

/// The leading trivia (spaces, newlines, etc.) associated with this token.
public var leadingTrivia: Trivia {
get {
return raw.formTokenLeadingTrivia()!
}
set {
self = withLeadingTrivia(newValue)
}
}

/// The trailing trivia (spaces, newlines, etc.) associated with this token.
public var trailingTrivia: Trivia {
get {
return raw.formTokenTrailingTrivia()!
}
set {
self = withTrailingTrivia(newValue)
}
}

/// The kind of token this node represents.
public var tokenKind: TokenKind {
get {
return raw.formTokenKind()!
}
set {
self = withKind(newValue)
}
}

/// The length this node takes up spelled out in the source, excluding its
/// leading or trailing trivia.
public var contentLength: SourceLength {
return raw.tokenContentLength
}

/// The length this node's leading trivia takes up spelled out in source.
public var leadingTriviaLength: SourceLength {
return raw.tokenLeadingTriviaLength
}

/// The length this node's trailing trivia takes up spelled out in source.
public var trailingTriviaLength: SourceLength {
return raw.tokenTrailingTriviaLength
}

/// The length of this node including all of its trivia.
public var totalLength: SourceLength {
return raw.totalLength
}
}

extension TokenSyntax: CustomReflectable {
public var customMirror: Mirror {
return Mirror(self, children: [
"text": text,
"leadingTrivia": leadingTrivia,
"trailingTrivia": trailingTrivia,
"tokenKind": tokenKind,
])
}
}

/// Sequence of tokens that are part of the provided Syntax node.
public struct TokenSequence: Sequence {
public struct Iterator: IteratorProtocol {
Expand Down
138 changes: 138 additions & 0 deletions Sources/SwiftSyntax/SyntaxNodes.swift.gyb
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,144 @@ extension UnknownSyntax: CustomReflectable {
}
}

/// A Syntax node representing a single token.
public struct TokenSyntax: SyntaxProtocol {
public let _syntaxNode: Syntax

/// Converts the given `Syntax` node to a `TokenSyntax` if possible. Returns
/// `nil` if the conversion is not possible.
public init?(_ syntax: Syntax) {
guard syntax.raw.kind == .token else { return nil }
self._syntaxNode = syntax
}

/// Creates a Syntax node from the given `SyntaxData`. This assumes
/// that the `SyntaxData` is of the correct kind. If it is not, the behaviour
/// is undefined.
internal init(_ data: SyntaxData) {
assert(data.raw.kind == .token)
self._syntaxNode = Syntax(data)
}

public var presence: SourcePresence {
return raw.presence
}

/// The text of the token as written in the source code.
public var text: String {
return tokenKind.text
}

/// Returns a new TokenSyntax with its kind replaced
/// by the provided token kind.
public func withKind(_ tokenKind: TokenKind) -> TokenSyntax {
guard raw.kind == .token else {
fatalError("TokenSyntax must have token as its raw")
}
let newRaw = RawSyntax.createAndCalcLength(kind: tokenKind,
leadingTrivia: raw.formLeadingTrivia()!, trailingTrivia: raw.formTrailingTrivia()!,
presence: raw.presence)
let newData = data.replacingSelf(newRaw)
return TokenSyntax(newData)
}

/// Returns a new TokenSyntax with its leading trivia replaced
/// by the provided trivia.
public func withLeadingTrivia(_ leadingTrivia: Trivia) -> TokenSyntax {
guard raw.kind == .token else {
fatalError("TokenSyntax must have token as its raw")
}
return TokenSyntax(data.withLeadingTrivia(leadingTrivia))
}

/// Returns a new TokenSyntax with its trailing trivia replaced
/// by the provided trivia.
public func withTrailingTrivia(_ trailingTrivia: Trivia) -> TokenSyntax {
guard raw.kind == .token else {
fatalError("TokenSyntax must have token as its raw")
}
return TokenSyntax(data.withTrailingTrivia(trailingTrivia))
}

/// Returns a new TokenSyntax with its leading trivia removed.
public func withoutLeadingTrivia() -> TokenSyntax {
return withLeadingTrivia([])
}

/// Returns a new TokenSyntax with its trailing trivia removed.
public func withoutTrailingTrivia() -> TokenSyntax {
return withTrailingTrivia([])
}

/// Returns a new TokenSyntax with all trivia removed.
public func withoutTrivia() -> TokenSyntax {
return withoutLeadingTrivia().withoutTrailingTrivia()
}

/// The leading trivia (spaces, newlines, etc.) associated with this token.
public var leadingTrivia: Trivia {
get {
return raw.formTokenLeadingTrivia()!
}
set {
self = withLeadingTrivia(newValue)
}
}

/// The trailing trivia (spaces, newlines, etc.) associated with this token.
public var trailingTrivia: Trivia {
get {
return raw.formTokenTrailingTrivia()!
}
set {
self = withTrailingTrivia(newValue)
}
}

/// The kind of token this node represents.
public var tokenKind: TokenKind {
get {
return raw.formTokenKind()!
}
set {
self = withKind(newValue)
}
}

/// The length this node takes up spelled out in the source, excluding its
/// leading or trailing trivia.
public var contentLength: SourceLength {
return raw.tokenContentLength
}

/// The length this node's leading trivia takes up spelled out in source.
public var leadingTriviaLength: SourceLength {
return raw.tokenLeadingTriviaLength
}

/// The length this node's trailing trivia takes up spelled out in source.
public var trailingTriviaLength: SourceLength {
return raw.tokenTrailingTriviaLength
}

/// The length of this node including all of its trivia.
public var totalLength: SourceLength {
return raw.totalLength
}
}

extension TokenSyntax: CustomReflectable {
public var customMirror: Mirror {
return Mirror(self, children: [
"text": text,
"leadingTrivia": leadingTrivia,
"trailingTrivia": trailingTrivia,
"tokenKind": tokenKind,
])
}
}


% for node in SYNTAX_NODES:
% base_type = node.base_type
/// Protocol to which all `${node.name}` nodes conform. Extension point to add
Expand Down
Loading