Skip to content

Commit 357b554

Browse files
committed
Disallow where clause in generic argument list
The where clause in the generic argument list hasn’t been supported for quite a few Swift releaeses. Don’t support it in the new parser.
1 parent 43568e9 commit 357b554

File tree

11 files changed

+90
-127
lines changed

11 files changed

+90
-127
lines changed

CodeGeneration/Sources/SyntaxSupport/gyb_generated/GenericNodes.swift

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -158,9 +158,6 @@ public let GENERIC_NODES: [Node] = [
158158
kind: .token(choices: [.token(tokenKind: "LeftAngleToken")])),
159159
Child(name: "GenericParameterList",
160160
kind: .collection(kind: "GenericParameterList", collectionElementName: "GenericParameter")),
161-
Child(name: "GenericWhereClause",
162-
kind: .node(kind: "GenericWhereClause"),
163-
isOptional: true),
164161
Child(name: "RightAngleBracket",
165162
kind: .token(choices: [.token(tokenKind: "RightAngleToken")]))
166163
]),

Sources/SwiftParser/Declarations.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -452,7 +452,6 @@ extension Parser {
452452
remainingTokens,
453453
leftAngleBracket: missingToken(.leftAngle),
454454
genericParameterList: RawGenericParameterListSyntax(elements: [], arena: self.arena),
455-
genericWhereClause: nil,
456455
rightAngleBracket: missingToken(.rightAngle),
457456
arena: self.arena
458457
)
@@ -540,7 +539,7 @@ extension Parser {
540539
return RawGenericParameterClauseSyntax(
541540
leftAngleBracket: langle,
542541
genericParameterList: parameters,
543-
genericWhereClause: whereClause,
542+
RawUnexpectedNodesSyntax([whereClause], arena: self.arena),
544543
rightAngleBracket: rangle,
545544
arena: self.arena
546545
)

Sources/SwiftRefactor/OpaqueParameterToGeneric.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,6 @@ public struct OpaqueParameterToGeneric: RefactoringProvider {
161161
newGenericParamClause = GenericParameterClauseSyntax(
162162
leftAngleBracket: .leftAngleToken(),
163163
genericParameterList: newGenericParamSyntax,
164-
genericWhereClause: nil,
165164
rightAngleBracket: .rightAngleToken()
166165
)
167166
}

Sources/SwiftSyntax/Raw/gyb_generated/RawSyntaxValidation.swift

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2290,16 +2290,14 @@ func validateLayout(layout: RawSyntaxBuffer, as kind: SyntaxKind) {
22902290
assertNoError(kind, 4, verify(layout[4], as: RawUnexpectedNodesSyntax?.self))
22912291
break
22922292
case .genericParameterClause:
2293-
assert(layout.count == 9)
2293+
assert(layout.count == 7)
22942294
assertNoError(kind, 0, verify(layout[0], as: RawUnexpectedNodesSyntax?.self))
22952295
assertNoError(kind, 1, verify(layout[1], as: RawTokenSyntax.self))
22962296
assertNoError(kind, 2, verify(layout[2], as: RawUnexpectedNodesSyntax?.self))
22972297
assertNoError(kind, 3, verify(layout[3], as: RawGenericParameterListSyntax.self))
22982298
assertNoError(kind, 4, verify(layout[4], as: RawUnexpectedNodesSyntax?.self))
2299-
assertNoError(kind, 5, verify(layout[5], as: RawGenericWhereClauseSyntax?.self))
2299+
assertNoError(kind, 5, verify(layout[5], as: RawTokenSyntax.self))
23002300
assertNoError(kind, 6, verify(layout[6], as: RawUnexpectedNodesSyntax?.self))
2301-
assertNoError(kind, 7, verify(layout[7], as: RawTokenSyntax.self))
2302-
assertNoError(kind, 8, verify(layout[8], as: RawUnexpectedNodesSyntax?.self))
23032301
break
23042302
case .conformanceRequirement:
23052303
assert(layout.count == 7)

Sources/SwiftSyntax/generated/raw/RawSyntaxNodes.swift

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -9032,25 +9032,21 @@ public struct RawGenericParameterClauseSyntax: RawSyntaxNodeProtocol {
90329032
leftAngleBracket: RawTokenSyntax,
90339033
_ unexpectedBetweenLeftAngleBracketAndGenericParameterList: RawUnexpectedNodesSyntax? = nil,
90349034
genericParameterList: RawGenericParameterListSyntax,
9035-
_ unexpectedBetweenGenericParameterListAndGenericWhereClause: RawUnexpectedNodesSyntax? = nil,
9036-
genericWhereClause: RawGenericWhereClauseSyntax?,
9037-
_ unexpectedBetweenGenericWhereClauseAndRightAngleBracket: RawUnexpectedNodesSyntax? = nil,
9035+
_ unexpectedBetweenGenericParameterListAndRightAngleBracket: RawUnexpectedNodesSyntax? = nil,
90389036
rightAngleBracket: RawTokenSyntax,
90399037
_ unexpectedAfterRightAngleBracket: RawUnexpectedNodesSyntax? = nil,
90409038
arena: __shared SyntaxArena
90419039
) {
90429040
let raw = RawSyntax.makeLayout(
9043-
kind: .genericParameterClause, uninitializedCount: 9, arena: arena) { layout in
9041+
kind: .genericParameterClause, uninitializedCount: 7, arena: arena) { layout in
90449042
layout.initialize(repeating: nil)
90459043
layout[0] = unexpectedBeforeLeftAngleBracket?.raw
90469044
layout[1] = leftAngleBracket.raw
90479045
layout[2] = unexpectedBetweenLeftAngleBracketAndGenericParameterList?.raw
90489046
layout[3] = genericParameterList.raw
9049-
layout[4] = unexpectedBetweenGenericParameterListAndGenericWhereClause?.raw
9050-
layout[5] = genericWhereClause?.raw
9051-
layout[6] = unexpectedBetweenGenericWhereClauseAndRightAngleBracket?.raw
9052-
layout[7] = rightAngleBracket.raw
9053-
layout[8] = unexpectedAfterRightAngleBracket?.raw
9047+
layout[4] = unexpectedBetweenGenericParameterListAndRightAngleBracket?.raw
9048+
layout[5] = rightAngleBracket.raw
9049+
layout[6] = unexpectedAfterRightAngleBracket?.raw
90549050
}
90559051
self.init(raw: raw)
90569052
}
@@ -9071,24 +9067,16 @@ public struct RawGenericParameterClauseSyntax: RawSyntaxNodeProtocol {
90719067
layoutView.children[3].map(RawGenericParameterListSyntax.init(raw: ))!
90729068
}
90739069

9074-
public var unexpectedBetweenGenericParameterListAndGenericWhereClause: RawUnexpectedNodesSyntax? {
9070+
public var unexpectedBetweenGenericParameterListAndRightAngleBracket: RawUnexpectedNodesSyntax? {
90759071
layoutView.children[4].map(RawUnexpectedNodesSyntax.init(raw: ))
90769072
}
90779073

9078-
public var genericWhereClause: RawGenericWhereClauseSyntax? {
9079-
layoutView.children[5].map(RawGenericWhereClauseSyntax.init(raw: ))
9080-
}
9081-
9082-
public var unexpectedBetweenGenericWhereClauseAndRightAngleBracket: RawUnexpectedNodesSyntax? {
9083-
layoutView.children[6].map(RawUnexpectedNodesSyntax.init(raw: ))
9084-
}
9085-
90869074
public var rightAngleBracket: RawTokenSyntax {
9087-
layoutView.children[7].map(RawTokenSyntax.init(raw: ))!
9075+
layoutView.children[5].map(RawTokenSyntax.init(raw: ))!
90889076
}
90899077

90909078
public var unexpectedAfterRightAngleBracket: RawUnexpectedNodesSyntax? {
9091-
layoutView.children[8].map(RawUnexpectedNodesSyntax.init(raw: ))
9079+
layoutView.children[6].map(RawUnexpectedNodesSyntax.init(raw: ))
90929080
}
90939081
}
90949082

Sources/SwiftSyntax/generated/syntaxNodes/SyntaxNodes.swift

Lines changed: 10 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -10112,9 +10112,7 @@ public struct GenericParameterClauseSyntax: SyntaxProtocol, SyntaxHashable {
1011210112
leftAngleBracket: TokenSyntax = .leftAngleToken(),
1011310113
_ unexpectedBetweenLeftAngleBracketAndGenericParameterList: UnexpectedNodesSyntax? = nil,
1011410114
genericParameterList: GenericParameterListSyntax,
10115-
_ unexpectedBetweenGenericParameterListAndGenericWhereClause: UnexpectedNodesSyntax? = nil,
10116-
genericWhereClause: GenericWhereClauseSyntax? = nil,
10117-
_ unexpectedBetweenGenericWhereClauseAndRightAngleBracket: UnexpectedNodesSyntax? = nil,
10115+
_ unexpectedBetweenGenericParameterListAndRightAngleBracket: UnexpectedNodesSyntax? = nil,
1011810116
rightAngleBracket: TokenSyntax = .rightAngleToken(),
1011910117
_ unexpectedAfterRightAngleBracket: UnexpectedNodesSyntax? = nil,
1012010118
trailingTrivia: Trivia? = nil
@@ -10127,9 +10125,7 @@ public struct GenericParameterClauseSyntax: SyntaxProtocol, SyntaxHashable {
1012710125
leftAngleBracket,
1012810126
unexpectedBetweenLeftAngleBracketAndGenericParameterList,
1012910127
genericParameterList,
10130-
unexpectedBetweenGenericParameterListAndGenericWhereClause,
10131-
genericWhereClause,
10132-
unexpectedBetweenGenericWhereClauseAndRightAngleBracket,
10128+
unexpectedBetweenGenericParameterListAndRightAngleBracket,
1013310129
rightAngleBracket,
1013410130
unexpectedAfterRightAngleBracket
1013510131
))) {(arena, _) in
@@ -10138,9 +10134,7 @@ public struct GenericParameterClauseSyntax: SyntaxProtocol, SyntaxHashable {
1013810134
leftAngleBracket.raw,
1013910135
unexpectedBetweenLeftAngleBracketAndGenericParameterList?.raw,
1014010136
genericParameterList.raw,
10141-
unexpectedBetweenGenericParameterListAndGenericWhereClause?.raw,
10142-
genericWhereClause?.raw,
10143-
unexpectedBetweenGenericWhereClauseAndRightAngleBracket?.raw,
10137+
unexpectedBetweenGenericParameterListAndRightAngleBracket?.raw,
1014410138
rightAngleBracket.raw,
1014510139
unexpectedAfterRightAngleBracket?.raw
1014610140
]
@@ -10211,7 +10205,7 @@ public struct GenericParameterClauseSyntax: SyntaxProtocol, SyntaxHashable {
1021110205
return GenericParameterClauseSyntax(newData)
1021210206
}
1021310207

10214-
public var unexpectedBetweenGenericParameterListAndGenericWhereClause: UnexpectedNodesSyntax? {
10208+
public var unexpectedBetweenGenericParameterListAndRightAngleBracket: UnexpectedNodesSyntax? {
1021510209
get {
1021610210
return data.child(at: 4, parent: Syntax(self)).map(UnexpectedNodesSyntax.init)
1021710211
}
@@ -10220,39 +10214,21 @@ public struct GenericParameterClauseSyntax: SyntaxProtocol, SyntaxHashable {
1022010214
}
1022110215
}
1022210216

10223-
public var genericWhereClause: GenericWhereClauseSyntax? {
10224-
get {
10225-
return data.child(at: 5, parent: Syntax(self)).map(GenericWhereClauseSyntax.init)
10226-
}
10227-
set(value) {
10228-
self = GenericParameterClauseSyntax(data.replacingChild(at: 5, with: value?.raw, arena: SyntaxArena()))
10229-
}
10230-
}
10231-
10232-
public var unexpectedBetweenGenericWhereClauseAndRightAngleBracket: UnexpectedNodesSyntax? {
10233-
get {
10234-
return data.child(at: 6, parent: Syntax(self)).map(UnexpectedNodesSyntax.init)
10235-
}
10236-
set(value) {
10237-
self = GenericParameterClauseSyntax(data.replacingChild(at: 6, with: value?.raw, arena: SyntaxArena()))
10238-
}
10239-
}
10240-
1024110217
public var rightAngleBracket: TokenSyntax {
1024210218
get {
10243-
return TokenSyntax(data.child(at: 7, parent: Syntax(self))!)
10219+
return TokenSyntax(data.child(at: 5, parent: Syntax(self))!)
1024410220
}
1024510221
set(value) {
10246-
self = GenericParameterClauseSyntax(data.replacingChild(at: 7, with: value.raw, arena: SyntaxArena()))
10222+
self = GenericParameterClauseSyntax(data.replacingChild(at: 5, with: value.raw, arena: SyntaxArena()))
1024710223
}
1024810224
}
1024910225

1025010226
public var unexpectedAfterRightAngleBracket: UnexpectedNodesSyntax? {
1025110227
get {
10252-
return data.child(at: 8, parent: Syntax(self)).map(UnexpectedNodesSyntax.init)
10228+
return data.child(at: 6, parent: Syntax(self)).map(UnexpectedNodesSyntax.init)
1025310229
}
1025410230
set(value) {
10255-
self = GenericParameterClauseSyntax(data.replacingChild(at: 8, with: value?.raw, arena: SyntaxArena()))
10231+
self = GenericParameterClauseSyntax(data.replacingChild(at: 6, with: value?.raw, arena: SyntaxArena()))
1025610232
}
1025710233
}
1025810234

@@ -10262,9 +10238,7 @@ public struct GenericParameterClauseSyntax: SyntaxProtocol, SyntaxHashable {
1026210238
\Self.leftAngleBracket,
1026310239
\Self.unexpectedBetweenLeftAngleBracketAndGenericParameterList,
1026410240
\Self.genericParameterList,
10265-
\Self.unexpectedBetweenGenericParameterListAndGenericWhereClause,
10266-
\Self.genericWhereClause,
10267-
\Self.unexpectedBetweenGenericWhereClauseAndRightAngleBracket,
10241+
\Self.unexpectedBetweenGenericParameterListAndRightAngleBracket,
1026810242
\Self.rightAngleBracket,
1026910243
\Self.unexpectedAfterRightAngleBracket
1027010244
])
@@ -10286,10 +10260,6 @@ public struct GenericParameterClauseSyntax: SyntaxProtocol, SyntaxHashable {
1028610260
return nil
1028710261
case 6:
1028810262
return nil
10289-
case 7:
10290-
return nil
10291-
case 8:
10292-
return nil
1029310263
default:
1029410264
fatalError("Invalid index")
1029510265
}
@@ -10303,9 +10273,7 @@ extension GenericParameterClauseSyntax: CustomReflectable {
1030310273
"leftAngleBracket": Syntax(leftAngleBracket).asProtocol(SyntaxProtocol.self),
1030410274
"unexpectedBetweenLeftAngleBracketAndGenericParameterList": unexpectedBetweenLeftAngleBracketAndGenericParameterList.map(Syntax.init)?.asProtocol(SyntaxProtocol.self) as Any ,
1030510275
"genericParameterList": Syntax(genericParameterList).asProtocol(SyntaxProtocol.self),
10306-
"unexpectedBetweenGenericParameterListAndGenericWhereClause": unexpectedBetweenGenericParameterListAndGenericWhereClause.map(Syntax.init)?.asProtocol(SyntaxProtocol.self) as Any ,
10307-
"genericWhereClause": genericWhereClause.map(Syntax.init)?.asProtocol(SyntaxProtocol.self) as Any ,
10308-
"unexpectedBetweenGenericWhereClauseAndRightAngleBracket": unexpectedBetweenGenericWhereClauseAndRightAngleBracket.map(Syntax.init)?.asProtocol(SyntaxProtocol.self) as Any ,
10276+
"unexpectedBetweenGenericParameterListAndRightAngleBracket": unexpectedBetweenGenericParameterListAndRightAngleBracket.map(Syntax.init)?.asProtocol(SyntaxProtocol.self) as Any ,
1030910277
"rightAngleBracket": Syntax(rightAngleBracket).asProtocol(SyntaxProtocol.self),
1031010278
"unexpectedAfterRightAngleBracket": unexpectedAfterRightAngleBracket.map(Syntax.init)?.asProtocol(SyntaxProtocol.self) as Any
1031110279
])

Sources/SwiftSyntaxBuilder/generated/BuildableNodes.swift

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -707,9 +707,7 @@ extension GenericParameterClauseSyntax {
707707
unexpectedBeforeLeftAngleBracket: UnexpectedNodesSyntax? = nil,
708708
leftAngleBracket: TokenSyntax = .leftAngleToken(),
709709
unexpectedBetweenLeftAngleBracketAndGenericParameterList: UnexpectedNodesSyntax? = nil,
710-
unexpectedBetweenGenericParameterListAndGenericWhereClause: UnexpectedNodesSyntax? = nil,
711-
genericWhereClause: GenericWhereClauseSyntax? = nil,
712-
unexpectedBetweenGenericWhereClauseAndRightAngleBracket: UnexpectedNodesSyntax? = nil,
710+
unexpectedBetweenGenericParameterListAndRightAngleBracket: UnexpectedNodesSyntax? = nil,
713711
rightAngleBracket: TokenSyntax = .rightAngleToken(),
714712
unexpectedAfterRightAngleBracket: UnexpectedNodesSyntax? = nil,
715713
@GenericParameterListBuilder genericParameterListBuilder: () throws -> GenericParameterListSyntax,
@@ -721,9 +719,7 @@ extension GenericParameterClauseSyntax {
721719
leftAngleBracket: leftAngleBracket,
722720
unexpectedBetweenLeftAngleBracketAndGenericParameterList,
723721
genericParameterList: genericParameterListBuilder(),
724-
unexpectedBetweenGenericParameterListAndGenericWhereClause,
725-
genericWhereClause: genericWhereClause,
726-
unexpectedBetweenGenericWhereClauseAndRightAngleBracket,
722+
unexpectedBetweenGenericParameterListAndRightAngleBracket,
727723
rightAngleBracket: rightAngleBracket,
728724
unexpectedAfterRightAngleBracket,
729725
trailingTrivia: trailingTrivia

Tests/SwiftParserTest/DeclarationTests.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -128,11 +128,11 @@ final class DeclarationTests: XCTestCase {
128128
]
129129
)
130130
AssertParse(
131-
"class B<where g1️⃣",
131+
"class B<1️⃣where g2️⃣",
132132
diagnostics: [
133-
DiagnosticSpec(message: "expected ':' or '==' to indicate a conformance or same-type requirement"),
134-
DiagnosticSpec(message: "expected '>' to end generic parameter clause"),
135-
DiagnosticSpec(message: "expected member block in class"),
133+
DiagnosticSpec(locationMarker: "1️⃣", message: "unexpected code 'where g' in generic parameter clause"),
134+
DiagnosticSpec(locationMarker: "2️⃣", message: "expected '>' to end generic parameter clause"),
135+
DiagnosticSpec(locationMarker: "2️⃣", message: "expected member block in class"),
136136
]
137137
)
138138
}

Tests/SwiftParserTest/TypeTests.swift

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,15 +158,18 @@ final class TypeTests: XCTestCase {
158158
}
159159
160160
dynamic func lazyMapCollection<C: Collection, T>(_ collection: C, body: @escaping (C.Element) -> T)
161-
-> <R: Collection where R.Element == T> R {
161+
-> <R: Collection 1️⃣where R.Element == T> R {
162162
return collection.lazy.map { body($0) }
163163
}
164164
165165
struct Boom<T: P> {
166166
var prop1: Int = 5
167167
var prop2: <U, V> (U, V) = ("hello", 5)
168168
}
169-
"""
169+
""",
170+
diagnostics: [
171+
DiagnosticSpec(message: "unexpected code 'where R.Element == T' in generic parameter clause")
172+
]
170173
)
171174
}
172175
}

0 commit comments

Comments
 (0)