Skip to content

Commit 9dcf987

Browse files
authored
Merge pull request #216 from rintaro/unbraced-multiple-trailing-closures
[SE-0279] Update for braceless multiple trailing closure syntax
2 parents fbfa766 + 9f68c89 commit 9dcf987

File tree

11 files changed

+742
-7
lines changed

11 files changed

+742
-7
lines changed

Sources/SwiftSyntax/gyb_generated/Misc.swift

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,18 @@ extension SyntaxNode {
357357
return UnresolvedPatternExprSyntax(asSyntaxData)
358358
}
359359

360+
public var isMultipleTrailingClosureElement: Bool { return raw.kind == .multipleTrailingClosureElement }
361+
public var asMultipleTrailingClosureElement: MultipleTrailingClosureElementSyntax? {
362+
guard isMultipleTrailingClosureElement else { return nil }
363+
return MultipleTrailingClosureElementSyntax(asSyntaxData)
364+
}
365+
366+
public var isMultipleTrailingClosureElementList: Bool { return raw.kind == .multipleTrailingClosureElementList }
367+
public var asMultipleTrailingClosureElementList: MultipleTrailingClosureElementListSyntax? {
368+
guard isMultipleTrailingClosureElementList else { return nil }
369+
return MultipleTrailingClosureElementListSyntax(asSyntaxData)
370+
}
371+
360372
public var isFunctionCallExpr: Bool { return raw.kind == .functionCallExpr }
361373
public var asFunctionCallExpr: FunctionCallExprSyntax? {
362374
guard isFunctionCallExpr else { return nil }
@@ -1553,6 +1565,10 @@ extension Syntax {
15531565
return node
15541566
case .unresolvedPatternExpr(let node):
15551567
return node
1568+
case .multipleTrailingClosureElement(let node):
1569+
return node
1570+
case .multipleTrailingClosureElementList(let node):
1571+
return node
15561572
case .functionCallExpr(let node):
15571573
return node
15581574
case .subscriptExpr(let node):
@@ -1912,6 +1928,6 @@ extension Syntax {
19121928
extension SyntaxParser {
19131929
static func verifyNodeDeclarationHash() -> Bool {
19141930
return String(cString: swiftparse_syntax_structure_versioning_identifier()!) ==
1915-
"3634919159735844058"
1931+
"3723395330444835342"
19161932
}
19171933
}

Sources/SwiftSyntax/gyb_generated/SyntaxAnyVisitor.swift

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -456,6 +456,20 @@ open class SyntaxAnyVisitor: SyntaxVisitor {
456456
override open func visitPost(_ node: UnresolvedPatternExprSyntax) {
457457
visitAnyPost(node._syntaxNode)
458458
}
459+
override open func visit(_ node: MultipleTrailingClosureElementSyntax) -> SyntaxVisitorContinueKind {
460+
return visitAny(node._syntaxNode)
461+
}
462+
463+
override open func visitPost(_ node: MultipleTrailingClosureElementSyntax) {
464+
visitAnyPost(node._syntaxNode)
465+
}
466+
override open func visit(_ node: MultipleTrailingClosureElementListSyntax) -> SyntaxVisitorContinueKind {
467+
return visitAny(node._syntaxNode)
468+
}
469+
470+
override open func visitPost(_ node: MultipleTrailingClosureElementListSyntax) {
471+
visitAnyPost(node._syntaxNode)
472+
}
459473
override open func visit(_ node: FunctionCallExprSyntax) -> SyntaxVisitorContinueKind {
460474
return visitAny(node._syntaxNode)
461475
}

Sources/SwiftSyntax/gyb_generated/SyntaxBuilders.swift

Lines changed: 78 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1987,9 +1987,63 @@ extension UnresolvedPatternExprSyntax {
19871987
}
19881988
}
19891989

1990+
public struct MultipleTrailingClosureElementSyntaxBuilder {
1991+
private var layout =
1992+
Array<RawSyntax?>(repeating: nil, count: 3)
1993+
1994+
internal init() {}
1995+
1996+
public mutating func useLabel(_ node: TokenSyntax) {
1997+
let idx = MultipleTrailingClosureElementSyntax.Cursor.label.rawValue
1998+
layout[idx] = node.raw
1999+
}
2000+
2001+
public mutating func useColon(_ node: TokenSyntax) {
2002+
let idx = MultipleTrailingClosureElementSyntax.Cursor.colon.rawValue
2003+
layout[idx] = node.raw
2004+
}
2005+
2006+
public mutating func useClosure(_ node: ClosureExprSyntax) {
2007+
let idx = MultipleTrailingClosureElementSyntax.Cursor.closure.rawValue
2008+
layout[idx] = node.raw
2009+
}
2010+
2011+
internal mutating func buildData() -> SyntaxData {
2012+
if (layout[0] == nil) {
2013+
layout[0] = RawSyntax.missingToken(TokenKind.identifier(""))
2014+
}
2015+
if (layout[1] == nil) {
2016+
layout[1] = RawSyntax.missingToken(TokenKind.colon)
2017+
}
2018+
if (layout[2] == nil) {
2019+
layout[2] = RawSyntax.missing(SyntaxKind.closureExpr)
2020+
}
2021+
2022+
return .forRoot(RawSyntax.createAndCalcLength(kind: .multipleTrailingClosureElement,
2023+
layout: layout, presence: .present))
2024+
}
2025+
}
2026+
2027+
extension MultipleTrailingClosureElementSyntax {
2028+
/// Creates a `MultipleTrailingClosureElementSyntax` using the provided build function.
2029+
/// - Parameter:
2030+
/// - build: A closure that wil be invoked in order to initialize
2031+
/// the fields of the syntax node.
2032+
/// This closure is passed a `MultipleTrailingClosureElementSyntaxBuilder` which you can use to
2033+
/// incrementally build the structure of the node.
2034+
/// - Returns: A `MultipleTrailingClosureElementSyntax` with all the fields populated in the builder
2035+
/// closure.
2036+
public init(_ build: (inout MultipleTrailingClosureElementSyntaxBuilder) -> Void) {
2037+
var builder = MultipleTrailingClosureElementSyntaxBuilder()
2038+
build(&builder)
2039+
let data = builder.buildData()
2040+
self.init(data)
2041+
}
2042+
}
2043+
19902044
public struct FunctionCallExprSyntaxBuilder {
19912045
private var layout =
1992-
Array<RawSyntax?>(repeating: nil, count: 5)
2046+
Array<RawSyntax?>(repeating: nil, count: 6)
19932047

19942048
internal init() {}
19952049

@@ -2024,6 +2078,17 @@ public struct FunctionCallExprSyntaxBuilder {
20242078
layout[idx] = node.raw
20252079
}
20262080

2081+
public mutating func addAdditionalTralingClosure(_ elt: MultipleTrailingClosureElementSyntax) {
2082+
let idx = FunctionCallExprSyntax.Cursor.additionalTrailingClosures.rawValue
2083+
if let list = layout[idx] {
2084+
layout[idx] = list.appending(elt.raw)
2085+
} else {
2086+
layout[idx] = RawSyntax.create(kind: SyntaxKind.multipleTrailingClosureElementList,
2087+
layout: [elt.raw], length: elt.raw.totalLength,
2088+
presence: SourcePresence.present)
2089+
}
2090+
}
2091+
20272092
internal mutating func buildData() -> SyntaxData {
20282093
if (layout[0] == nil) {
20292094
layout[0] = RawSyntax.missing(SyntaxKind.expr)
@@ -2056,7 +2121,7 @@ extension FunctionCallExprSyntax {
20562121

20572122
public struct SubscriptExprSyntaxBuilder {
20582123
private var layout =
2059-
Array<RawSyntax?>(repeating: nil, count: 5)
2124+
Array<RawSyntax?>(repeating: nil, count: 6)
20602125

20612126
internal init() {}
20622127

@@ -2091,6 +2156,17 @@ public struct SubscriptExprSyntaxBuilder {
20912156
layout[idx] = node.raw
20922157
}
20932158

2159+
public mutating func addAdditionalTralingClosure(_ elt: MultipleTrailingClosureElementSyntax) {
2160+
let idx = SubscriptExprSyntax.Cursor.additionalTrailingClosures.rawValue
2161+
if let list = layout[idx] {
2162+
layout[idx] = list.appending(elt.raw)
2163+
} else {
2164+
layout[idx] = RawSyntax.create(kind: SyntaxKind.multipleTrailingClosureElementList,
2165+
layout: [elt.raw], length: elt.raw.totalLength,
2166+
presence: SourcePresence.present)
2167+
}
2168+
}
2169+
20942170
internal mutating func buildData() -> SyntaxData {
20952171
if (layout[0] == nil) {
20962172
layout[0] = RawSyntax.missing(SyntaxKind.expr)

0 commit comments

Comments
 (0)