Skip to content

Commit 70f38e2

Browse files
committed
Update swift syntax
1 parent 013a48e commit 70f38e2

21 files changed

+195
-266
lines changed

CodeGeneration/Package.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ let package = Package(
1111
.executable(name: "generate-swiftsyntax", targets: ["generate-swiftsyntax"])
1212
],
1313
dependencies: [
14-
.package(url: "https://github.com/apple/swift-syntax.git", revision: "06de1fa52ab79fba2d540b6a62fa3c2a1e7133f5"),
14+
.package(url: "https://github.com/apple/swift-syntax.git", revision: "013a48e2312e57b7b355db25bd3ea75282ebf274"),
1515
.package(url: "https://github.com/apple/swift-argument-parser.git", .upToNextMinor(from: "1.1.4")),
1616
],
1717
targets: [

CodeGeneration/Sources/generate-swiftsyntax/KeywordFile.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,10 @@ let keywordFile = SourceFileSyntax {
4646
}
4747

4848
try! InitializerDeclSyntax("@_spi(RawSyntax) public init?(_ text: SyntaxText)") {
49-
try! SwitchStmtSyntax("switch text.count") {
49+
try! SwitchExprSyntax("switch text.count") {
5050
for (length, keywords) in keywordsByLength() {
5151
SwitchCaseSyntax("case \(raw: length):") {
52-
try! SwitchStmtSyntax("switch text") {
52+
try! SwitchExprSyntax("switch text") {
5353
for keyword in keywords {
5454
SwitchCaseSyntax(#"case "\#(raw: keyword.name)":"#) {
5555
ExprSyntax("self = .\(raw: keyword.escapedName)")
@@ -70,7 +70,7 @@ let keywordFile = SourceFileSyntax {
7070
public var isLexerClassified: Bool
7171
"""
7272
) {
73-
try! SwitchStmtSyntax("switch self") {
73+
try! SwitchExprSyntax("switch self") {
7474
for keyword in KEYWORDS {
7575
if keyword.isLexerClassified {
7676
SwitchCaseSyntax("case .\(raw: keyword.escapedName): return true")

CodeGeneration/Sources/generate-swiftsyntax/templates/basicformat/BasicFormatFile.swift

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ import Utils
1818
extension Child {
1919
var requiresLeadingSpace: Bool? {
2020
switch self.kind {
21-
case .token(choices: _, requiresLeadingSpace: let requiresLeadingSpace, requiresTrailingSpace: _):
21+
case .token(_, let requiresLeadingSpace, _):
2222
return requiresLeadingSpace
23-
case .nodeChoices(choices: let choices):
23+
case .nodeChoices(let choices):
2424
for choice in choices {
2525
if let requiresLeadingSpace = choice.requiresLeadingSpace {
2626
return requiresLeadingSpace
@@ -34,9 +34,9 @@ extension Child {
3434

3535
var requiresTrailingSpace: Bool? {
3636
switch self.kind {
37-
case .token(choices: _, requiresLeadingSpace: _, requiresTrailingSpace: let requiresTrailingSpace):
37+
case .token(choices: _, _, let requiresTrailingSpace):
3838
return requiresTrailingSpace
39-
case .nodeChoices(choices: let choices):
39+
case .nodeChoices(let choices):
4040
for choice in choices {
4141
if let requiresTrailingSpace = choice.requiresTrailingSpace {
4242
return requiresTrailingSpace
@@ -116,7 +116,7 @@ let basicFormatFile = SourceFileSyntax {
116116
)
117117

118118
try FunctionDeclSyntax("open func shouldIndent(_ keyPath: AnyKeyPath) -> Bool") {
119-
try SwitchStmtSyntax("switch keyPath") {
119+
try SwitchExprSyntax("switch keyPath") {
120120
for node in SYNTAX_NODES where !node.isBase {
121121
for child in node.children where child.isIndented {
122122
SwitchCaseSyntax("case \\\(raw: node.type.syntaxBaseName).\(raw: child.swiftName):") {
@@ -131,7 +131,7 @@ let basicFormatFile = SourceFileSyntax {
131131
}
132132

133133
try FunctionDeclSyntax("open func requiresLeadingNewline(_ keyPath: AnyKeyPath) -> Bool") {
134-
try SwitchStmtSyntax("switch keyPath") {
134+
try SwitchExprSyntax("switch keyPath") {
135135
for node in SYNTAX_NODES where !node.isBase {
136136
for child in node.children where child.requiresLeadingNewline {
137137
SwitchCaseSyntax("case \\\(raw: node.type.syntaxBaseName).\(raw: child.swiftName):") {
@@ -146,7 +146,7 @@ let basicFormatFile = SourceFileSyntax {
146146
}
147147

148148
try FunctionDeclSyntax("open func childrenSeparatedByNewline(_ node: Syntax) -> Bool") {
149-
try SwitchStmtSyntax("switch node.as(SyntaxEnum.self)") {
149+
try SwitchExprSyntax("switch node.as(SyntaxEnum.self)") {
150150
for node in SYNTAX_NODES where !node.isBase {
151151
if node.elementsSeparatedByNewline {
152152
SwitchCaseSyntax("case .\(raw: node.swiftSyntaxKind):") {
@@ -167,7 +167,7 @@ let basicFormatFile = SourceFileSyntax {
167167
open func requiresLeadingSpace(_ keyPath: AnyKeyPath) -> Bool?
168168
"""
169169
) {
170-
try SwitchStmtSyntax("switch keyPath") {
170+
try SwitchExprSyntax("switch keyPath") {
171171
for node in SYNTAX_NODES where !node.isBase {
172172
for child in node.children {
173173
if let requiresLeadingSpace = child.requiresLeadingSpace {
@@ -192,7 +192,7 @@ let basicFormatFile = SourceFileSyntax {
192192
"""
193193
)
194194

195-
try SwitchStmtSyntax("switch token.tokenKind") {
195+
try SwitchExprSyntax("switch token.tokenKind") {
196196
for token in SYNTAX_TOKENS {
197197
if token.requiresLeadingSpace {
198198
SwitchCaseSyntax("case .\(raw: token.swiftKind):") {
@@ -218,7 +218,7 @@ let basicFormatFile = SourceFileSyntax {
218218
open func requiresTrailingSpace(_ keyPath: AnyKeyPath) -> Bool?
219219
"""
220220
) {
221-
try SwitchStmtSyntax("switch keyPath") {
221+
try SwitchExprSyntax("switch keyPath") {
222222
for node in SYNTAX_NODES where !node.isBase {
223223
for child in node.children {
224224
if let requiresTrailingSpace = child.requiresTrailingSpace {
@@ -262,7 +262,7 @@ let basicFormatFile = SourceFileSyntax {
262262
"""
263263
)
264264

265-
try SwitchStmtSyntax("switch token.tokenKind") {
265+
try SwitchExprSyntax("switch token.tokenKind") {
266266
for token in SYNTAX_TOKENS {
267267
if token.requiresTrailingSpace {
268268
SwitchCaseSyntax("case .\(raw: token.swiftKind):") {

CodeGeneration/Sources/generate-swiftsyntax/templates/ideutils/SyntaxClassificationFile.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,13 +63,13 @@ let syntaxClassificationFile = SourceFileSyntax {
6363
) -> (SyntaxClassification, Bool)?
6464
"""
6565
) {
66-
try IfStmtSyntax(
66+
try IfExprSyntax(
6767
"""
6868
// Separate checks for token nodes (most common checks) versus checks for layout nodes.
6969
if childKind == .token
7070
"""
7171
) {
72-
try SwitchStmtSyntax("switch (parentKind, indexInParent)") {
72+
try SwitchExprSyntax("switch (parentKind, indexInParent)") {
7373
for childClassification in node_child_classifications where childClassification.isToken {
7474
SwitchCaseSyntax("case (.\(raw: childClassification.parent.swiftSyntaxKind), \(raw: childClassification.childIndex)):") {
7575
StmtSyntax("return (.\(raw: childClassification.classification!.swiftName), \(raw: childClassification.force))")
@@ -79,7 +79,7 @@ let syntaxClassificationFile = SourceFileSyntax {
7979
SwitchCaseSyntax("default: return nil")
8080
}
8181
} else: {
82-
try SwitchStmtSyntax("switch (parentKind, indexInParent)") {
82+
try SwitchExprSyntax("switch (parentKind, indexInParent)") {
8383
for childClassification in node_child_classifications where !childClassification.isToken {
8484
SwitchCaseSyntax("case (.\(raw: childClassification.parent.swiftSyntaxKind), \(raw: childClassification.childIndex)):") {
8585
StmtSyntax("return (.\(raw: childClassification.classification!.swiftName), \(raw: childClassification.force))")
@@ -94,7 +94,7 @@ let syntaxClassificationFile = SourceFileSyntax {
9494

9595
try! ExtensionDeclSyntax("extension RawTokenKind") {
9696
try VariableDeclSyntax("internal var classification: SyntaxClassification") {
97-
try SwitchStmtSyntax("switch self.base") {
97+
try SwitchExprSyntax("switch self.base") {
9898
for token in SYNTAX_TOKENS {
9999
SwitchCaseSyntax("case .\(raw: token.swiftKind):") {
100100
if let classification = token.classification {

CodeGeneration/Sources/generate-swiftsyntax/templates/swiftparser/DeclarationModifierFile.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ let declarationModifierFile = SourceFileSyntax {
3030
}
3131

3232
try InitializerDeclSyntax("init?(lexeme: Lexer.Lexeme)") {
33-
try SwitchStmtSyntax("switch lexeme") {
33+
try SwitchExprSyntax("switch lexeme") {
3434
for attribute in DECL_MODIFIER_KINDS {
3535
SwitchCaseSyntax("case RawTokenKindMatch(.\(raw: attribute.swiftName)):") {
3636
ExprSyntax("self = .\(raw: attribute.swiftName)")
@@ -43,7 +43,7 @@ let declarationModifierFile = SourceFileSyntax {
4343
}
4444

4545
try VariableDeclSyntax("var rawTokenKind: RawTokenKind") {
46-
try SwitchStmtSyntax("switch self") {
46+
try SwitchExprSyntax("switch self") {
4747
for attribute in DECL_MODIFIER_KINDS {
4848
SwitchCaseSyntax("case .\(raw: attribute.swiftName):") {
4949
if attribute.swiftName.hasSuffix("Keyword") {

CodeGeneration/Sources/generate-swiftsyntax/templates/swiftparser/TypeAttributeFile.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ let typeAttributeFile = SourceFileSyntax {
3131
}
3232

3333
try InitializerDeclSyntax("init?(lexeme: Lexer.Lexeme)") {
34-
SwitchStmtSyntax(switchKeyword: .keyword(.switch), expression: ExprSyntax("lexeme")) {
34+
SwitchExprSyntax(switchKeyword: .keyword(.switch), expression: ExprSyntax("lexeme")) {
3535
for attribute in TYPE_ATTR_KINDS {
3636
SwitchCaseSyntax("case RawTokenKindMatch(.\(raw: attribute.name)):") {
3737
ExprSyntax("self = .\(raw: attribute.swiftName)")
@@ -44,7 +44,7 @@ let typeAttributeFile = SourceFileSyntax {
4444
}
4545

4646
try VariableDeclSyntax("var rawTokenKind: RawTokenKind") {
47-
SwitchStmtSyntax(switchKeyword: .keyword(.switch), expression: ExprSyntax("self")) {
47+
SwitchExprSyntax(switchKeyword: .keyword(.switch), expression: ExprSyntax("self")) {
4848
for attribute in TYPE_ATTR_KINDS {
4949
SwitchCaseSyntax("case .\(raw: attribute.swiftName):") {
5050
StmtSyntax("return .keyword(.\(raw: attribute.name))")

CodeGeneration/Sources/generate-swiftsyntax/templates/swiftsyntax/MiscFile.swift

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -23,29 +23,27 @@ let miscFile = SourceFileSyntax {
2323
"""
2424
) {
2525
try VariableDeclSyntax("public static var structure: SyntaxNodeStructure") {
26-
ReturnStmtSyntax(
27-
expression: FunctionCallExprSyntax(callee: ExprSyntax(".choices")) {
28-
TupleExprElementSyntax(
29-
expression: ArrayExprSyntax {
30-
ArrayElementSyntax(
31-
expression: ExprSyntax("\n.node(TokenSyntax.self)")
32-
)
26+
let choices = ArrayExprSyntax {
27+
ArrayElementSyntax(
28+
leadingTrivia: .newline,
29+
expression: ExprSyntax(".node(TokenSyntax.self)")
30+
)
3331

34-
for node in NON_BASE_SYNTAX_NODES {
35-
ArrayElementSyntax(
36-
expression: ExprSyntax("\n.node(\(raw: node.name).self)")
37-
)
38-
}
39-
}
32+
for node in NON_BASE_SYNTAX_NODES {
33+
ArrayElementSyntax(
34+
leadingTrivia: .newline,
35+
expression: ExprSyntax(".node(\(raw: node.name).self)")
4036
)
4137
}
42-
)
38+
}
39+
40+
StmtSyntax("return .choices(\(choices))")
4341
}
4442
}
4543

4644
try! ExtensionDeclSyntax("extension SyntaxKind") {
4745
try VariableDeclSyntax("public var syntaxNodeType: SyntaxProtocol.Type") {
48-
try SwitchStmtSyntax("switch self") {
46+
try SwitchExprSyntax("switch self") {
4947
SwitchCaseSyntax("case .token:") {
5048
StmtSyntax("return TokenSyntax.self")
5149
}
@@ -59,7 +57,7 @@ let miscFile = SourceFileSyntax {
5957
}
6058

6159
try VariableDeclSyntax("public var nameForDiagnostics: String?") {
62-
try SwitchStmtSyntax("switch self") {
60+
try SwitchExprSyntax("switch self") {
6361
SwitchCaseSyntax("case .token:") {
6462
StmtSyntax(#"return "token""#)
6563
}

CodeGeneration/Sources/generate-swiftsyntax/templates/swiftsyntax/SyntaxBaseNodesFile.swift

Lines changed: 12 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -104,19 +104,15 @@ let syntaxBaseNodesFile = SourceFileSyntax(leadingTrivia: [.blockComment(generat
104104
)
105105

106106
try InitializerDeclSyntax("public init?<S: SyntaxProtocol>(_ node: S)") {
107-
try SwitchStmtSyntax("switch node.raw.kind") {
107+
try SwitchExprSyntax("switch node.raw.kind") {
108108
SwitchCaseListSyntax {
109109
SwitchCaseSyntax(
110110
label: .case(
111111
SwitchCaseLabelSyntax {
112112
for childNode in SYNTAX_NODES where childNode.baseKind == node.syntaxKind {
113113
CaseItemSyntax(
114114
pattern: ExpressionPatternSyntax(
115-
expression: MemberAccessExprSyntax(
116-
base: nil,
117-
dot: .periodToken(),
118-
name: .identifier(childNode.swiftSyntaxKind)
119-
)
115+
expression: ExprSyntax(".\(raw: childNode.swiftSyntaxKind)")
120116
)
121117
)
122118
}
@@ -148,20 +144,14 @@ let syntaxBaseNodesFile = SourceFileSyntax(leadingTrivia: [.blockComment(generat
148144
condition: ExprSyntax("DEBUG"),
149145
elements: IfConfigClauseSyntax.Elements.statements(
150146
CodeBlockItemListSyntax {
151-
SwitchStmtSyntax(
152-
expression: ExprSyntax("data.raw.kind")
153-
) {
147+
try! SwitchExprSyntax("switch data.raw.kind") {
154148
SwitchCaseSyntax(
155149
label: .case(
156150
SwitchCaseLabelSyntax {
157151
for childNode in SYNTAX_NODES where childNode.baseKind == node.syntaxKind {
158152
CaseItemSyntax(
159153
pattern: ExpressionPatternSyntax(
160-
expression: MemberAccessExprSyntax(
161-
base: nil,
162-
dot: .periodToken(),
163-
name: .identifier(childNode.swiftSyntaxKind)
164-
)
154+
expression: ExprSyntax(".\(raw: childNode.swiftSyntaxKind)")
165155
)
166156
)
167157
}
@@ -231,21 +221,16 @@ let syntaxBaseNodesFile = SourceFileSyntax(leadingTrivia: [.blockComment(generat
231221
)
232222

233223
try VariableDeclSyntax("public static var structure: SyntaxNodeStructure") {
234-
ReturnStmtSyntax(
235-
expression: FunctionCallExprSyntax(
236-
callee: ExprSyntax(".choices")
237-
) {
238-
TupleExprElementSyntax(
239-
expression: ArrayExprSyntax {
240-
for childNode in SYNTAX_NODES where childNode.baseKind == node.syntaxKind {
241-
ArrayElementSyntax(
242-
expression: ExprSyntax("\n.node(\(raw: childNode.name).self)")
243-
)
244-
}
245-
}
224+
let choices = ArrayExprSyntax {
225+
for childNode in SYNTAX_NODES where childNode.baseKind == node.syntaxKind {
226+
ArrayElementSyntax(
227+
leadingTrivia: .newline,
228+
expression: ExprSyntax(".node(\(raw: childNode.name).self)")
246229
)
247230
}
248-
)
231+
}
232+
233+
StmtSyntax("return .choices(\(choices))")
249234
}
250235

251236
DeclSyntax(
@@ -268,6 +253,5 @@ let syntaxBaseNodesFile = SourceFileSyntax(leadingTrivia: [.blockComment(generat
268253
}
269254
"""
270255
)
271-
272256
}
273257
}

CodeGeneration/Sources/generate-swiftsyntax/templates/swiftsyntax/SyntaxCollectionsFile.swift

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ let syntaxCollectionsFile = SourceFileSyntax(leadingTrivia: [.blockComment(gener
6464
}
6565

6666
try VariableDeclSyntax("public var _syntaxNode: Syntax") {
67-
SwitchStmtSyntax(switchKeyword: .keyword(.switch), expression: ExprSyntax("self")) {
67+
SwitchExprSyntax(switchKeyword: .keyword(.switch), expression: ExprSyntax("self")) {
6868
for choiceName in node.collectionElementChoices ?? [] {
6969
let choice = SYNTAX_NODE_MAP[choiceName]!
7070
SwitchCaseSyntax("case .\(raw: choice.swiftSyntaxKind)(let node):") {
@@ -115,22 +115,17 @@ let syntaxCollectionsFile = SourceFileSyntax(leadingTrivia: [.blockComment(gener
115115
}
116116

117117
try VariableDeclSyntax("public static var structure: SyntaxNodeStructure") {
118-
ReturnStmtSyntax(
119-
expression: FunctionCallExprSyntax(
120-
callee: ExprSyntax(".choices")
121-
) {
122-
TupleExprElementSyntax(
123-
expression: ArrayExprSyntax {
124-
for choiceName in node.collectionElementChoices ?? [] {
125-
let choice = SYNTAX_NODE_MAP[choiceName]!
126-
ArrayElementSyntax(
127-
expression: ExprSyntax("\n.node(\(raw: choice.name).self)")
128-
)
129-
}
130-
}
118+
let choices = ArrayExprSyntax {
119+
for choiceName in node.collectionElementChoices ?? [] {
120+
let choice = SYNTAX_NODE_MAP[choiceName]!
121+
ArrayElementSyntax(
122+
leadingTrivia: .newline,
123+
expression: ExprSyntax(".node(\(raw: choice.name).self)")
131124
)
132125
}
133-
)
126+
}
127+
128+
StmtSyntax("return .choices(\(choices))")
134129
}
135130
}
136131
} else {

CodeGeneration/Sources/generate-swiftsyntax/templates/swiftsyntax/SyntaxEnumFile.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ let syntaxEnumFile = SourceFileSyntax(leadingTrivia: .docLineComment(generateCop
4040
func `as`(_: SyntaxEnum.Type) -> SyntaxEnum
4141
"""
4242
) {
43-
try SwitchStmtSyntax("switch raw.kind") {
43+
try SwitchExprSyntax("switch raw.kind") {
4444
SwitchCaseSyntax("case .token:") {
4545
StmtSyntax("return .token(TokenSyntax(self)!)")
4646
}

CodeGeneration/Sources/generate-swiftsyntax/templates/swiftsyntax/SyntaxKindFile.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ let syntaxKindFile = SourceFileSyntax(leadingTrivia: .docLineComment(generateCop
2929
}
3030

3131
try VariableDeclSyntax("public var isSyntaxCollection: Bool") {
32-
try SwitchStmtSyntax("switch self") {
32+
try SwitchExprSyntax("switch self") {
3333
for node in SYNTAX_NODES where node.baseKind == "SyntaxCollection" {
3434
SwitchCaseSyntax("case .\(raw: node.swiftSyntaxKind):") {
3535
StmtSyntax("return true")
@@ -43,7 +43,7 @@ let syntaxKindFile = SourceFileSyntax(leadingTrivia: .docLineComment(generateCop
4343
}
4444

4545
try VariableDeclSyntax("public var isMissing: Bool") {
46-
try SwitchStmtSyntax("switch self") {
46+
try SwitchExprSyntax("switch self") {
4747
for name in SYNTAX_BASE_KINDS where !["Syntax", "SyntaxCollection"].contains(name) {
4848
SwitchCaseSyntax("case .missing\(raw: name):") {
4949
StmtSyntax("return true")

0 commit comments

Comments
 (0)