Skip to content

Commit c636838

Browse files
authored
Merge pull request #3153 from calda/cal--trailing-comma-in-tuple-in-generic-argument
Fix support for trailing commas in tuples within generic arguments
2 parents 04b3f11 + d27e1e3 commit c636838

File tree

2 files changed

+49
-1
lines changed

2 files changed

+49
-1
lines changed

Sources/SwiftParser/Types.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1025,7 +1025,8 @@ extension Parser.Lookahead {
10251025
}
10261026

10271027
self.consumeIfContextualPunctuator("...")
1028-
} while self.consume(if: .comma) != nil && self.hasProgressed(&loopProgress)
1028+
1029+
} while self.consume(if: .comma) != nil && !self.at(.rightParen) && self.hasProgressed(&loopProgress)
10291030
return self.consume(if: .rightParen) != nil
10301031
}
10311032

Tests/SwiftParserTest/ExpressionTests.swift

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2225,6 +2225,53 @@ final class ExpressionTests: ParserTestCase {
22252225
let _ = ((Int, Bool, String,) -> Void).self
22262226
"""
22272227
)
2228+
2229+
assertParse(
2230+
"""
2231+
let _ = Array<(
2232+
bar: String,
2233+
baaz: String,
2234+
)>()
2235+
""",
2236+
substructure: FunctionCallExprSyntax(
2237+
calledExpression: GenericSpecializationExprSyntax(
2238+
expression: DeclReferenceExprSyntax(baseName: .identifier("Array")),
2239+
genericArgumentClause: GenericArgumentClauseSyntax(
2240+
leftAngle: .leftAngleToken(),
2241+
arguments: GenericArgumentListSyntax([
2242+
GenericArgumentSyntax(
2243+
argument: .type(
2244+
TypeSyntax(
2245+
TupleTypeSyntax(
2246+
leftParen: .leftParenToken(),
2247+
elements: TupleTypeElementListSyntax([
2248+
TupleTypeElementSyntax(
2249+
firstName: .identifier("bar"),
2250+
colon: .colonToken(),
2251+
type: TypeSyntax(IdentifierTypeSyntax(name: .identifier("String"))),
2252+
trailingComma: .commaToken()
2253+
),
2254+
TupleTypeElementSyntax(
2255+
firstName: .identifier("baaz"),
2256+
colon: .colonToken(),
2257+
type: TypeSyntax(IdentifierTypeSyntax(name: .identifier("String"))),
2258+
trailingComma: .commaToken()
2259+
),
2260+
]),
2261+
rightParen: .rightParenToken()
2262+
)
2263+
)
2264+
)
2265+
)
2266+
]),
2267+
rightAngle: .rightAngleToken()
2268+
)
2269+
),
2270+
leftParen: .leftParenToken(),
2271+
arguments: LabeledExprListSyntax([]),
2272+
rightParen: .rightParenToken()
2273+
)
2274+
)
22282275
}
22292276

22302277
func testSecondaryArgumentLabelDollarIdentifierInClosure() {

0 commit comments

Comments
 (0)