Skip to content

Commit 0682c85

Browse files
committed
Deprecate SyntaxFactory
Instead of always writing `SyntaxFactory.make*` we can just use the initializers of the nodes that should be created, which leads code that’s nicer to read. rdar://97910890
1 parent 554057f commit 0682c85

File tree

53 files changed

+8129
-689
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+8129
-689
lines changed

Package.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ let package = Package(
6767
"SyntaxTraits.swift.gyb",
6868
"SyntaxVisitor.swift.gyb",
6969
"TokenKind.swift.gyb",
70+
"Tokens.swift.gyb",
7071
"Trivia.swift.gyb",
7172
],
7273
swiftSettings: swiftSyntaxSwiftSettings

Sources/SwiftSyntax/RawSyntax.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ internal struct RawSyntaxData {
2020
case layout(Layout)
2121
}
2222

23-
/// Token typically created with `SyntaxFactory.makeToken()`.
23+
/// Token typically created with `TokenSyntax.<someToken>`.
2424
struct MaterializedToken {
2525
var tokenKind: RawTokenKind
2626
var tokenText: SyntaxText

Sources/SwiftSyntax/SyntaxAnyVisitor.swift.gyb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# -*- mode: Swift -*-
44
# Ignore the following admonition it applies to the resulting .swift file only
55
}%
6-
//// Automatically Generated From SyntaxFactory.swift.gyb.
6+
//// Automatically Generated From SyntaxAnyVisitor.swift.gyb.
77
//// Do Not Edit Directly!
88
//===--------- SyntaxAnyVisitor.swift - Syntax any visitor class ----------===//
99
//

Sources/SwiftSyntax/SyntaxCollections.swift.gyb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,13 @@ public struct ${node.name}: SyntaxCollection, SyntaxHashable {
5555
self._syntaxNode = Syntax(data)
5656
}
5757

58+
public init(_ children: [${node.collection_element_type}]) {
59+
let raw = RawSyntax.createAndCalcLength(kind: SyntaxKind.${node.swift_syntax_kind},
60+
layout: children.map { $0.raw }, presence: SourcePresence.present)
61+
let data = SyntaxData.forRoot(raw)
62+
self.init(data)
63+
}
64+
5865
public var syntaxNodeType: SyntaxProtocol.Type {
5966
return Swift.type(of: self)
6067
}

Sources/SwiftSyntax/SyntaxFactory.swift.gyb

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
//===----------------------------------------------------------------------===//
2929

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

41+
@available(*, deprecated, message: "Use initializer on UnknownSyntax")
4042
public static func makeUnknownSyntax(tokens: [TokenSyntax]) -> UnknownSyntax {
4143
let raw = RawSyntax.createAndCalcLength(kind: .unknown,
4244
layout: tokens.map { $0.raw }, presence: .present)
@@ -65,6 +67,7 @@ public enum SyntaxFactory {
6567
% end
6668
% end
6769
% child_params = ', '.join(child_params)
70+
@available(*, deprecated, message: "Use initializer on ${node.name}")
6871
public static func make${node.syntax_kind}(${child_params}) -> ${node.name} {
6972
let layout: [RawSyntax?] = [
7073
% for child in node.children:
@@ -81,6 +84,7 @@ public enum SyntaxFactory {
8184
return ${node.name}(data)
8285
}
8386
% elif node.is_syntax_collection():
87+
@available(*, deprecated, message: "Use initializer on ${node.name}")
8488
public static func make${node.syntax_kind}(
8589
_ elements: [${node.collection_element_type}]) -> ${node.name} {
8690
let raw = RawSyntax.createAndCalcLength(kind: SyntaxKind.${node.swift_syntax_kind},
@@ -92,6 +96,7 @@ public enum SyntaxFactory {
9296

9397
% if not node.is_base():
9498
% default_presence = 'missing' if node.is_missing() else 'present'
99+
@available(*, deprecated, message: "Use initializer on ${node.name}")
95100
public static func makeBlank${node.syntax_kind}(presence: SourcePresence = .${default_presence}) -> ${node.name} {
96101
let data = SyntaxData.forRoot(RawSyntax.create(kind: .${node.swift_syntax_kind},
97102
layout: [
@@ -119,6 +124,7 @@ public enum SyntaxFactory {
119124
% leading_trivia = token_trivia(token.requires_leading_space)
120125
% trailing_trivia = token_trivia(token.requires_trailing_space)
121126
% if token.is_keyword:
127+
@available(*, deprecated, message: "Use TokenSyntax.${token.swift_kind()}Keyword instead")
122128
public static func make${token.name}Keyword(
123129
leadingTrivia: Trivia = ${leading_trivia},
124130
trailingTrivia: Trivia = ${trailing_trivia}
@@ -128,6 +134,7 @@ public enum SyntaxFactory {
128134
trailingTrivia: trailingTrivia)
129135
}
130136
% elif token.text:
137+
@available(*, deprecated, message: "Use TokenSyntax.${token.swift_kind()}Token instead")
131138
public static func make${token.name}Token(
132139
leadingTrivia: Trivia = ${leading_trivia},
133140
trailingTrivia: Trivia = ${trailing_trivia}
@@ -137,6 +144,7 @@ public enum SyntaxFactory {
137144
trailingTrivia: trailingTrivia)
138145
}
139146
% else:
147+
@available(*, deprecated, message: "Use TokenSyntax.${token.swift_kind()} instead")
140148
public static func make${token.name}(
141149
_ text: String,
142150
leadingTrivia: Trivia = ${leading_trivia},
@@ -151,12 +159,14 @@ public enum SyntaxFactory {
151159

152160
/// MARK: Convenience APIs
153161

162+
@available(*, deprecated, message: "Use initializer on TupleTypeSyntax")
154163
public static func makeVoidTupleType() -> TupleTypeSyntax {
155164
return makeTupleType(leftParen: makeLeftParenToken(),
156165
elements: makeBlankTupleTypeElementList(),
157166
rightParen: makeRightParenToken())
158167
}
159168

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

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

185+
@available(*, deprecated, message: "Use initializer on GenericParameterSyntax")
174186
public static func makeGenericParameter(name: TokenSyntax,
175187
trailingComma: TokenSyntax) -> GenericParameterSyntax {
176188
return makeGenericParameter(attributes: nil, name: name, colon: nil,
177189
inheritedType: nil,
178190
trailingComma: trailingComma)
179191
}
180192

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

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

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

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

225+
@available(*, deprecated, message: "Use TokenSyntax.protocol")
209226
public static func makeProtocolToken(leadingTrivia: Trivia = [],
210227
trailingTrivia: Trivia = []) -> TokenSyntax {
211228
return makeIdentifier("Protocol", leadingTrivia: leadingTrivia,
212229
trailingTrivia: trailingTrivia)
213230
}
214231

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

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

258+
@available(*, deprecated, message: "Use initializer on IdentifierExprSyntax")
239259
public static func makeVariableExpr(_ text: String,
240260
leadingTrivia: Trivia = [],
241261
trailingTrivia: Trivia = []) -> IdentifierExprSyntax {

Sources/SwiftSyntax/SyntaxNodes.swift.gyb.template

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,34 @@ public struct ${node.name}: ${base_type}Protocol, SyntaxHashable {
8080
self._syntaxNode = Syntax(data)
8181
}
8282

83+
public init(
84+
% for (index, child) in enumerate(node.children):
85+
% comma = ',' if index != len(node.children) - 1 else ''
86+
% param_type = child.type_name
87+
% if child.is_optional:
88+
% param_type = param_type + "?"
89+
% if child.is_garbage_nodes():
90+
_ ${child.swift_name}: ${param_type} = nil${comma}
91+
% else:
92+
${child.swift_name}: ${param_type}${comma}
93+
% end
94+
% end
95+
) {
96+
let layout: [RawSyntax?] = [
97+
% for child in node.children:
98+
% if child.is_optional:
99+
${child.swift_name}?.raw,
100+
% else:
101+
${child.swift_name}.raw,
102+
% end
103+
% end
104+
]
105+
let raw = RawSyntax.createAndCalcLength(kind: SyntaxKind.${node.swift_syntax_kind},
106+
layout: layout, presence: SourcePresence.present)
107+
let data = SyntaxData.forRoot(raw)
108+
self.init(data)
109+
}
110+
83111
public var syntaxNodeType: SyntaxProtocol.Type {
84112
return Swift.type(of: self)
85113
}

Sources/SwiftSyntax/SyntaxOtherNodes.swift

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,13 @@ public struct UnknownSyntax: SyntaxProtocol, SyntaxHashable {
4141
assert(data.raw.kind == .unknown)
4242
self._syntaxNode = Syntax(data)
4343
}
44+
45+
public init(tokens: [TokenSyntax]) {
46+
let raw = RawSyntax.createAndCalcLength(kind: .unknown,
47+
layout: tokens.map { $0.raw }, presence: .present)
48+
let data = SyntaxData.forRoot(raw)
49+
self.init(data)
50+
}
4451
}
4552

4653
extension UnknownSyntax: CustomReflectable {
@@ -70,6 +77,18 @@ public struct TokenSyntax: SyntaxProtocol, SyntaxHashable {
7077
self._syntaxNode = Syntax(data)
7178
}
7279

80+
public init(
81+
_ kind: TokenKind,
82+
leadingTrivia: Trivia = [],
83+
trailingTrivia: Trivia = [],
84+
presence: SourcePresence
85+
) {
86+
let raw = RawSyntax.createAndCalcLength(kind: kind, leadingTrivia: leadingTrivia,
87+
trailingTrivia: trailingTrivia, presence: presence)
88+
let data = SyntaxData.forRoot(raw)
89+
self.init(data)
90+
}
91+
7392
public var syntaxNodeType: SyntaxProtocol.Type {
7493
return Swift.type(of: self)
7594
}

Sources/SwiftSyntax/SyntaxRewriter.swift.gyb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# -*- mode: Swift -*-
44
# Ignore the following admonition it applies to the resulting .swift file only
55
}%
6-
//// Automatically Generated From SyntaxFactory.swift.gyb.
6+
//// Automatically Generated From SyntaxRewriter.swift.gyb.
77
//// Do Not Edit Directly!
88
//===------------ SyntaxRewriter.swift - Syntax Rewriter class ------------===//
99
//

Sources/SwiftSyntax/SyntaxVisitor.swift.gyb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# -*- mode: Swift -*-
44
# Ignore the following admonition it applies to the resulting .swift file only
55
}%
6-
//// Automatically Generated From SyntaxFactory.swift.gyb.
6+
//// Automatically Generated From SyntaxVisitor.swift.gyb.
77
//// Do Not Edit Directly!
88
//===------------- SyntaxVisitor.swift - Syntax Visitor class -------------===//
99
//

Sources/SwiftSyntax/Tokens.swift.gyb

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
%{
2+
from gyb_syntax_support import *
3+
# -*- mode: Swift -*-
4+
# Ignore the following admonition it applies to the resulting .swift file only
5+
}%
6+
//// Automatically Generated From Tokens.swift.gyb.
7+
//// Do Not Edit Directly!
8+
//===--- Tokens.swift -----------------------------------------------------===//
9+
//
10+
// This source file is part of the Swift.org open source project
11+
//
12+
// Copyright (c) 2014 - 2022 Apple Inc. and the Swift project authors
13+
// Licensed under Apache License v2.0 with Runtime Library Exception
14+
//
15+
// See https://swift.org/LICENSE.txt for license information
16+
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
17+
//
18+
//===----------------------------------------------------------------------===//
19+
20+
fileprivate func defaultTrivia(presence: SourcePresence, trivia: Trivia) -> Trivia {
21+
switch presence {
22+
case .present:
23+
return trivia
24+
case .missing:
25+
return []
26+
}
27+
}
28+
29+
extension TokenSyntax {
30+
% for token in SYNTAX_TOKENS:
31+
% leading_trivia = '.space' if token.requires_leading_space else '[]'
32+
% trailing_trivia = '.space' if token.requires_trailing_space else '[]'
33+
% if token.is_keyword:
34+
public static func ${token.swift_kind()}(
35+
leadingTrivia: Trivia? = nil,
36+
trailingTrivia: Trivia? = nil,
37+
presence: SourcePresence = .present
38+
) -> TokenSyntax {
39+
return TokenSyntax(
40+
.${token.swift_kind()},
41+
leadingTrivia: leadingTrivia ?? defaultTrivia(presence: presence, trivia: ${leading_trivia}),
42+
trailingTrivia: trailingTrivia ?? defaultTrivia(presence: presence, trivia: ${trailing_trivia}),
43+
presence: presence
44+
)
45+
}
46+
% elif token.text:
47+
public static func ${token.swift_kind()}Token(
48+
leadingTrivia: Trivia? = nil,
49+
trailingTrivia: Trivia? = nil,
50+
presence: SourcePresence = .present
51+
) -> TokenSyntax {
52+
return TokenSyntax(
53+
.${token.swift_kind()},
54+
leadingTrivia: leadingTrivia ?? defaultTrivia(presence: presence, trivia: ${leading_trivia}),
55+
trailingTrivia: trailingTrivia ?? defaultTrivia(presence: presence, trivia: ${trailing_trivia}),
56+
presence: presence
57+
)
58+
}
59+
% else:
60+
public static func ${token.swift_kind()}(
61+
_ text: String,
62+
leadingTrivia: Trivia? = nil,
63+
trailingTrivia: Trivia? = nil,
64+
presence: SourcePresence = .present
65+
) -> TokenSyntax {
66+
return TokenSyntax(
67+
.${token.swift_kind()}(text),
68+
leadingTrivia: leadingTrivia ?? defaultTrivia(presence: presence, trivia: ${leading_trivia}),
69+
trailingTrivia: trailingTrivia ?? defaultTrivia(presence: presence, trivia: ${trailing_trivia}),
70+
presence: presence
71+
)
72+
}
73+
% end
74+
% end
75+
public static func eof(
76+
leadingTrivia: Trivia? = nil,
77+
presence: SourcePresence = .present
78+
) -> TokenSyntax {
79+
return TokenSyntax(
80+
.eof,
81+
leadingTrivia: leadingTrivia ?? defaultTrivia(presence: presence, trivia: ${leading_trivia}),
82+
trailingTrivia: [],
83+
presence: presence
84+
)
85+
}
86+
}

Sources/SwiftSyntax/gyb_generated/SyntaxAnyVisitor.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//// Automatically Generated From SyntaxFactory.swift.gyb.
1+
//// Automatically Generated From SyntaxAnyVisitor.swift.gyb.
22
//// Do Not Edit Directly!
33
//===--------- SyntaxAnyVisitor.swift - Syntax any visitor class ----------===//
44
//

0 commit comments

Comments
 (0)