@@ -1987,9 +1987,63 @@ extension UnresolvedPatternExprSyntax {
1987
1987
}
1988
1988
}
1989
1989
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
+
1990
2044
public struct FunctionCallExprSyntaxBuilder {
1991
2045
private var layout =
1992
- Array < RawSyntax ? > ( repeating: nil , count: 5 )
2046
+ Array < RawSyntax ? > ( repeating: nil , count: 6 )
1993
2047
1994
2048
internal init ( ) { }
1995
2049
@@ -2024,6 +2078,17 @@ public struct FunctionCallExprSyntaxBuilder {
2024
2078
layout [ idx] = node. raw
2025
2079
}
2026
2080
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
+
2027
2092
internal mutating func buildData( ) -> SyntaxData {
2028
2093
if ( layout [ 0 ] == nil ) {
2029
2094
layout [ 0 ] = RawSyntax . missing ( SyntaxKind . expr)
@@ -2056,7 +2121,7 @@ extension FunctionCallExprSyntax {
2056
2121
2057
2122
public struct SubscriptExprSyntaxBuilder {
2058
2123
private var layout =
2059
- Array < RawSyntax ? > ( repeating: nil , count: 5 )
2124
+ Array < RawSyntax ? > ( repeating: nil , count: 6 )
2060
2125
2061
2126
internal init ( ) { }
2062
2127
@@ -2091,6 +2156,17 @@ public struct SubscriptExprSyntaxBuilder {
2091
2156
layout [ idx] = node. raw
2092
2157
}
2093
2158
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
+
2094
2170
internal mutating func buildData( ) -> SyntaxData {
2095
2171
if ( layout [ 0 ] == nil ) {
2096
2172
layout [ 0 ] = RawSyntax . missing ( SyntaxKind . expr)
0 commit comments