@@ -24,6 +24,9 @@ protocol NominalTypeDeclarationTrait {
24
24
modifiers: RawDeclModifierListSyntax ,
25
25
_ unexpectedBeforeIntroducerKeyword: RawUnexpectedNodesSyntax ? ,
26
26
introducerKeyword: RawTokenSyntax ,
27
+ extendedType: RawTypeSyntax ? ,
28
+ _ unexpectedBeforePeriod: RawUnexpectedNodesSyntax ? ,
29
+ period: RawTokenSyntax ? ,
27
30
_ unexpectedBeforeIdentifier: RawUnexpectedNodesSyntax ? ,
28
31
name: RawTokenSyntax ,
29
32
primaryOrGenerics: PrimaryOrGenerics ? ,
@@ -42,6 +45,9 @@ extension RawProtocolDeclSyntax: NominalTypeDeclarationTrait {
42
45
modifiers: RawDeclModifierListSyntax ,
43
46
_ unexpectedBeforeIntroducerKeyword: RawUnexpectedNodesSyntax ? ,
44
47
introducerKeyword: RawTokenSyntax ,
48
+ extendedType: RawTypeSyntax ? ,
49
+ _ unexpectedBeforePeriod: RawUnexpectedNodesSyntax ? ,
50
+ period: RawTokenSyntax ? ,
45
51
_ unexpectedBeforeIdentifier: RawUnexpectedNodesSyntax ? ,
46
52
name: RawTokenSyntax ,
47
53
primaryOrGenerics: RawPrimaryAssociatedTypeClauseSyntax ? ,
@@ -55,6 +61,9 @@ extension RawProtocolDeclSyntax: NominalTypeDeclarationTrait {
55
61
modifiers: modifiers,
56
62
unexpectedBeforeIntroducerKeyword,
57
63
protocolKeyword: introducerKeyword,
64
+ extendedType: extendedType,
65
+ unexpectedBeforePeriod,
66
+ period: period,
58
67
unexpectedBeforeIdentifier,
59
68
name: name,
60
69
primaryAssociatedTypeClause: primaryOrGenerics,
@@ -76,6 +85,9 @@ extension RawClassDeclSyntax: NominalTypeDeclarationTrait {
76
85
modifiers: RawDeclModifierListSyntax ,
77
86
_ unexpectedBeforeIntroducerKeyword: RawUnexpectedNodesSyntax ? ,
78
87
introducerKeyword: RawTokenSyntax ,
88
+ extendedType: RawTypeSyntax ? ,
89
+ _ unexpectedBeforePeriod: RawUnexpectedNodesSyntax ? ,
90
+ period: RawTokenSyntax ? ,
79
91
_ unexpectedBeforeIdentifier: RawUnexpectedNodesSyntax ? ,
80
92
name: RawTokenSyntax ,
81
93
primaryOrGenerics: RawGenericParameterClauseSyntax ? ,
@@ -89,6 +101,9 @@ extension RawClassDeclSyntax: NominalTypeDeclarationTrait {
89
101
modifiers: modifiers,
90
102
unexpectedBeforeIntroducerKeyword,
91
103
classKeyword: introducerKeyword,
104
+ extendedType: extendedType,
105
+ unexpectedBeforePeriod,
106
+ period: period,
92
107
unexpectedBeforeIdentifier,
93
108
name: name,
94
109
genericParameterClause: primaryOrGenerics,
@@ -110,6 +125,9 @@ extension RawActorDeclSyntax: NominalTypeDeclarationTrait {
110
125
modifiers: RawDeclModifierListSyntax ,
111
126
_ unexpectedBeforeIntroducerKeyword: RawUnexpectedNodesSyntax ? ,
112
127
introducerKeyword: RawTokenSyntax ,
128
+ extendedType: RawTypeSyntax ? ,
129
+ _ unexpectedBeforePeriod: RawUnexpectedNodesSyntax ? ,
130
+ period: RawTokenSyntax ? ,
113
131
_ unexpectedBeforeIdentifier: RawUnexpectedNodesSyntax ? ,
114
132
name: RawTokenSyntax ,
115
133
primaryOrGenerics: RawGenericParameterClauseSyntax ? ,
@@ -123,6 +141,9 @@ extension RawActorDeclSyntax: NominalTypeDeclarationTrait {
123
141
modifiers: modifiers,
124
142
unexpectedBeforeIntroducerKeyword,
125
143
actorKeyword: introducerKeyword,
144
+ extendedType: extendedType,
145
+ unexpectedBeforePeriod,
146
+ period: period,
126
147
unexpectedBeforeIdentifier,
127
148
name: name,
128
149
genericParameterClause: primaryOrGenerics,
@@ -144,6 +165,9 @@ extension RawStructDeclSyntax: NominalTypeDeclarationTrait {
144
165
modifiers: RawDeclModifierListSyntax ,
145
166
_ unexpectedBeforeIntroducerKeyword: RawUnexpectedNodesSyntax ? ,
146
167
introducerKeyword: RawTokenSyntax ,
168
+ extendedType: RawTypeSyntax ? ,
169
+ _ unexpectedBeforePeriod: RawUnexpectedNodesSyntax ? ,
170
+ period: RawTokenSyntax ? ,
147
171
_ unexpectedBeforeIdentifier: RawUnexpectedNodesSyntax ? ,
148
172
name: RawTokenSyntax ,
149
173
primaryOrGenerics: RawGenericParameterClauseSyntax ? ,
@@ -157,6 +181,9 @@ extension RawStructDeclSyntax: NominalTypeDeclarationTrait {
157
181
modifiers: modifiers,
158
182
unexpectedBeforeIntroducerKeyword,
159
183
structKeyword: introducerKeyword,
184
+ extendedType: extendedType,
185
+ unexpectedBeforePeriod,
186
+ period: period,
160
187
unexpectedBeforeIdentifier,
161
188
name: name,
162
189
genericParameterClause: primaryOrGenerics,
@@ -178,6 +205,9 @@ extension RawEnumDeclSyntax: NominalTypeDeclarationTrait {
178
205
modifiers: RawDeclModifierListSyntax ,
179
206
_ unexpectedBeforeIntroducerKeyword: RawUnexpectedNodesSyntax ? ,
180
207
introducerKeyword: RawTokenSyntax ,
208
+ extendedType: RawTypeSyntax ? ,
209
+ _ unexpectedBeforePeriod: RawUnexpectedNodesSyntax ? ,
210
+ period: RawTokenSyntax ? ,
181
211
_ unexpectedBeforeIdentifier: RawUnexpectedNodesSyntax ? ,
182
212
name: RawTokenSyntax ,
183
213
primaryOrGenerics: RawGenericParameterClauseSyntax ? ,
@@ -191,6 +221,9 @@ extension RawEnumDeclSyntax: NominalTypeDeclarationTrait {
191
221
modifiers: modifiers,
192
222
unexpectedBeforeIntroducerKeyword,
193
223
enumKeyword: introducerKeyword,
224
+ extendedType: extendedType,
225
+ unexpectedBeforePeriod,
226
+ period: period,
194
227
unexpectedBeforeIdentifier,
195
228
name: name,
196
229
genericParameterClause: primaryOrGenerics,
@@ -214,13 +247,25 @@ extension Parser {
214
247
introucerHandle: RecoveryConsumptionHandle
215
248
) -> T where T: NominalTypeDeclarationTrait {
216
249
let ( unexpectedBeforeIntroducerKeyword, introducerKeyword) = self . eat ( introucerHandle)
250
+
251
+ var extendedType : RawTypeSyntax ? = nil
252
+ var unexpectedBeforePeriod : RawUnexpectedNodesSyntax ? = nil
253
+ var period : RawTokenSyntax ? = nil
254
+ if self . lookahead ( ) . canParseExtendedTypeForNominalTypeDecl ( ) {
255
+ extendedType = parseSimpleType ( parsingContext: . nominalTypeDeclExtendedName)
256
+ ( unexpectedBeforePeriod, period) = self . expect ( . period)
257
+ }
258
+
217
259
let ( unexpectedBeforeName, name) = self . expectIdentifier ( keywordRecovery: true )
218
260
if unexpectedBeforeName == nil && name. isMissing && self . atStartOfLine {
219
261
return T . init (
220
262
attributes: attrs. attributes,
221
263
modifiers: attrs. modifiers,
222
264
unexpectedBeforeIntroducerKeyword,
223
265
introducerKeyword: introducerKeyword,
266
+ extendedType: extendedType,
267
+ unexpectedBeforePeriod,
268
+ period: period,
224
269
unexpectedBeforeName,
225
270
name: name,
226
271
primaryOrGenerics: nil ,
@@ -264,6 +309,9 @@ extension Parser {
264
309
modifiers: attrs. modifiers,
265
310
unexpectedBeforeIntroducerKeyword,
266
311
introducerKeyword: introducerKeyword,
312
+ extendedType: extendedType,
313
+ unexpectedBeforePeriod,
314
+ period: period,
267
315
unexpectedBeforeName,
268
316
name: name,
269
317
primaryOrGenerics: primaryOrGenerics,
0 commit comments