@@ -190,75 +190,83 @@ let rawSyntaxValidationFile = try! SourceFileSyntax(leadingTrivia: copyrightHead
190
190
"""#
191
191
)
192
192
193
- try SwitchExprSyntax ( " switch kind " ) {
194
- SwitchCaseSyntax (
195
- """
196
- case .token:
197
- assertionFailure( " validateLayout for .token kind is not supported " )
198
- """
199
- )
200
-
201
- for node in NON_BASE_SYNTAX_NODES {
202
- try SwitchCaseSyntax ( " case . \( node. enumCaseCallName) : " ) {
203
- if let node = node. layoutNode {
204
- ExprSyntax ( " assert(layout.count == \( raw: node. children. count) ) " )
205
- for (index, child) in node. children. enumerated ( ) {
206
- switch child. kind {
207
- case . nodeChoices( let choices, _) :
208
- let verifiedChoices = ArrayExprSyntax {
209
- ArrayElementSyntax (
210
- leadingTrivia: . newline,
211
- expression: ExprSyntax (
212
- " verify(layout[ \( raw: index) ], as: Raw \( child. buildableType. buildable) .self) "
213
- )
193
+ for node in NON_BASE_SYNTAX_NODES {
194
+ try FunctionDeclSyntax (
195
+ " func validate \( node. kind. syntaxType) (kind: SyntaxKind, layout: RawSyntaxBuffer) "
196
+ ) {
197
+ if let node = node. layoutNode {
198
+ ExprSyntax ( " assert(layout.count == \( raw: node. children. count) ) " )
199
+ for (index, child) in node. children. enumerated ( ) {
200
+ switch child. kind {
201
+ case . nodeChoices( let choices, _) :
202
+ let verifiedChoices = ArrayExprSyntax {
203
+ ArrayElementSyntax (
204
+ leadingTrivia: . newline,
205
+ expression: ExprSyntax (
206
+ " verify(layout[ \( raw: index) ], as: Raw \( child. buildableType. buildable) .self) "
214
207
)
215
- }
208
+ )
209
+ }
216
210
217
- ExprSyntax ( " assertAnyHasNoError(kind, \( raw: index) , \( verifiedChoices) ) " )
218
- case . token( choices: let choices, requiresLeadingSpace: _, requiresTrailingSpace: _) :
219
- let choices = ArrayExprSyntax {
220
- for choice in choices {
221
- switch choice {
222
- case . keyword( let keyword) :
223
- ArrayElementSyntax ( expression: ExprSyntax ( " .keyword( \( literal: keyword. spec. name) ) " ) )
224
- case . token( let token) :
225
- ArrayElementSyntax ( expression: ExprSyntax ( " .tokenKind(. \( token. spec. memberCallName) ) " ) )
226
- }
211
+ ExprSyntax ( " assertAnyHasNoError(kind, \( raw: index) , \( verifiedChoices) ) " )
212
+ case . token( choices: let choices, requiresLeadingSpace: _, requiresTrailingSpace: _) :
213
+ let choices = ArrayExprSyntax {
214
+ for choice in choices {
215
+ switch choice {
216
+ case . keyword( let keyword) :
217
+ ArrayElementSyntax ( expression: ExprSyntax ( " .keyword( \( literal: keyword. spec. name) ) " ) )
218
+ case . token( let token) :
219
+ ArrayElementSyntax ( expression: ExprSyntax ( " .tokenKind(. \( token. spec. memberCallName) ) " ) )
227
220
}
228
221
}
229
- let verifyCall = ExprSyntax (
230
- " verify(layout[ \( raw: index) ], as: Raw \( child. buildableType. buildable) .self, tokenChoices: \( choices) ) "
231
- )
232
- ExprSyntax ( " assertNoError(kind, \( raw: index) , \( verifyCall) ) " )
233
- default :
234
- ExprSyntax (
235
- " assertNoError(kind, \( raw: index) , verify(layout[ \( raw: index) ], as: Raw \( child. buildableType. buildable) .self)) "
236
- )
237
222
}
223
+ let verifyCall = ExprSyntax (
224
+ " verify(layout[ \( raw: index) ], as: Raw \( child. buildableType. buildable) .self, tokenChoices: \( choices) ) "
225
+ )
226
+ ExprSyntax ( " assertNoError(kind, \( raw: index) , \( verifyCall) ) " )
227
+ default :
228
+ ExprSyntax (
229
+ " assertNoError(kind, \( raw: index) , verify(layout[ \( raw: index) ], as: Raw \( child. buildableType. buildable) .self)) "
230
+ )
238
231
}
239
- } else if let node = node . collectionNode {
240
- try ForStmtSyntax ( " for (index, element) in layout.enumerated() " ) {
241
- if let onlyElement = node . elementChoices . only {
242
- ExprSyntax (
243
- " assertNoError(kind, index, verify(element, as: \( onlyElement . raw . syntaxType ) .self)) "
244
- )
245
- } else {
246
- let verifiedChoices = ArrayExprSyntax {
247
- for choiceName in node . elementChoices {
248
- let choice = SYNTAX_NODE_MAP [ choiceName ] !
249
- ArrayElementSyntax (
250
- leadingTrivia : . newline ,
251
- expression : ExprSyntax ( " verify(element, as: \( choice . kind . raw . syntaxType ) .self) " )
252
- )
253
- }
232
+ }
233
+ } else if let node = node . collectionNode {
234
+ try ForStmtSyntax ( " for (index, element) in layout.enumerated() " ) {
235
+ if let onlyElement = node . elementChoices . only {
236
+ ExprSyntax (
237
+ " assertNoError(kind, index, verify(element, as: \( onlyElement . raw . syntaxType ) .self)) "
238
+ )
239
+ } else {
240
+ let verifiedChoices = ArrayExprSyntax {
241
+ for choiceName in node . elementChoices {
242
+ let choice = SYNTAX_NODE_MAP [ choiceName ] !
243
+ ArrayElementSyntax (
244
+ leadingTrivia : . newline ,
245
+ expression : ExprSyntax ( " verify(element, as: \( choice . kind . raw . syntaxType ) .self) " )
246
+ )
254
247
}
255
- ExprSyntax ( " assertAnyHasNoError(kind, index, \( verifiedChoices) ) " )
256
248
}
249
+ ExprSyntax ( " assertAnyHasNoError(kind, index, \( verifiedChoices) ) " )
257
250
}
258
251
}
259
252
}
260
253
}
261
254
}
255
+
256
+ try SwitchExprSyntax ( " switch kind " ) {
257
+ SwitchCaseSyntax (
258
+ """
259
+ case .token:
260
+ assertionFailure( " validateLayout for .token kind is not supported " )
261
+ """
262
+ )
263
+
264
+ for node in NON_BASE_SYNTAX_NODES {
265
+ SwitchCaseSyntax ( " case . \( node. enumCaseCallName) : " ) {
266
+ ExprSyntax ( " validate \( node. kind. syntaxType) (kind: kind, layout: layout) " )
267
+ }
268
+ }
269
+ }
262
270
}
263
271
)
264
272
)
0 commit comments