Skip to content

Commit 22347b8

Browse files
committed
Adjust closure capture syntax node.
1 parent 9869b70 commit 22347b8

File tree

13 files changed

+81
-244
lines changed

13 files changed

+81
-244
lines changed

CodeGeneration/Sources/SyntaxSupport/ExprNodes.swift

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -341,19 +341,13 @@ public let EXPR_NODES: [Node] = [
341341
),
342342
Child(
343343
name: "name",
344-
kind: .token(choices: [.token(.identifier)]),
345-
isOptional: true
344+
kind: .token(choices: [.token(.identifier)])
346345
),
347346
Child(
348-
name: "equal",
349-
deprecatedName: "assignToken",
350-
kind: .token(choices: [.token(.equal)]),
347+
name: "initializer",
348+
kind: .node(kind: .initializerClause),
351349
isOptional: true
352350
),
353-
Child(
354-
name: "expression",
355-
kind: .node(kind: .expr)
356-
),
357351
Child(
358352
name: "trailingComma",
359353
kind: .token(choices: [.token(.comma)]),

Sources/SwiftLexicalLookup/IdentifiableSyntax.swift

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,6 @@ extension ClosureShorthandParameterSyntax: IdentifiableSyntax {
3333

3434
extension ClosureCaptureSyntax: IdentifiableSyntax {
3535
@_spi(Experimental) public var identifier: TokenSyntax {
36-
/* Doesn't work with closures like:
37-
_ = { [y=1+2] in
38-
print(y)
39-
}
40-
*/
41-
expression.as(DeclReferenceExprSyntax.self)!.baseName
36+
name
4237
}
4338
}

Sources/SwiftParser/Expressions.swift

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1615,7 +1615,7 @@ extension Parser {
16151615
}
16161616

16171617
extension Parser {
1618-
mutating func parseDefaultArgument() -> RawInitializerClauseSyntax {
1618+
mutating func parseInitializerClause() -> RawInitializerClauseSyntax {
16191619
let unexpectedBeforeEq: RawUnexpectedNodesSyntax?
16201620
let eq: RawTokenSyntax
16211621
if let comparison = self.consumeIfContextualPunctuator("==") {
@@ -1704,29 +1704,28 @@ extension Parser {
17041704
let specifier = self.parseClosureCaptureSpecifiers()
17051705

17061706
// The thing being capture specified is an identifier, or as an identifier
1707-
// followed by an expression.
1707+
// followed by an initializer clause.
17081708
let unexpectedBeforeName: RawUnexpectedNodesSyntax?
1709-
let name: RawTokenSyntax?
1710-
let unexpectedBeforeEqual: RawUnexpectedNodesSyntax?
1711-
let equal: RawTokenSyntax?
1712-
let expression: RawExprSyntax
1709+
let name: RawTokenSyntax
1710+
let initializer: RawInitializerClauseSyntax?
17131711
if self.peek(isAt: .equal) {
1714-
// The name is a new declaration.
1712+
// The name is a new declaration with
1713+
// initializer clause.
17151714
(unexpectedBeforeName, name) = self.expect(
17161715
.identifier,
17171716
TokenSpec(.self, remapping: .identifier),
17181717
default: .identifier
17191718
)
1720-
(unexpectedBeforeEqual, equal) = self.expect(.equal)
1721-
expression = self.parseExpression(flavor: .basic, pattern: .none)
1719+
initializer = self.parseInitializerClause()
17221720
} else {
1723-
// This is the simple case - the identifier is both the name and
1724-
// the expression to capture.
1725-
unexpectedBeforeName = nil
1726-
name = nil
1727-
unexpectedBeforeEqual = nil
1728-
equal = nil
1729-
expression = RawExprSyntax(self.parseIdentifierExpression(flavor: .basic))
1721+
// This is the simple case - the identifier is the name and
1722+
// the initializer clause is empty.
1723+
(unexpectedBeforeName, name) = self.expect(
1724+
.identifier,
1725+
TokenSpec(.self),
1726+
default: .identifier
1727+
)
1728+
initializer = nil
17301729
}
17311730

17321731
keepGoing = self.consume(if: .comma)
@@ -1735,11 +1734,9 @@ extension Parser {
17351734
specifier: specifier,
17361735
unexpectedBeforeName,
17371736
name: name,
1738-
unexpectedBeforeEqual,
1739-
equal: equal,
1740-
expression: expression,
1737+
initializer: initializer,
17411738
trailingComma: keepGoing,
1742-
arena: self.arena
1739+
arena: arena
17431740
)
17441741
)
17451742
} while keepGoing != nil && self.hasProgressed(&loopProgress)

Sources/SwiftParser/Parameters.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ extension Parser {
129129

130130
let defaultValue: RawInitializerClauseSyntax?
131131
if self.at(.equal) || self.atContextualPunctuator("==") {
132-
defaultValue = self.parseDefaultArgument()
132+
defaultValue = self.parseInitializerClause()
133133
} else {
134134
defaultValue = nil
135135
}
@@ -234,7 +234,7 @@ extension Parser {
234234

235235
let defaultValue: RawInitializerClauseSyntax?
236236
if self.at(.equal) || self.atContextualPunctuator("==") {
237-
defaultValue = self.parseDefaultArgument()
237+
defaultValue = self.parseInitializerClause()
238238
} else {
239239
defaultValue = nil
240240
}

Sources/SwiftSyntax/Convenience.swift

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -10,33 +10,6 @@
1010
//
1111
//===----------------------------------------------------------------------===//
1212

13-
extension ClosureCaptureSyntax {
14-
15-
/// Creates a ``ClosureCaptureSyntax`` with a `name`, and automatically adds an `equal` token to it since the name is non-optional.
16-
///
17-
/// - SeeAlso: ``ClosureCaptureSyntax/init(leadingTrivia:_:specifier:_:name:_:equal:_:expression:_:trailingComma:_:trailingTrivia:)``.
18-
///
19-
public init(
20-
leadingTrivia: Trivia? = nil,
21-
specifier: ClosureCaptureSpecifierSyntax? = nil,
22-
name: TokenSyntax,
23-
equal: TokenSyntax = TokenSyntax.equalToken(),
24-
expression: some ExprSyntaxProtocol,
25-
trailingComma: TokenSyntax? = nil,
26-
trailingTrivia: Trivia? = nil
27-
) {
28-
self.init(
29-
leadingTrivia: leadingTrivia,
30-
specifier: specifier,
31-
name: name as TokenSyntax?,
32-
equal: equal,
33-
expression: expression,
34-
trailingComma: trailingComma,
35-
trailingTrivia: trailingTrivia
36-
)
37-
}
38-
}
39-
4013
extension EnumCaseParameterSyntax {
4114

4215
/// Creates an ``EnumCaseParameterSyntax`` with a `firstName`, and automatically adds a `colon` to it.

Sources/SwiftSyntax/generated/ChildNameForKeyPath.swift

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -499,16 +499,12 @@ public func childName(_ keyPath: AnyKeyPath) -> String? {
499499
return "unexpectedBetweenSpecifierAndName"
500500
case \ClosureCaptureSyntax.name:
501501
return "name"
502-
case \ClosureCaptureSyntax.unexpectedBetweenNameAndEqual:
503-
return "unexpectedBetweenNameAndEqual"
504-
case \ClosureCaptureSyntax.equal:
505-
return "equal"
506-
case \ClosureCaptureSyntax.unexpectedBetweenEqualAndExpression:
507-
return "unexpectedBetweenEqualAndExpression"
508-
case \ClosureCaptureSyntax.expression:
509-
return "expression"
510-
case \ClosureCaptureSyntax.unexpectedBetweenExpressionAndTrailingComma:
511-
return "unexpectedBetweenExpressionAndTrailingComma"
502+
case \ClosureCaptureSyntax.unexpectedBetweenNameAndInitializer:
503+
return "unexpectedBetweenNameAndInitializer"
504+
case \ClosureCaptureSyntax.initializer:
505+
return "initializer"
506+
case \ClosureCaptureSyntax.unexpectedBetweenInitializerAndTrailingComma:
507+
return "unexpectedBetweenInitializerAndTrailingComma"
512508
case \ClosureCaptureSyntax.trailingComma:
513509
return "trailingComma"
514510
case \ClosureCaptureSyntax.unexpectedAfterTrailingComma:

Sources/SwiftSyntax/generated/RenamedChildrenCompatibility.swift

Lines changed: 0 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1167,73 +1167,6 @@ extension ClassDeclSyntax {
11671167
}
11681168
}
11691169

1170-
extension ClosureCaptureSyntax {
1171-
@available(*, deprecated, renamed: "unexpectedBetweenNameAndEqual")
1172-
public var unexpectedBetweenNameAndAssignToken: UnexpectedNodesSyntax? {
1173-
get {
1174-
return unexpectedBetweenNameAndEqual
1175-
}
1176-
set {
1177-
unexpectedBetweenNameAndEqual = newValue
1178-
}
1179-
}
1180-
1181-
@available(*, deprecated, renamed: "equal")
1182-
public var assignToken: TokenSyntax? {
1183-
get {
1184-
return equal
1185-
}
1186-
set {
1187-
equal = newValue
1188-
}
1189-
}
1190-
1191-
@available(*, deprecated, renamed: "unexpectedBetweenEqualAndExpression")
1192-
public var unexpectedBetweenAssignTokenAndExpression: UnexpectedNodesSyntax? {
1193-
get {
1194-
return unexpectedBetweenEqualAndExpression
1195-
}
1196-
set {
1197-
unexpectedBetweenEqualAndExpression = newValue
1198-
}
1199-
}
1200-
1201-
@available(*, deprecated, renamed: "ClosureCaptureSyntax(leadingTrivia:_:specifier:_:name:_:equal:_:expression:_:trailingComma:_:trailingTrivia:)")
1202-
@_disfavoredOverload
1203-
public init(
1204-
leadingTrivia: Trivia? = nil,
1205-
_ unexpectedBeforeSpecifier: UnexpectedNodesSyntax? = nil,
1206-
specifier: ClosureCaptureSpecifierSyntax? = nil,
1207-
_ unexpectedBetweenSpecifierAndName: UnexpectedNodesSyntax? = nil,
1208-
name: TokenSyntax? = nil,
1209-
_ unexpectedBetweenNameAndAssignToken: UnexpectedNodesSyntax? = nil,
1210-
assignToken: TokenSyntax? = nil,
1211-
_ unexpectedBetweenAssignTokenAndExpression: UnexpectedNodesSyntax? = nil,
1212-
expression: some ExprSyntaxProtocol,
1213-
_ unexpectedBetweenExpressionAndTrailingComma: UnexpectedNodesSyntax? = nil,
1214-
trailingComma: TokenSyntax? = nil,
1215-
_ unexpectedAfterTrailingComma: UnexpectedNodesSyntax? = nil,
1216-
trailingTrivia: Trivia? = nil
1217-
1218-
) {
1219-
self.init(
1220-
leadingTrivia: leadingTrivia,
1221-
unexpectedBeforeSpecifier,
1222-
specifier: specifier,
1223-
unexpectedBetweenSpecifierAndName,
1224-
name: name,
1225-
unexpectedBetweenNameAndAssignToken,
1226-
equal: assignToken,
1227-
unexpectedBetweenAssignTokenAndExpression,
1228-
expression: expression,
1229-
unexpectedBetweenExpressionAndTrailingComma,
1230-
trailingComma: trailingComma,
1231-
unexpectedAfterTrailingComma,
1232-
trailingTrivia: trailingTrivia
1233-
)
1234-
}
1235-
}
1236-
12371170
extension ClosureParameterClauseSyntax {
12381171
@available(*, deprecated, renamed: "unexpectedBetweenLeftParenAndParameters")
12391172
public var unexpectedBetweenLeftParenAndParameterList: UnexpectedNodesSyntax? {

Sources/SwiftSyntax/generated/raw/RawSyntaxNodesC.swift

Lines changed: 19 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -935,30 +935,26 @@ public struct RawClosureCaptureSyntax: RawSyntaxNodeProtocol {
935935
_ unexpectedBeforeSpecifier: RawUnexpectedNodesSyntax? = nil,
936936
specifier: RawClosureCaptureSpecifierSyntax?,
937937
_ unexpectedBetweenSpecifierAndName: RawUnexpectedNodesSyntax? = nil,
938-
name: RawTokenSyntax?,
939-
_ unexpectedBetweenNameAndEqual: RawUnexpectedNodesSyntax? = nil,
940-
equal: RawTokenSyntax?,
941-
_ unexpectedBetweenEqualAndExpression: RawUnexpectedNodesSyntax? = nil,
942-
expression: RawExprSyntax,
943-
_ unexpectedBetweenExpressionAndTrailingComma: RawUnexpectedNodesSyntax? = nil,
938+
name: RawTokenSyntax,
939+
_ unexpectedBetweenNameAndInitializer: RawUnexpectedNodesSyntax? = nil,
940+
initializer: RawInitializerClauseSyntax?,
941+
_ unexpectedBetweenInitializerAndTrailingComma: RawUnexpectedNodesSyntax? = nil,
944942
trailingComma: RawTokenSyntax?,
945943
_ unexpectedAfterTrailingComma: RawUnexpectedNodesSyntax? = nil,
946944
arena: __shared SyntaxArena
947945
) {
948946
let raw = RawSyntax.makeLayout(
949-
kind: .closureCapture, uninitializedCount: 11, arena: arena) { layout in
947+
kind: .closureCapture, uninitializedCount: 9, arena: arena) { layout in
950948
layout.initialize(repeating: nil)
951949
layout[0] = unexpectedBeforeSpecifier?.raw
952950
layout[1] = specifier?.raw
953951
layout[2] = unexpectedBetweenSpecifierAndName?.raw
954-
layout[3] = name?.raw
955-
layout[4] = unexpectedBetweenNameAndEqual?.raw
956-
layout[5] = equal?.raw
957-
layout[6] = unexpectedBetweenEqualAndExpression?.raw
958-
layout[7] = expression.raw
959-
layout[8] = unexpectedBetweenExpressionAndTrailingComma?.raw
960-
layout[9] = trailingComma?.raw
961-
layout[10] = unexpectedAfterTrailingComma?.raw
952+
layout[3] = name.raw
953+
layout[4] = unexpectedBetweenNameAndInitializer?.raw
954+
layout[5] = initializer?.raw
955+
layout[6] = unexpectedBetweenInitializerAndTrailingComma?.raw
956+
layout[7] = trailingComma?.raw
957+
layout[8] = unexpectedAfterTrailingComma?.raw
962958
}
963959
self.init(unchecked: raw)
964960
}
@@ -975,36 +971,28 @@ public struct RawClosureCaptureSyntax: RawSyntaxNodeProtocol {
975971
layoutView.children[2].map(RawUnexpectedNodesSyntax.init(raw:))
976972
}
977973

978-
public var name: RawTokenSyntax? {
979-
layoutView.children[3].map(RawTokenSyntax.init(raw:))
974+
public var name: RawTokenSyntax {
975+
layoutView.children[3].map(RawTokenSyntax.init(raw:))!
980976
}
981977

982-
public var unexpectedBetweenNameAndEqual: RawUnexpectedNodesSyntax? {
978+
public var unexpectedBetweenNameAndInitializer: RawUnexpectedNodesSyntax? {
983979
layoutView.children[4].map(RawUnexpectedNodesSyntax.init(raw:))
984980
}
985981

986-
public var equal: RawTokenSyntax? {
987-
layoutView.children[5].map(RawTokenSyntax.init(raw:))
982+
public var initializer: RawInitializerClauseSyntax? {
983+
layoutView.children[5].map(RawInitializerClauseSyntax.init(raw:))
988984
}
989985

990-
public var unexpectedBetweenEqualAndExpression: RawUnexpectedNodesSyntax? {
986+
public var unexpectedBetweenInitializerAndTrailingComma: RawUnexpectedNodesSyntax? {
991987
layoutView.children[6].map(RawUnexpectedNodesSyntax.init(raw:))
992988
}
993989

994-
public var expression: RawExprSyntax {
995-
layoutView.children[7].map(RawExprSyntax.init(raw:))!
996-
}
997-
998-
public var unexpectedBetweenExpressionAndTrailingComma: RawUnexpectedNodesSyntax? {
999-
layoutView.children[8].map(RawUnexpectedNodesSyntax.init(raw:))
1000-
}
1001-
1002990
public var trailingComma: RawTokenSyntax? {
1003-
layoutView.children[9].map(RawTokenSyntax.init(raw:))
991+
layoutView.children[7].map(RawTokenSyntax.init(raw:))
1004992
}
1005993

1006994
public var unexpectedAfterTrailingComma: RawUnexpectedNodesSyntax? {
1007-
layoutView.children[10].map(RawUnexpectedNodesSyntax.init(raw:))
995+
layoutView.children[8].map(RawUnexpectedNodesSyntax.init(raw:))
1008996
}
1009997
}
1010998

Sources/SwiftSyntax/generated/raw/RawSyntaxValidation.swift

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -563,18 +563,16 @@ func validateLayout(layout: RawSyntaxBuffer, as kind: SyntaxKind) {
563563
assertNoError(kind, 7, verify(layout[7], as: RawTokenSyntax?.self, tokenChoices: [.tokenKind(.rightParen)]))
564564
assertNoError(kind, 8, verify(layout[8], as: RawUnexpectedNodesSyntax?.self))
565565
case .closureCapture:
566-
assert(layout.count == 11)
566+
assert(layout.count == 9)
567567
assertNoError(kind, 0, verify(layout[0], as: RawUnexpectedNodesSyntax?.self))
568568
assertNoError(kind, 1, verify(layout[1], as: RawClosureCaptureSpecifierSyntax?.self))
569569
assertNoError(kind, 2, verify(layout[2], as: RawUnexpectedNodesSyntax?.self))
570-
assertNoError(kind, 3, verify(layout[3], as: RawTokenSyntax?.self, tokenChoices: [.tokenKind(.identifier)]))
570+
assertNoError(kind, 3, verify(layout[3], as: RawTokenSyntax.self, tokenChoices: [.tokenKind(.identifier)]))
571571
assertNoError(kind, 4, verify(layout[4], as: RawUnexpectedNodesSyntax?.self))
572-
assertNoError(kind, 5, verify(layout[5], as: RawTokenSyntax?.self, tokenChoices: [.tokenKind(.equal)]))
572+
assertNoError(kind, 5, verify(layout[5], as: RawInitializerClauseSyntax?.self))
573573
assertNoError(kind, 6, verify(layout[6], as: RawUnexpectedNodesSyntax?.self))
574-
assertNoError(kind, 7, verify(layout[7], as: RawExprSyntax.self))
574+
assertNoError(kind, 7, verify(layout[7], as: RawTokenSyntax?.self, tokenChoices: [.tokenKind(.comma)]))
575575
assertNoError(kind, 8, verify(layout[8], as: RawUnexpectedNodesSyntax?.self))
576-
assertNoError(kind, 9, verify(layout[9], as: RawTokenSyntax?.self, tokenChoices: [.tokenKind(.comma)]))
577-
assertNoError(kind, 10, verify(layout[10], as: RawUnexpectedNodesSyntax?.self))
578576
case .closureExpr:
579577
assert(layout.count == 9)
580578
assertNoError(kind, 0, verify(layout[0], as: RawUnexpectedNodesSyntax?.self))

0 commit comments

Comments
 (0)