Skip to content

Deprecate SyntaxFactory #539

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

Merged
merged 1 commit into from
Aug 11, 2022
Merged
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
1 change: 1 addition & 0 deletions Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ let package = Package(
"SyntaxTraits.swift.gyb",
"SyntaxVisitor.swift.gyb",
"TokenKind.swift.gyb",
"Tokens.swift.gyb",
"Trivia.swift.gyb",
],
swiftSettings: swiftSyntaxSwiftSettings
Expand Down
2 changes: 1 addition & 1 deletion Sources/SwiftSyntax/RawSyntax.swift
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ internal struct RawSyntaxData {
case layout(Layout)
}

/// Token typically created with `SyntaxFactory.makeToken()`.
/// Token typically created with `TokenSyntax.<someToken>`.
struct MaterializedToken {
var tokenKind: RawTokenKind
var tokenText: SyntaxText
Expand Down
2 changes: 1 addition & 1 deletion Sources/SwiftSyntax/SyntaxAnyVisitor.swift.gyb
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# -*- mode: Swift -*-
# Ignore the following admonition it applies to the resulting .swift file only
}%
//// Automatically Generated From SyntaxFactory.swift.gyb.
//// Automatically Generated From SyntaxAnyVisitor.swift.gyb.
//// Do Not Edit Directly!
//===--------- SyntaxAnyVisitor.swift - Syntax any visitor class ----------===//
//
Expand Down
7 changes: 7 additions & 0 deletions Sources/SwiftSyntax/SyntaxCollections.swift.gyb
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,13 @@ public struct ${node.name}: SyntaxCollection, SyntaxHashable {
self._syntaxNode = Syntax(data)
}

public init(_ children: [${node.collection_element_type}]) {
let raw = RawSyntax.createAndCalcLength(kind: SyntaxKind.${node.swift_syntax_kind},
layout: children.map { $0.raw }, presence: SourcePresence.present)
let data = SyntaxData.forRoot(raw)
self.init(data)
}

public var syntaxNodeType: SyntaxProtocol.Type {
return Swift.type(of: self)
}
Expand Down
20 changes: 20 additions & 0 deletions Sources/SwiftSyntax/SyntaxFactory.swift.gyb
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
//===----------------------------------------------------------------------===//

public enum SyntaxFactory {
@available(*, deprecated, message: "Use initializer on TokenSyntax")
public static func makeToken(_ kind: TokenKind, presence: SourcePresence,
leadingTrivia: Trivia = [],
trailingTrivia: Trivia = []) -> TokenSyntax {
Expand All @@ -37,6 +38,7 @@ public enum SyntaxFactory {
return TokenSyntax(data)
}

@available(*, deprecated, message: "Use initializer on UnknownSyntax")
public static func makeUnknownSyntax(tokens: [TokenSyntax]) -> UnknownSyntax {
let raw = RawSyntax.createAndCalcLength(kind: .unknown,
layout: tokens.map { $0.raw }, presence: .present)
Expand Down Expand Up @@ -65,6 +67,7 @@ public enum SyntaxFactory {
% end
% end
% child_params = ', '.join(child_params)
@available(*, deprecated, message: "Use initializer on ${node.name}")
public static func make${node.syntax_kind}(${child_params}) -> ${node.name} {
let layout: [RawSyntax?] = [
% for child in node.children:
Expand All @@ -81,6 +84,7 @@ public enum SyntaxFactory {
return ${node.name}(data)
}
% elif node.is_syntax_collection():
@available(*, deprecated, message: "Use initializer on ${node.name}")
public static func make${node.syntax_kind}(
_ elements: [${node.collection_element_type}]) -> ${node.name} {
let raw = RawSyntax.createAndCalcLength(kind: SyntaxKind.${node.swift_syntax_kind},
Expand All @@ -92,6 +96,7 @@ public enum SyntaxFactory {

% if not node.is_base():
% default_presence = 'missing' if node.is_missing() else 'present'
@available(*, deprecated, message: "Use initializer on ${node.name}")
public static func makeBlank${node.syntax_kind}(presence: SourcePresence = .${default_presence}) -> ${node.name} {
let data = SyntaxData.forRoot(RawSyntax.create(kind: .${node.swift_syntax_kind},
layout: [
Expand Down Expand Up @@ -119,6 +124,7 @@ public enum SyntaxFactory {
% leading_trivia = token_trivia(token.requires_leading_space)
% trailing_trivia = token_trivia(token.requires_trailing_space)
% if token.is_keyword:
@available(*, deprecated, message: "Use TokenSyntax.${token.swift_kind()}Keyword instead")
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: update this deprecation and remove the Keyword suffix

public static func make${token.name}Keyword(
leadingTrivia: Trivia = ${leading_trivia},
trailingTrivia: Trivia = ${trailing_trivia}
Expand All @@ -128,6 +134,7 @@ public enum SyntaxFactory {
trailingTrivia: trailingTrivia)
}
% elif token.text:
@available(*, deprecated, message: "Use TokenSyntax.${token.swift_kind()}Token instead")
public static func make${token.name}Token(
leadingTrivia: Trivia = ${leading_trivia},
trailingTrivia: Trivia = ${trailing_trivia}
Expand All @@ -137,6 +144,7 @@ public enum SyntaxFactory {
trailingTrivia: trailingTrivia)
}
% else:
@available(*, deprecated, message: "Use TokenSyntax.${token.swift_kind()} instead")
public static func make${token.name}(
_ text: String,
leadingTrivia: Trivia = ${leading_trivia},
Expand All @@ -151,12 +159,14 @@ public enum SyntaxFactory {

/// MARK: Convenience APIs

@available(*, deprecated, message: "Use initializer on TupleTypeSyntax")
public static func makeVoidTupleType() -> TupleTypeSyntax {
return makeTupleType(leftParen: makeLeftParenToken(),
elements: makeBlankTupleTypeElementList(),
rightParen: makeRightParenToken())
}

@available(*, deprecated, message: "Use initializer on TupleTypeSyntax")
public static func makeTupleTypeElement(name: TokenSyntax?,
colon: TokenSyntax?, type: TypeSyntax,
trailingComma: TokenSyntax?) -> TupleTypeElementSyntax {
Expand All @@ -165,19 +175,22 @@ public enum SyntaxFactory {
initializer: nil, trailingComma: trailingComma)
}

@available(*, deprecated, message: "Use initializer on TupleTypeSyntax")
public static func makeTupleTypeElement(type: TypeSyntax,
trailingComma: TokenSyntax?) -> TupleTypeElementSyntax {
return makeTupleTypeElement(name: nil, colon: nil,
type: type, trailingComma: trailingComma)
}

@available(*, deprecated, message: "Use initializer on GenericParameterSyntax")
public static func makeGenericParameter(name: TokenSyntax,
trailingComma: TokenSyntax) -> GenericParameterSyntax {
return makeGenericParameter(attributes: nil, name: name, colon: nil,
inheritedType: nil,
trailingComma: trailingComma)
}

@available(*, deprecated, message: "Use initializer on SimpleTypeIdentifierSyntax")
public static func makeTypeIdentifier(_ name: String,
leadingTrivia: Trivia = [],
trailingTrivia: Trivia = []) -> TypeSyntax {
Expand All @@ -188,30 +201,35 @@ public enum SyntaxFactory {
return TypeSyntax(typeIdentifier)
}

@available(*, deprecated, message: "Use initializer on SimpleTypeIdentifierSyntax")
public static func makeAnyTypeIdentifier(leadingTrivia: Trivia = [],
trailingTrivia: Trivia = []) -> TypeSyntax {
return makeTypeIdentifier("Any", leadingTrivia: leadingTrivia,
trailingTrivia: trailingTrivia)
}

@available(*, deprecated, message: "Use initializer on SimpleTypeIdentifierSyntax")
public static func makeSelfTypeIdentifier(leadingTrivia: Trivia = [],
trailingTrivia: Trivia = []) -> TypeSyntax {
return makeTypeIdentifier("Self", leadingTrivia: leadingTrivia,
trailingTrivia: trailingTrivia)
}

@available(*, deprecated, message: "Use initializer on SimpleTypeIdentifierSyntax")
public static func makeTypeToken(leadingTrivia: Trivia = [],
trailingTrivia: Trivia = []) -> TokenSyntax {
return makeIdentifier("Type", leadingTrivia: leadingTrivia,
trailingTrivia: trailingTrivia)
}

@available(*, deprecated, message: "Use TokenSyntax.protocol")
public static func makeProtocolToken(leadingTrivia: Trivia = [],
trailingTrivia: Trivia = []) -> TokenSyntax {
return makeIdentifier("Protocol", leadingTrivia: leadingTrivia,
trailingTrivia: trailingTrivia)
}

@available(*, deprecated, message: "Use TokenSyntax.spacedBinaryOperator")
public static func makeBinaryOperator(_ name: String,
leadingTrivia: Trivia = [],
trailingTrivia: Trivia = []) -> TokenSyntax {
Expand All @@ -221,6 +239,7 @@ public enum SyntaxFactory {
trailingTrivia: trailingTrivia)
}

@available(*, deprecated, message: "Use initializer on StringLiteralExprSyntax")
public static func makeStringLiteralExpr(_ text: String,
leadingTrivia: Trivia = [],
trailingTrivia: Trivia = []) -> StringLiteralExprSyntax {
Expand All @@ -236,6 +255,7 @@ public enum SyntaxFactory {
closeDelimiter: nil)
}

@available(*, deprecated, message: "Use initializer on IdentifierExprSyntax")
public static func makeVariableExpr(_ text: String,
leadingTrivia: Trivia = [],
trailingTrivia: Trivia = []) -> IdentifierExprSyntax {
Expand Down
28 changes: 28 additions & 0 deletions Sources/SwiftSyntax/SyntaxNodes.swift.gyb.template
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,34 @@ public struct ${node.name}: ${base_type}Protocol, SyntaxHashable {
self._syntaxNode = Syntax(data)
}

public init(
% for (index, child) in enumerate(node.children):
% comma = ',' if index != len(node.children) - 1 else ''
% param_type = child.type_name
% if child.is_optional:
% param_type = param_type + "?"
% if child.is_garbage_nodes():
_ ${child.swift_name}: ${param_type} = nil${comma}
% else:
${child.swift_name}: ${param_type}${comma}
% end
% end
) {
let layout: [RawSyntax?] = [
% for child in node.children:
% if child.is_optional:
${child.swift_name}?.raw,
% else:
${child.swift_name}.raw,
% end
% end
]
let raw = RawSyntax.createAndCalcLength(kind: SyntaxKind.${node.swift_syntax_kind},
layout: layout, presence: SourcePresence.present)
let data = SyntaxData.forRoot(raw)
self.init(data)
}

public var syntaxNodeType: SyntaxProtocol.Type {
return Swift.type(of: self)
}
Expand Down
19 changes: 19 additions & 0 deletions Sources/SwiftSyntax/SyntaxOtherNodes.swift
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,13 @@ public struct UnknownSyntax: SyntaxProtocol, SyntaxHashable {
assert(data.raw.kind == .unknown)
self._syntaxNode = Syntax(data)
}

public init(tokens: [TokenSyntax]) {
let raw = RawSyntax.createAndCalcLength(kind: .unknown,
layout: tokens.map { $0.raw }, presence: .present)
let data = SyntaxData.forRoot(raw)
self.init(data)
}
}

extension UnknownSyntax: CustomReflectable {
Expand Down Expand Up @@ -70,6 +77,18 @@ public struct TokenSyntax: SyntaxProtocol, SyntaxHashable {
self._syntaxNode = Syntax(data)
}

public init(
_ kind: TokenKind,
leadingTrivia: Trivia = [],
trailingTrivia: Trivia = [],
presence: SourcePresence
) {
let raw = RawSyntax.createAndCalcLength(kind: kind, leadingTrivia: leadingTrivia,
trailingTrivia: trailingTrivia, presence: presence)
let data = SyntaxData.forRoot(raw)
self.init(data)
}

public var syntaxNodeType: SyntaxProtocol.Type {
return Swift.type(of: self)
}
Expand Down
2 changes: 1 addition & 1 deletion Sources/SwiftSyntax/SyntaxRewriter.swift.gyb
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# -*- mode: Swift -*-
# Ignore the following admonition it applies to the resulting .swift file only
}%
//// Automatically Generated From SyntaxFactory.swift.gyb.
//// Automatically Generated From SyntaxRewriter.swift.gyb.
//// Do Not Edit Directly!
//===------------ SyntaxRewriter.swift - Syntax Rewriter class ------------===//
//
Expand Down
2 changes: 1 addition & 1 deletion Sources/SwiftSyntax/SyntaxVisitor.swift.gyb
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# -*- mode: Swift -*-
# Ignore the following admonition it applies to the resulting .swift file only
}%
//// Automatically Generated From SyntaxFactory.swift.gyb.
//// Automatically Generated From SyntaxVisitor.swift.gyb.
//// Do Not Edit Directly!
//===------------- SyntaxVisitor.swift - Syntax Visitor class -------------===//
//
Expand Down
86 changes: 86 additions & 0 deletions Sources/SwiftSyntax/Tokens.swift.gyb
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
%{
from gyb_syntax_support import *
# -*- mode: Swift -*-
# Ignore the following admonition it applies to the resulting .swift file only
}%
//// Automatically Generated From Tokens.swift.gyb.
//// Do Not Edit Directly!
//===--- Tokens.swift -----------------------------------------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2022 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
//
//===----------------------------------------------------------------------===//

fileprivate func defaultTrivia(presence: SourcePresence, trivia: Trivia) -> Trivia {
switch presence {
case .present:
return trivia
case .missing:
return []
}
}

extension TokenSyntax {
% for token in SYNTAX_TOKENS:
% leading_trivia = '.space' if token.requires_leading_space else '[]'
% trailing_trivia = '.space' if token.requires_trailing_space else '[]'
% if token.is_keyword:
public static func ${token.swift_kind()}(
leadingTrivia: Trivia? = nil,
trailingTrivia: Trivia? = nil,
presence: SourcePresence = .present
) -> TokenSyntax {
return TokenSyntax(
.${token.swift_kind()},
leadingTrivia: leadingTrivia ?? defaultTrivia(presence: presence, trivia: ${leading_trivia}),
trailingTrivia: trailingTrivia ?? defaultTrivia(presence: presence, trivia: ${trailing_trivia}),
presence: presence
)
}
% elif token.text:
public static func ${token.swift_kind()}Token(
leadingTrivia: Trivia? = nil,
trailingTrivia: Trivia? = nil,
presence: SourcePresence = .present
) -> TokenSyntax {
return TokenSyntax(
.${token.swift_kind()},
leadingTrivia: leadingTrivia ?? defaultTrivia(presence: presence, trivia: ${leading_trivia}),
trailingTrivia: trailingTrivia ?? defaultTrivia(presence: presence, trivia: ${trailing_trivia}),
presence: presence
)
}
% else:
public static func ${token.swift_kind()}(
_ text: String,
leadingTrivia: Trivia? = nil,
trailingTrivia: Trivia? = nil,
presence: SourcePresence = .present
) -> TokenSyntax {
return TokenSyntax(
.${token.swift_kind()}(text),
leadingTrivia: leadingTrivia ?? defaultTrivia(presence: presence, trivia: ${leading_trivia}),
trailingTrivia: trailingTrivia ?? defaultTrivia(presence: presence, trivia: ${trailing_trivia}),
presence: presence
)
}
% end
% end
public static func eof(
leadingTrivia: Trivia? = nil,
presence: SourcePresence = .present
) -> TokenSyntax {
return TokenSyntax(
.eof,
leadingTrivia: leadingTrivia ?? defaultTrivia(presence: presence, trivia: ${leading_trivia}),
trailingTrivia: [],
presence: presence
)
}
}
2 changes: 1 addition & 1 deletion Sources/SwiftSyntax/gyb_generated/SyntaxAnyVisitor.swift
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
//// Automatically Generated From SyntaxFactory.swift.gyb.
//// Automatically Generated From SyntaxAnyVisitor.swift.gyb.
//// Do Not Edit Directly!
//===--------- SyntaxAnyVisitor.swift - Syntax any visitor class ----------===//
//
Expand Down
Loading