Skip to content

Commit cc9fc6b

Browse files
committed
Fix a parser bug that caused G< > to be parsed correctly but not G<>
1 parent 8bf8590 commit cc9fc6b

File tree

2 files changed

+30
-10
lines changed

2 files changed

+30
-10
lines changed

Sources/SwiftParser/Types.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -346,7 +346,7 @@ extension Parser {
346346
} else {
347347
name = missingToken(.identifier)
348348
}
349-
if self.atContextualPunctuator("<") {
349+
if self.atContextualPunctuator("<") || self.currentToken.starts(with: "<") {
350350
return (name, self.parseGenericArguments())
351351
}
352352
return (name, nil)

Tests/SwiftParserTest/VariadicGenericsTests.swift

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -531,16 +531,36 @@ final class TypeParameterPackTests: XCTestCase {
531531

532532
func testVariadicTypes() {
533533
assertParse(
534-
"""
535-
let _: G< > = G()
536-
let _: G<repeat each T> = G()
537-
let _: G<Int, repeat each T> = G()
538-
let _ = G< >.self
539-
let _ = G<repeat each T>.self
540-
let _ = G<Int, repeat each T>.self
541-
"""
534+
"let _: G< > = G()",
535+
substructure: Syntax(
536+
SimpleTypeIdentifierSyntax(
537+
name: .identifier("G"),
538+
genericArgumentClause: GenericArgumentClauseSyntax(
539+
leftAngleBracket: .leftAngleToken(trailingTrivia: .space),
540+
arguments: GenericArgumentListSyntax([]),
541+
rightAngleBracket: .rightAngleToken(trailingTrivia: .space)
542+
)
543+
)
544+
)
542545
)
543-
546+
assertParse(
547+
"let _: G<> = G()",
548+
substructure: Syntax(
549+
SimpleTypeIdentifierSyntax(
550+
name: .identifier("G"),
551+
genericArgumentClause: GenericArgumentClauseSyntax(
552+
leftAngleBracket: .leftAngleToken(trailingTrivia: .space),
553+
arguments: GenericArgumentListSyntax([]),
554+
rightAngleBracket: .rightAngleToken(trailingTrivia: .space)
555+
)
556+
)
557+
)
558+
)
559+
assertParse("let _: G<repeat each T> = G()")
560+
assertParse("let _: G<Int, repeat each T> = G()")
561+
assertParse("let _ = G< >.self")
562+
assertParse("let _ = G<repeat each T>.self")
563+
assertParse("let _ = G<Int, repeat each T>.self")
544564
}
545565

546566
func testMissingCommaInType() throws {

0 commit comments

Comments
 (0)