1use crate::spec::{EnumBuilder, Node, NodesAggregator, StructBuilder};
2
3pub fn get_spec() -> Vec<Node> {
5 NodesAggregator::default()
6 .add_list("Trivia", "Trivium")
7 .add_enum(
8 EnumBuilder::new("Trivium")
9 .node_with_explicit_kind("SingleLineComment", "TokenSingleLineComment")
10 .node_with_explicit_kind("SingleLineDocComment", "TokenSingleLineDocComment")
11 .node_with_explicit_kind("SingleLineInnerComment", "TokenSingleLineInnerComment")
12 .node_with_explicit_kind("Whitespace", "TokenWhitespace")
13 .node_with_explicit_kind("Newline", "TokenNewline")
14 .node_with_explicit_kind("Skipped", "TokenSkipped")
15 .node("SkippedNode"),
16 )
17 .add_enum(EnumBuilder::new("Expr")
19 .missing("Missing")
20 .node("Path")
21 .node_with_explicit_kind("Literal", "TerminalLiteralNumber")
22 .node_with_explicit_kind("ShortString", "TerminalShortString")
23 .node_with_explicit_kind("String", "TerminalString")
24 .node_with_explicit_kind("False", "TerminalFalse")
25 .node_with_explicit_kind("True", "TerminalTrue")
26 .node("Parenthesized")
27 .node("Unary")
28 .node("Binary")
29 .node_with_explicit_kind("Tuple", "ExprListParenthesized")
30 .node("FunctionCall")
31 .node("StructCtorCall")
32 .node("Block")
33 .node("Match")
34 .node("If")
35 .node("Loop")
36 .node("While")
37 .node("For")
38 .node("Closure")
39 .node("ErrorPropagate")
40 .node("FieldInitShorthand")
41 .node("Indexed")
42 .node("InlineMacro")
43 .node("FixedSizeArray")
44 )
45 .add_separated_list("ExprList", "Expr", "TerminalComma")
46 .add_struct(StructBuilder::new("Arg")
47 .node("modifiers", "ModifierList")
48 .node("arg_clause", "ArgClause")
49 )
50 .add_enum(EnumBuilder::new("ArgClause")
51 .node("Unnamed")
52 .node("Named")
53 .node("FieldInitShorthand")
54 )
55 .add_struct(StructBuilder::new("ArgClauseNamed")
56 .node("name", "TerminalIdentifier")
57 .node("colon", "TerminalColon")
58 .node("value", "Expr")
59 )
60 .add_struct(StructBuilder::new("ArgClauseUnnamed")
61 .node("value", "Expr")
62 )
63 .add_struct(StructBuilder::new("ArgClauseFieldInitShorthand")
64 .node("colon", "TerminalColon")
65 .node("name", "ExprFieldInitShorthand")
66 )
67 .add_struct(StructBuilder::new("ExprFieldInitShorthand")
68 .node("name", "TerminalIdentifier")
69 )
70 .add_separated_list("ArgList", "Arg", "TerminalComma")
71 .add_struct(StructBuilder::new("ExprMissing"))
72 .add_enum(EnumBuilder::new("PathSegment")
73 .node("Simple")
74 .node("WithGenericArgs")
75 .missing("Missing")
76 )
77 .add_struct(StructBuilder::new("PathSegmentSimple").node("ident", "TerminalIdentifier"))
78 .add_option("TerminalColonColon")
79 .add_struct(StructBuilder::new("PathSegmentWithGenericArgs")
80 .node("ident", "TerminalIdentifier")
81 .node("separator", "OptionTerminalColonColon")
82 .node("generic_args", "GenericArgs")
83 )
84 .add_struct(StructBuilder::new("ExprPath")
85 .node("dollar", "OptionTerminalDollar")
86 .node("segments", "ExprPathInner")
87 )
88 .add_option("TerminalDollar")
89 .add_struct(StructBuilder::new("PathSegmentMissing").node("ident","TerminalIdentifier"))
92 .add_separated_list("ExprPathInner", "PathSegment", "TerminalColonColon")
93 .add_struct(StructBuilder::new("ExprParenthesized")
94 .node("lparen", "TerminalLParen")
95 .node("expr", "Expr")
96 .node("rparen", "TerminalRParen")
97 )
98 .add_struct(StructBuilder::new("ExprUnary").node("op", "UnaryOperator").node("expr", "Expr"))
99 .add_enum(EnumBuilder::new("UnaryOperator")
100 .node_with_explicit_kind("Not", "TerminalNot")
101 .node_with_explicit_kind("BitNot", "TerminalBitNot")
102 .node_with_explicit_kind("Minus", "TerminalMinus")
103 .node_with_explicit_kind("At", "TerminalAt")
104 .node_with_explicit_kind("Desnap", "TerminalMul")
105 .node_with_explicit_kind("Reference", "TerminalAnd")
106 )
107 .add_struct(StructBuilder::new("ExprBinary")
108 .node("lhs", "Expr")
109 .node("op", "BinaryOperator")
110 .node("rhs", "Expr")
111 )
112 .add_enum(EnumBuilder::new("BinaryOperator")
113 .node_with_explicit_kind("Dot", "TerminalDot")
114 .node_with_explicit_kind("Not", "TerminalNot")
115 .node_with_explicit_kind("Mul", "TerminalMul")
116 .node_with_explicit_kind("MulEq", "TerminalMulEq")
117 .node_with_explicit_kind("Div", "TerminalDiv")
118 .node_with_explicit_kind("DivEq", "TerminalDivEq")
119 .node_with_explicit_kind("Mod", "TerminalMod")
120 .node_with_explicit_kind("ModEq", "TerminalModEq")
121 .node_with_explicit_kind("Plus", "TerminalPlus")
122 .node_with_explicit_kind("PlusEq", "TerminalPlusEq")
123 .node_with_explicit_kind("Minus", "TerminalMinus")
124 .node_with_explicit_kind("MinusEq", "TerminalMinusEq")
125 .node_with_explicit_kind("EqEq", "TerminalEqEq")
126 .node_with_explicit_kind("Neq", "TerminalNeq")
127 .node_with_explicit_kind("Eq", "TerminalEq")
128 .node_with_explicit_kind("And", "TerminalAnd")
129 .node_with_explicit_kind("AndAnd", "TerminalAndAnd")
130 .node_with_explicit_kind("Or", "TerminalOr")
131 .node_with_explicit_kind("OrOr", "TerminalOrOr")
132 .node_with_explicit_kind("Xor", "TerminalXor")
133 .node_with_explicit_kind("LE", "TerminalLE")
134 .node_with_explicit_kind("GE", "TerminalGE")
135 .node_with_explicit_kind("LT", "TerminalLT")
136 .node_with_explicit_kind("GT", "TerminalGT")
137 .node_with_explicit_kind("DotDot", "TerminalDotDot")
138 .node_with_explicit_kind("DotDotEq", "TerminalDotDotEq")
139 )
140 .add_struct(StructBuilder::new("ExprListParenthesized")
141 .node("lparen", "TerminalLParen")
142 .node("expressions", "ExprList")
143 .node("rparen", "TerminalRParen")
144 )
145 .add_struct(StructBuilder::new("ExprFunctionCall")
146 .node("path", "ExprPath")
147 .node("arguments", "ArgListParenthesized")
148 )
149 .add_struct(StructBuilder::new("ArgListParenthesized")
150 .node("lparen", "TerminalLParen")
151 .node("arguments", "ArgList")
152 .node("rparen", "TerminalRParen")
153 )
154 .add_option("ArgListParenthesized")
155 .add_struct(StructBuilder::new("ExprStructCtorCall")
156 .node("path", "ExprPath")
157 .node("arguments", "StructArgListBraced")
158 )
159 .add_struct(StructBuilder::new("StructArgListBraced")
160 .node("lbrace", "TerminalLBrace")
161 .node("arguments", "StructArgList")
162 .node("rbrace", "TerminalRBrace")
163 )
164 .add_struct(StructBuilder::new("ExprBlock")
165 .node("lbrace", "TerminalLBrace")
166 .node("statements", "StatementList")
167 .node("rbrace", "TerminalRBrace")
168 )
169 .add_struct(StructBuilder::new("ExprMatch")
170 .node("match_kw", "TerminalMatch")
171 .node("expr", "Expr")
173 .node("lbrace", "TerminalLBrace")
174 .node("arms", "MatchArms")
175 .node("rbrace", "TerminalRBrace")
176 )
177 .add_separated_list("MatchArms", "MatchArm", "TerminalComma")
178 .add_struct(StructBuilder::new("MatchArm")
179 .node("patterns", "PatternListOr")
180 .node("arrow", "TerminalMatchArrow")
181 .node("expression", "Expr")
182 )
183 .add_struct(StructBuilder::new("ExprIf")
184 .node("if_kw", "TerminalIf")
185 .node("conditions", "ConditionListAnd")
186 .node("if_block", "ExprBlock")
187 .node("else_clause", "OptionElseClause")
188 )
189 .add_separated_list("ConditionListAnd", "Condition", "TerminalAndAnd")
190 .add_enum(EnumBuilder::new("Condition")
191 .node("Let")
192 .node("Expr")
193 )
194 .add_struct(StructBuilder::new("ConditionLet")
195 .node("let_kw", "TerminalLet")
196 .node("patterns", "PatternListOr")
197 .node("eq", "TerminalEq")
198 .node("expr", "Expr")
199 )
200 .add_struct(StructBuilder::new("ConditionExpr")
201 .node("expr", "Expr")
202 )
203 .add_enum(EnumBuilder::new("BlockOrIf")
204 .node_with_explicit_kind("Block", "ExprBlock")
205 .node_with_explicit_kind("If", "ExprIf")
206 )
207 .add_struct(StructBuilder::new("ExprLoop")
208 .node("loop_kw", "TerminalLoop")
209 .node("body", "ExprBlock")
210 )
211 .add_struct(StructBuilder::new("ExprWhile")
212 .node("while_kw", "TerminalWhile")
213 .node("conditions", "ConditionListAnd")
214 .node("body", "ExprBlock")
215 )
216 .add_struct(StructBuilder::new("ExprFor")
217 .node("for_kw", "TerminalFor")
218 .key_node("pattern", "Pattern")
219 .key_node("identifier", "TerminalIdentifier")
220 .node("expr", "Expr")
221 .node("body", "ExprBlock")
222 )
223 .add_struct(StructBuilder::new("ElseClause")
224 .node("else_kw", "TerminalElse")
225 .node("else_block_or_if", "BlockOrIf")
226 )
227 .add_option("ElseClause")
228 .add_struct(StructBuilder::new("ExprErrorPropagate").node("expr", "Expr").node("op", "TerminalQuestionMark"))
229 .add_struct(StructBuilder::new("ExprIndexed")
230 .node("expr", "Expr")
231 .node("lbrack", "TerminalLBrack")
232 .node("index_expr", "Expr")
233 .node("rbrack", "TerminalRBrack")
234 )
235 .add_struct(StructBuilder::new("ExprFixedSizeArray")
236 .node("lbrack", "TerminalLBrack")
237 .node("exprs", "ExprList")
238 .node("size", "OptionFixedSizeArraySize")
239 .node("rbrack", "TerminalRBrack")
240 )
241 .add_struct(StructBuilder::new("FixedSizeArraySize")
242 .node("semicolon", "TerminalSemicolon")
243 .node("size", "Expr")
244 )
245 .add_option("FixedSizeArraySize")
246 .add_struct(StructBuilder::new("ExprClosure")
247 .node("wrapper", "ClosureParamWrapper")
248 .node("ret_ty", "OptionReturnTypeClause")
249 .node("optional_no_panic", "OptionTerminalNoPanic")
250 .node("expr", "Expr")
251 )
252 .add_enum(EnumBuilder::new("ClosureParamWrapper")
253 .node_with_explicit_kind("Nullary", "TerminalOrOr")
254 .node("NAry")
255 )
256 .add_struct(StructBuilder::new("ClosureParamWrapperNAry")
257 .node("leftor","TerminalOr")
258 .node("params", "ParamList")
259 .node("rightor", "TerminalOr")
260 )
261 .add_struct(StructBuilder::new("StructArgExpr")
263 .node("colon", "TerminalColon")
264 .node("expr", "Expr")
265 )
266 .add_option("StructArgExpr")
267 .add_struct(StructBuilder::new("StructArgSingle")
268 .key_node("identifier", "TerminalIdentifier")
269 .node("arg_expr", "OptionStructArgExpr")
270 )
271 .add_struct(StructBuilder::new("StructArgTail")
272 .node("dotdot", "TerminalDotDot")
273 .node("expression", "Expr")
274 )
275 .add_enum(EnumBuilder::new("StructArg")
276 .node_with_explicit_kind("StructArgSingle", "StructArgSingle")
277 .node_with_explicit_kind("StructArgTail", "StructArgTail")
278 )
279 .add_separated_list("StructArgList", "StructArg", "TerminalComma")
280 .add_struct(StructBuilder::new("ArgListBraced")
281 .node("lbrace", "TerminalLBrace")
282 .node("arguments", "ArgList")
283 .node("rbrace", "TerminalRBrace")
284 )
285 .add_struct(StructBuilder::new("ArgListBracketed")
286 .node("lbrack", "TerminalLBrack")
287 .node("arguments", "ArgList")
288 .node("rbrack", "TerminalRBrack")
289 )
290 .add_enum(EnumBuilder::new("WrappedArgList")
291 .missing("Missing")
292 .node_with_explicit_kind("BracketedArgList", "ArgListBracketed")
293 .node_with_explicit_kind("ParenthesizedArgList", "ArgListParenthesized")
294 .node_with_explicit_kind("BracedArgList", "ArgListBraced")
295 )
296 .add_struct(StructBuilder::new("WrappedArgListMissing"))
297 .add_enum(EnumBuilder::new("Pattern")
301 .node_with_explicit_kind("Underscore", "TerminalUnderscore")
302 .node_with_explicit_kind("Literal", "TerminalLiteralNumber")
303 .node_with_explicit_kind("False", "TerminalFalse")
304 .node_with_explicit_kind("True", "TerminalTrue")
305 .node_with_explicit_kind("ShortString", "TerminalShortString")
306 .node_with_explicit_kind("String", "TerminalString")
307 .node("Identifier")
308 .node("Struct")
309 .node("Tuple")
310 .node("Enum")
311 .node("FixedSizeArray")
312 .node_with_explicit_kind("Path", "ExprPath")
313 )
314 .add_struct(StructBuilder::new("PatternIdentifier")
315 .node("modifiers", "ModifierList")
316 .key_node("name", "TerminalIdentifier")
317 )
318 .add_struct(StructBuilder::new("PatternStruct")
319 .node("path", "ExprPath")
321 .node("lbrace", "TerminalLBrace")
322 .node("params", "PatternStructParamList")
323 .node("rbrace", "TerminalRBrace")
324 )
325 .add_separated_list("PatternStructParamList", "PatternStructParam", "TerminalComma")
326 .add_struct(StructBuilder::new("PatternTuple")
327 .node("lparen", "TerminalLParen")
328 .node("patterns", "PatternList")
329 .node("rparen", "TerminalRParen")
330 )
331 .add_struct(StructBuilder::new("PatternFixedSizeArray")
332 .node("lbrack", "TerminalLBrack")
333 .node("patterns", "PatternList")
334 .node("rbrack", "TerminalRBrack"))
335 .add_separated_list("PatternList", "Pattern", "TerminalComma")
336 .add_separated_list("PatternListOr", "Pattern", "TerminalOr")
337 .add_enum(EnumBuilder::new("PatternStructParam")
338 .node_with_explicit_kind("Single", "PatternIdentifier")
339 .node("WithExpr")
340 .node_with_explicit_kind("Tail", "TerminalDotDot")
341 )
342 .add_struct(StructBuilder::new("PatternStructParamWithExpr")
343 .node("modifiers", "ModifierList")
344 .node("name", "TerminalIdentifier")
345 .node("colon", "TerminalColon")
346 .node("pattern", "Pattern")
347 )
348 .add_struct(StructBuilder::new("PatternEnum")
349 .node("path", "ExprPath")
350 .node("pattern", "OptionPatternEnumInnerPattern")
351 )
352 .add_struct(StructBuilder::new("PatternEnumInnerPattern")
353 .node("lparen", "TerminalLParen")
354 .node("pattern", "Pattern")
355 .node("rparen", "TerminalRParen")
356 )
357 .add_option("PatternEnumInnerPattern")
358 .add_struct(StructBuilder::new("TypeClause").node("colon", "TerminalColon").node("ty", "Expr"))
361 .add_option("TypeClause")
362 .add_struct(StructBuilder::new("ReturnTypeClause")
363 .node("arrow", "TerminalArrow")
364 .node("ty", "Expr")
365 )
366 .add_option("ReturnTypeClause")
367 .add_enum(EnumBuilder::new("Statement")
369 .missing("Missing")
370 .node("Let")
371 .node("Expr")
372 .node("Continue")
373 .node("Return")
374 .node("Break")
375 .node("Item")
376 )
377 .add_list("StatementList", "Statement")
378 .add_struct(StructBuilder::new("StatementMissing"))
379 .add_struct(StructBuilder::new("StatementLet")
380 .node("attributes" ,"AttributeList")
381 .node("let_kw", "TerminalLet")
382 .key_node("pattern", "Pattern")
383 .node("type_clause", "OptionTypeClause")
384 .node("eq", "TerminalEq")
385 .node("rhs", "Expr")
386 .node("let_else_clause", "OptionLetElseClause")
387 .node("semicolon", "TerminalSemicolon")
388 )
389 .add_struct(StructBuilder::new("LetElseClause")
390 .node("else_kw", "TerminalElse")
391 .node("else_block", "ExprBlock")
392 )
393 .add_option("LetElseClause")
394 .add_option("TerminalSemicolon")
395 .add_struct(StructBuilder::new("StatementExpr")
396 .node("attributes" ,"AttributeList")
397 .node("expr", "Expr")
398 .node("semicolon", "OptionTerminalSemicolon")
399 )
400 .add_struct(StructBuilder::new("StatementContinue")
401 .node("attributes" ,"AttributeList")
402 .node("continue_kw", "TerminalContinue")
403 .node("semicolon", "TerminalSemicolon")
404 )
405 .add_struct(StructBuilder::new("ExprClause")
406 .node("expr", "Expr"))
407 .add_option("ExprClause")
408 .add_struct(StructBuilder::new("StatementReturn")
409 .node("attributes" ,"AttributeList")
410 .node("return_kw", "TerminalReturn")
411 .node("expr_clause", "OptionExprClause")
412 .node("semicolon", "TerminalSemicolon")
413 )
414 .add_struct(StructBuilder::new("StatementBreak")
415 .node("attributes" ,"AttributeList")
416 .node("break_kw", "TerminalBreak")
417 .node("expr_clause", "OptionExprClause")
418 .node("semicolon", "TerminalSemicolon")
419 )
420 .add_struct(StructBuilder::new("StatementItem")
421 .node("item", "ModuleItem")
422 )
423 .add_struct(StructBuilder::new("Param")
425 .node("modifiers", "ModifierList")
426 .key_node("name", "TerminalIdentifier")
427 .node("type_clause", "OptionTypeClause")
428 )
429 .add_list("ModifierList", "Modifier")
430 .add_enum(EnumBuilder::new("Modifier")
431 .node_with_explicit_kind("Ref", "TerminalRef")
432 .node_with_explicit_kind("Mut", "TerminalMut")
433 )
434 .add_separated_list("ParamList", "Param", "TerminalComma")
435 .add_struct(StructBuilder::new("ImplicitsClause")
436 .node("implicits_kw", "TerminalImplicits")
437 .node("lparen", "TerminalLParen")
438 .node("implicits", "ImplicitsList")
439 .node("rparen", "TerminalRParen")
440 )
441 .add_separated_list("ImplicitsList", "ExprPath", "TerminalComma")
442 .add_option("ImplicitsClause")
443 .add_option("TerminalNoPanic")
444 .add_option("TerminalConst")
445 .add_struct(StructBuilder::new("FunctionSignature")
448 .node("lparen", "TerminalLParen")
449 .node("parameters", "ParamList")
450 .node("rparen", "TerminalRParen")
451 .node("ret_ty", "OptionReturnTypeClause")
452 .node("implicits_clause", "OptionImplicitsClause")
453 .node("optional_no_panic", "OptionTerminalNoPanic")
454 )
455 .add_struct(StructBuilder::new("Member")
458 .node("attributes" ,"AttributeList")
459 .node("visibility", "Visibility")
460 .key_node("name", "TerminalIdentifier")
461 .node("type_clause", "TypeClause")
462 )
463 .add_separated_list("MemberList", "Member", "TerminalComma")
464 .add_struct(StructBuilder::new("Variant")
465 .node("attributes" ,"AttributeList")
466 .key_node("name", "TerminalIdentifier")
467 .node("type_clause", "OptionTypeClause")
468 )
469 .add_separated_list("VariantList", "Variant", "TerminalComma")
470 .add_enum(EnumBuilder::new("ModuleItem")
472 .missing("Missing")
473 .node_with_explicit_kind("Constant", "ItemConstant")
474 .node_with_explicit_kind("Module", "ItemModule")
475 .node_with_explicit_kind("Use", "ItemUse")
476 .node_with_explicit_kind("FreeFunction", "FunctionWithBody")
477 .node_with_explicit_kind("ExternFunction", "ItemExternFunction")
478 .node_with_explicit_kind("ExternType", "ItemExternType")
479 .node_with_explicit_kind("Trait", "ItemTrait")
480 .node_with_explicit_kind("Impl", "ItemImpl")
481 .node_with_explicit_kind("ImplAlias", "ItemImplAlias")
482 .node_with_explicit_kind("Struct", "ItemStruct")
483 .node_with_explicit_kind("Enum", "ItemEnum")
484 .node_with_explicit_kind("TypeAlias", "ItemTypeAlias")
485 .node_with_explicit_kind("InlineMacro", "ItemInlineMacro")
486 .node_with_explicit_kind("MacroDeclaration", "ItemMacroDeclaration")
487 .node_with_explicit_kind("HeaderDoc", "ItemHeaderDoc")
488 )
489 .add_list("ModuleItemList", "ModuleItem")
490 .add_struct(StructBuilder::new("ModuleItemMissing"))
491 .add_struct(StructBuilder::new("Attribute")
492 .node("hash", "TerminalHash")
493 .node("lbrack", "TerminalLBrack")
494 .node("attr", "ExprPath")
495 .node("arguments", "OptionArgListParenthesized")
496 .node("rbrack", "TerminalRBrack")
497 )
498 .add_list("AttributeList", "Attribute")
499 .add_struct(StructBuilder::new("VisibilityDefault"))
500 .add_struct(StructBuilder::new("VisibilityPubArgumentClause")
501 .node("lparen", "TerminalLParen")
502 .node("argument", "TerminalIdentifier")
503 .node("rparen", "TerminalRParen")
504 )
505 .add_option("VisibilityPubArgumentClause")
506 .add_struct(StructBuilder::new("VisibilityPub")
507 .node("pub_kw", "TerminalPub")
508 .node("argument_clause", "OptionVisibilityPubArgumentClause")
509 )
510 .add_enum(EnumBuilder::new("Visibility")
511 .node("Default")
512 .node("Pub")
513 )
514 .add_struct(StructBuilder::new("ItemModule")
515 .node("attributes" ,"AttributeList")
516 .node("visibility", "Visibility")
517 .node("module_kw", "TerminalModule")
518 .key_node("name", "TerminalIdentifier")
519 .node("body", "MaybeModuleBody")
520 )
521 .add_enum(EnumBuilder::new("MaybeModuleBody")
522 .node_with_explicit_kind("Some", "ModuleBody")
523 .node_with_explicit_kind("None", "TerminalSemicolon")
524 )
525 .add_struct(StructBuilder::new("ModuleBody")
526 .node("lbrace", "TerminalLBrace")
527 .node("items", "ModuleItemList")
528 .node("rbrace", "TerminalRBrace")
529 )
530 .add_struct(StructBuilder::new("FunctionDeclaration")
531 .node("optional_const", "OptionTerminalConst")
532 .node("function_kw", "TerminalFunction")
533 .key_node("name", "TerminalIdentifier")
534 .node("generic_params", "OptionWrappedGenericParamList")
535 .node("signature", "FunctionSignature")
536 )
537 .add_struct(StructBuilder::new("ItemConstant")
538 .node("attributes" ,"AttributeList")
539 .node("visibility", "Visibility")
540 .node("const_kw", "TerminalConst")
541 .key_node("name", "TerminalIdentifier")
542 .node("type_clause", "TypeClause")
543 .node("eq", "TerminalEq")
544 .node("value", "Expr")
545 .node("semicolon", "TerminalSemicolon")
546 )
547 .add_struct(StructBuilder::new("FunctionWithBody")
548 .node("attributes" ,"AttributeList")
549 .node("visibility", "Visibility")
550 .key_node("declaration", "FunctionDeclaration")
552 .node("body", "ExprBlock")
553 )
554 .add_struct(StructBuilder::new("ItemExternFunction")
555 .node("attributes" ,"AttributeList")
556 .node("visibility", "Visibility")
557 .node("extern_kw", "TerminalExtern")
558 .key_node("declaration", "FunctionDeclaration")
560 .node("semicolon", "TerminalSemicolon")
561 )
562 .add_struct(StructBuilder::new("ItemExternType")
563 .node("attributes" ,"AttributeList")
564 .node("visibility", "Visibility")
565 .node("extern_kw", "TerminalExtern")
566 .node("type_kw", "TerminalType")
567 .key_node("name", "TerminalIdentifier")
568 .node("generic_params", "OptionWrappedGenericParamList")
569 .node("semicolon", "TerminalSemicolon")
570 )
571 .add_struct(StructBuilder::new("ItemTrait")
572 .node("attributes" ,"AttributeList")
573 .node("visibility", "Visibility")
574 .node("trait_kw", "TerminalTrait")
575 .key_node("name", "TerminalIdentifier")
576 .node("generic_params", "OptionWrappedGenericParamList")
577 .node("body", "MaybeTraitBody")
578 )
579 .add_enum(EnumBuilder::new("MaybeTraitBody")
580 .node_with_explicit_kind("Some", "TraitBody")
581 .node_with_explicit_kind("None", "TerminalSemicolon")
582 )
583 .add_struct(StructBuilder::new("TraitBody")
584 .node("lbrace", "TerminalLBrace")
585 .node("items", "TraitItemList")
586 .node("rbrace", "TerminalRBrace")
587 )
588 .add_list("TraitItemList", "TraitItem")
589 .add_enum(EnumBuilder::new("TraitItem")
590 .missing("Missing")
591 .node("Function")
592 .node("Type")
593 .node("Constant")
594 .node("Impl")
595 )
596 .add_struct(StructBuilder::new("TraitItemMissing"))
597 .add_struct(StructBuilder::new("TraitItemFunction")
598 .node("attributes" ,"AttributeList")
599 .key_node("declaration", "FunctionDeclaration")
601 .node("body", "MaybeTraitFunctionBody")
602 )
603 .add_struct(StructBuilder::new("TraitItemType")
604 .node("attributes" ,"AttributeList")
605 .node("type_kw", "TerminalType")
606 .key_node("name", "TerminalIdentifier")
607 .node("generic_params", "OptionWrappedGenericParamList")
608 .node("semicolon", "TerminalSemicolon")
609 )
610 .add_struct(StructBuilder::new("TraitItemConstant")
611 .node("attributes" ,"AttributeList")
612 .node("const_kw", "TerminalConst")
613 .key_node("name", "TerminalIdentifier")
614 .node("type_clause", "TypeClause")
615 .node("semicolon", "TerminalSemicolon")
616 )
617 .add_struct(StructBuilder::new("TraitItemImpl")
618 .node("attributes" ,"AttributeList")
619 .node("impl_kw", "TerminalImpl")
620 .key_node("name", "TerminalIdentifier")
621 .node("colon", "TerminalColon")
622 .node("trait_path", "ExprPath")
623 .node("semicolon", "TerminalSemicolon")
624 )
625 .add_enum(EnumBuilder::new("MaybeTraitFunctionBody")
626 .node_with_explicit_kind("Some", "ExprBlock")
627 .node_with_explicit_kind("None", "TerminalSemicolon")
628 )
629 .add_struct(StructBuilder::new("ItemImpl")
630 .node("attributes" ,"AttributeList")
631 .node("visibility", "Visibility")
632 .node("impl_kw", "TerminalImpl")
633 .key_node("name", "TerminalIdentifier")
634 .node("generic_params", "OptionWrappedGenericParamList")
635 .node("of_kw", "TerminalOf")
636 .node("trait_path", "ExprPath")
637 .node("body", "MaybeImplBody")
638 )
639 .add_struct(StructBuilder::new("ItemHeaderDoc")
643 .node("empty", "TerminalEmpty"))
644 .add_enum(EnumBuilder::new("MaybeImplBody")
645 .node_with_explicit_kind("Some", "ImplBody")
646 .node_with_explicit_kind("None", "TerminalSemicolon")
647 )
648 .add_struct(StructBuilder::new("ImplBody")
649 .node("lbrace", "TerminalLBrace")
650 .node("items", "ImplItemList")
651 .node("rbrace", "TerminalRBrace")
652 )
653 .add_list("ImplItemList", "ImplItem")
654 .add_enum(EnumBuilder::new("ImplItem")
655 .missing("Missing")
656 .node_with_explicit_kind("Function", "FunctionWithBody")
657 .node_with_explicit_kind("Type", "ItemTypeAlias")
658 .node_with_explicit_kind("Constant", "ItemConstant")
659 .node_with_explicit_kind("Impl", "ItemImplAlias")
660 .node_with_explicit_kind("Module", "ItemModule")
662 .node_with_explicit_kind("Use", "ItemUse")
663 .node_with_explicit_kind("ExternFunction", "ItemExternFunction")
664 .node_with_explicit_kind("ExternType", "ItemExternType")
665 .node_with_explicit_kind("Trait", "ItemTrait")
666 .node_with_explicit_kind("Struct", "ItemStruct")
667 .node_with_explicit_kind("Enum", "ItemEnum")
668 )
669 .add_struct(StructBuilder::new("ImplItemMissing"))
670 .add_struct(StructBuilder::new("ItemImplAlias")
671 .node("attributes" ,"AttributeList")
672 .node("visibility", "Visibility")
673 .node("impl_kw", "TerminalImpl")
674 .key_node("name", "TerminalIdentifier")
675 .node("generic_params", "OptionWrappedGenericParamList")
676 .node("eq", "TerminalEq")
677 .node("impl_path", "ExprPath")
678 .node("semicolon", "TerminalSemicolon")
679 )
680 .add_struct(StructBuilder::new("ItemStruct")
681 .node("attributes" ,"AttributeList")
682 .node("visibility", "Visibility")
683 .node("struct_kw", "TerminalStruct")
684 .key_node("name", "TerminalIdentifier")
685 .node("generic_params", "OptionWrappedGenericParamList")
686 .node("lbrace", "TerminalLBrace")
687 .node("members", "MemberList")
688 .node("rbrace", "TerminalRBrace")
689 )
690 .add_struct(StructBuilder::new("ItemEnum")
691 .node("attributes" ,"AttributeList")
692 .node("visibility", "Visibility")
693 .node("enum_kw", "TerminalEnum")
694 .key_node("name", "TerminalIdentifier")
695 .node("generic_params", "OptionWrappedGenericParamList")
696 .node("lbrace", "TerminalLBrace")
697 .node("variants", "VariantList")
698 .node("rbrace", "TerminalRBrace")
699 )
700 .add_struct(StructBuilder::new("ItemTypeAlias")
701 .node("attributes" ,"AttributeList")
702 .node("visibility", "Visibility")
703 .node("type_kw", "TerminalType")
704 .key_node("name", "TerminalIdentifier")
705 .node("generic_params", "OptionWrappedGenericParamList")
706 .node("eq", "TerminalEq")
707 .node("ty", "Expr")
708 .node("semicolon", "TerminalSemicolon")
709 )
710 .add_struct(StructBuilder::new("ItemUse")
711 .node("attributes" ,"AttributeList")
712 .node("visibility", "Visibility")
713 .node("use_kw", "TerminalUse")
714 .node("dollar", "OptionTerminalDollar")
715 .key_node("use_path", "UsePath")
716 .node("semicolon", "TerminalSemicolon")
717 )
718 .add_enum(
719 EnumBuilder::new("UsePath")
720 .node("Leaf")
721 .node("Single")
722 .node("Multi")
723 .node("Star")
724 )
725 .add_struct(StructBuilder::new("UsePathLeaf")
726 .key_node("ident", "PathSegment")
727 .key_node("alias_clause", "OptionAliasClause")
728 )
729 .add_struct(StructBuilder::new("UsePathSingle")
730 .node("ident", "PathSegment")
731 .node("colon_colon", "TerminalColonColon")
732 .node("use_path", "UsePath")
733 )
734 .add_struct(StructBuilder::new("UsePathMulti")
735 .node("lbrace", "TerminalLBrace")
736 .node("use_paths", "UsePathList")
737 .node("rbrace", "TerminalRBrace")
738 )
739 .add_struct(StructBuilder::new("UsePathStar")
740 .node("star", "TerminalMul")
741 )
742 .add_separated_list("UsePathList", "UsePath", "TerminalComma")
743 .add_struct(StructBuilder::new("AliasClause")
744 .node("as_kw", "TerminalAs")
745 .key_node("alias", "TerminalIdentifier")
746 )
747 .add_option("AliasClause")
748 .add_enum(
750 EnumBuilder::new("GenericArg")
751 .node("Unnamed")
752 .node("Named")
753 )
754 .add_struct(StructBuilder::new("GenericArgNamed")
755 .node("name", "TerminalIdentifier")
756 .node("colon", "TerminalColon")
757 .node("value", "GenericArgValue")
758 )
759 .add_struct(StructBuilder::new("GenericArgUnnamed")
760 .node("value", "GenericArgValue")
761 )
762 .add_enum(
763 EnumBuilder::new("GenericArgValue")
764 .node("Expr")
765 .node_with_explicit_kind("Underscore", "TerminalUnderscore")
766 )
767 .add_struct(StructBuilder::new("GenericArgValueExpr")
768 .node("expr", "Expr")
769 )
770 .add_struct(StructBuilder::new("GenericArgs")
771 .node("langle", "TerminalLT")
772 .node("generic_args", "GenericArgList")
773 .node("rangle", "TerminalGT")
774 )
775 .add_separated_list("GenericArgList", "GenericArg", "TerminalComma")
776 .add_struct(
777 StructBuilder::new("AssociatedItemConstraint")
778 .node("item","TerminalIdentifier")
779 .node("colon","TerminalColon")
780 .node("value","Expr")
781 )
782 .add_struct(StructBuilder::new("AssociatedItemConstraints")
783 .node("lbrack", "TerminalLBrack")
784 .node("associated_item_constraints", "AssociatedItemConstraintList")
785 .node("rbrack", "TerminalRBrack")
786 )
787 .add_separated_list("AssociatedItemConstraintList", "AssociatedItemConstraint", "TerminalComma")
788 .add_option("AssociatedItemConstraints")
789 .add_option("WrappedGenericParamList")
790 .add_struct(StructBuilder::new("WrappedGenericParamList")
791 .node("langle", "TerminalLT")
792 .node("generic_params", "GenericParamList")
793 .node("rangle", "TerminalGT")
794 )
795 .add_separated_list("GenericParamList", "GenericParam", "TerminalComma")
796 .add_enum(EnumBuilder::new("GenericParam")
798 .node("Type")
799 .node("Const")
800 .node("ImplNamed")
801 .node("ImplAnonymous")
802 .node("NegativeImpl")
803 )
804 .add_struct(StructBuilder::new("GenericParamType")
805 .key_node("name", "TerminalIdentifier")
806 )
807 .add_struct(StructBuilder::new("GenericParamConst")
808 .node("const_kw", "TerminalConst")
809 .key_node("name", "TerminalIdentifier")
810 .node("colon", "TerminalColon")
811 .node("ty", "Expr")
812 )
813 .add_struct(StructBuilder::new("GenericParamImplNamed")
814 .node("impl_kw", "TerminalImpl")
815 .key_node("name", "TerminalIdentifier")
816 .node("colon", "TerminalColon")
817 .node("trait_path", "ExprPath")
818 .node("type_constrains", "OptionAssociatedItemConstraints")
819 )
820 .add_struct(StructBuilder::new("GenericParamImplAnonymous")
821 .node("plus", "TerminalPlus")
822 .node("trait_path", "ExprPath")
823 .node("type_constrains", "OptionAssociatedItemConstraints")
824 )
825 .add_struct(StructBuilder::new("GenericParamNegativeImpl")
826 .node("minus", "TerminalMinus")
827 .node("trait_path", "ExprPath")
828 )
829 .add_list("TokenList", "TokenTree")
836 .add_struct(StructBuilder::new("TokenTreeLeaf")
837 .node("leaf", "TokenNode")
838 )
839 .add_struct(StructBuilder::new("TokenTreeNode")
840 .node("subtree", "WrappedTokenTree")
841 )
842 .add_struct(StructBuilder::new("TokenTreeRepetition")
844 .node("dollar", "TerminalDollar")
845 .node("lparen", "TerminalLParen")
846 .node("elements", "TokenList")
847 .node("rparen", "TerminalRParen")
848 .node("separator", "OptionTerminalComma")
849 .node("operator", "MacroRepetitionOperator")
850 )
851 .add_struct(StructBuilder::new("TokenTreeParam")
852 .node("dollar", "TerminalDollar")
853 .node("name", "TerminalIdentifier")
854 )
855 .add_enum(EnumBuilder::new("TokenTree")
856 .missing("Missing")
857 .node_with_explicit_kind("Token", "TokenTreeLeaf")
858 .node_with_explicit_kind("Subtree", "TokenTreeNode")
859 .node_with_explicit_kind("Repetition", "TokenTreeRepetition")
860 .node_with_explicit_kind("Param", "TokenTreeParam")
861 )
862 .add_struct(StructBuilder::new("TokenTreeMissing"))
863 .add_enum(EnumBuilder::new("WrappedTokenTree")
864 .missing("Missing")
865 .node_with_explicit_kind("Parenthesized", "ParenthesizedTokenTree")
866 .node_with_explicit_kind("Braced", "BracedTokenTree")
867 .node_with_explicit_kind("Bracketed", "BracketedTokenTree")
868 )
869 .add_struct(StructBuilder::new("WrappedTokenTreeMissing"))
870 .add_struct(StructBuilder::new("ParenthesizedTokenTree")
871 .node("lparen", "TerminalLParen")
872 .node("tokens", "TokenList")
873 .node("rparen", "TerminalRParen")
874 )
875 .add_struct(StructBuilder::new("BracedTokenTree")
876 .node("lbrace", "TerminalLBrace")
877 .node("tokens", "TokenList")
878 .node("rbrace", "TerminalRBrace")
879 )
880 .add_struct(StructBuilder::new("BracketedTokenTree")
881 .node("lbrack", "TerminalLBrack")
882 .node("tokens", "TokenList")
883 .node("rbrack", "TerminalRBrack")
884 )
885 .add_struct(StructBuilder::new("ExprInlineMacro")
886 .node("path", "ExprPath")
887 .node("bang", "TerminalNot")
888 .node("arguments", "TokenTreeNode")
889 )
890 .add_struct(StructBuilder::new("ItemInlineMacro")
891 .node("attributes" ,"AttributeList")
892 .node("path", "ExprPath")
893 .node("bang", "TerminalNot")
894 .node("arguments", "TokenTreeNode")
895 .node("semicolon", "TerminalSemicolon"))
896 .add_struct(StructBuilder::new("ItemMacroDeclaration")
897 .node("attributes" ,"AttributeList")
898 .node("visibility", "Visibility")
899 .node("macro_kw", "TerminalMacro")
900 .key_node("name", "TerminalIdentifier")
901 .node("lbrace", "TerminalLBrace")
902 .node("rules", "MacroRulesList")
903 .node("rbrace", "TerminalRBrace")
904 )
905 .add_list("MacroRulesList", "MacroRule")
906 .add_struct(StructBuilder::new("MacroRule")
907 .node("lhs", "WrappedMacro")
908 .node("fat_arrow", "TerminalMatchArrow")
909 .node("rhs", "BracedMacro")
910 .node("semicolon", "TerminalSemicolon")
911 )
912 .add_struct(StructBuilder::new("ParamKind")
913 .node("colon", "TerminalColon")
914 .node("kind", "MacroParamKind")
915 )
916 .add_option("ParamKind")
917 .add_struct(StructBuilder::new("MacroParam")
918 .node("dollar", "TerminalDollar")
919 .node("name", "TerminalIdentifier")
920 .node("kind", "OptionParamKind")
921 )
922 .add_struct(StructBuilder::new("MacroRepetition")
923 .node("dollar", "TerminalDollar")
924 .node("lparen", "TerminalLParen")
925 .node("elements", "MacroElements")
926 .node("rparen", "TerminalRParen")
927 .node("separator", "OptionTerminalComma")
929 .node("operator", "MacroRepetitionOperator")
930 )
931 .add_option("TerminalComma")
932 .add_enum(EnumBuilder::new("MacroRepetitionOperator")
933 .node_with_explicit_kind("ZeroOrOne", "TerminalQuestionMark")
934 .node_with_explicit_kind("OneOrMore", "TerminalPlus")
935 .node_with_explicit_kind("ZeroOrMore", "TerminalMul")
936 .missing("Missing")
937 )
938 .add_struct(StructBuilder::new("MacroRepetitionOperatorMissing"))
939 .add_struct(StructBuilder::new("ParamIdent")
941 .node("ident", "TerminalIdentifier")
942 )
943 .add_struct(StructBuilder::new("ParamExpr")
944 .node("expr", "TerminalIdentifier")
945 )
946 .add_enum(EnumBuilder::new("MacroParamKind")
947 .node_with_explicit_kind("Identifier", "ParamIdent")
948 .node_with_explicit_kind("Expr", "ParamExpr")
949 .missing("Missing")
950 )
951 .add_struct(StructBuilder::new("MacroParamKindMissing"))
952 .add_enum(EnumBuilder::new("MacroElement")
953 .node_with_explicit_kind("Token", "TokenTreeLeaf")
954 .node_with_explicit_kind("Param", "MacroParam")
955 .node_with_explicit_kind("Subtree", "MacroWrapper")
956 .node_with_explicit_kind("Repetition", "MacroRepetition")
957 )
958 .add_list("MacroElements", "MacroElement")
959 .add_struct(StructBuilder::new("MacroWrapper")
960 .node("subtree", "WrappedMacro")
961 )
962 .add_enum(EnumBuilder::new("WrappedMacro")
963 .node_with_explicit_kind("Parenthesized", "ParenthesizedMacro")
964 .node_with_explicit_kind("Braced", "BracedMacro")
965 .node_with_explicit_kind("Bracketed", "BracketedMacro")
966 )
967 .add_struct(StructBuilder::new("ParenthesizedMacro")
968 .node("lparen", "TerminalLParen")
969 .node("elements", "MacroElements")
970 .node("rparen", "TerminalRParen")
971 )
972 .add_struct(StructBuilder::new("BracedMacro")
973 .node("lbrace", "TerminalLBrace")
974 .node("elements", "MacroElements")
975 .node("rbrace", "TerminalRBrace")
976 )
977 .add_struct(StructBuilder::new("BracketedMacro")
978 .node("lbrack", "TerminalLBrack")
979 .node("elements", "MacroElements")
980 .node("rbrack", "TerminalRBrack")
981 )
982 .add_struct(StructBuilder::new("LegacyExprInlineMacro")
983 .node("path", "ExprPath")
984 .node("bang", "TerminalNot")
985 .node("arguments", "WrappedArgList")
986 )
987 .add_struct(StructBuilder::new("LegacyItemInlineMacro")
988 .node("attributes" ,"AttributeList")
989 .node("path", "ExprPath")
990 .node("bang", "TerminalNot")
991 .node("arguments", "WrappedArgList")
992 .node("semicolon", "TerminalSemicolon"))
993 .add_struct(StructBuilder::new("TriviumSkippedNode")
996 .node("node", "SkippedNode")
997 )
998 .add_enum(EnumBuilder::new("SkippedNode")
1000 .node_with_explicit_kind("AttributeList", "AttributeList")
1001 .node_with_explicit_kind("VisibilityPub", "VisibilityPub")
1002 .node_with_explicit_kind("ExprPath", "ExprPath")
1003 )
1004 .add_token_and_terminal("Identifier")
1006 .add_token_and_terminal("LiteralNumber")
1007 .add_token_and_terminal("ShortString")
1008 .add_token_and_terminal("String")
1009 .add_keyword_token_and_terminal("As")
1010 .add_keyword_token_and_terminal("Const")
1011 .add_keyword_token_and_terminal("Else")
1012 .add_keyword_token_and_terminal("Enum")
1013 .add_keyword_token_and_terminal("Extern")
1014 .add_keyword_token_and_terminal("False")
1015 .add_keyword_token_and_terminal("Function")
1016 .add_keyword_token_and_terminal("If")
1017 .add_keyword_token_and_terminal("While")
1018 .add_keyword_token_and_terminal("For")
1019 .add_keyword_token_and_terminal("Loop")
1020 .add_keyword_token_and_terminal("Impl")
1021 .add_keyword_token_and_terminal("Implicits")
1022 .add_keyword_token_and_terminal("Let")
1023 .add_keyword_token_and_terminal("Macro")
1024 .add_keyword_token_and_terminal("Match")
1025 .add_keyword_token_and_terminal("Module")
1026 .add_keyword_token_and_terminal("Mut")
1027 .add_keyword_token_and_terminal("NoPanic")
1028 .add_keyword_token_and_terminal("Of")
1029 .add_keyword_token_and_terminal("Ref")
1030 .add_keyword_token_and_terminal("Continue")
1031 .add_keyword_token_and_terminal("Return")
1032 .add_keyword_token_and_terminal("Break")
1033 .add_keyword_token_and_terminal("Struct")
1034 .add_keyword_token_and_terminal("Trait")
1035 .add_keyword_token_and_terminal("True")
1036 .add_keyword_token_and_terminal("Type")
1037 .add_keyword_token_and_terminal("Use")
1038 .add_keyword_token_and_terminal("Pub")
1039 .add_token_and_terminal("And")
1040 .add_token_and_terminal("AndAnd")
1041 .add_token_and_terminal("Arrow")
1042 .add_token_and_terminal("At")
1043 .add_token_and_terminal("BadCharacters")
1044 .add_token_and_terminal("Colon")
1045 .add_token_and_terminal("ColonColon")
1046 .add_token_and_terminal("Comma")
1047 .add_token_and_terminal("Div")
1048 .add_token_and_terminal("DivEq")
1049 .add_token_and_terminal("Dollar")
1050 .add_token_and_terminal("Dot")
1051 .add_token_and_terminal("DotDot")
1052 .add_token_and_terminal("DotDotEq")
1053 .add_token_and_terminal("EndOfFile")
1054 .add_token_and_terminal("Eq")
1055 .add_token_and_terminal("EqEq")
1056 .add_token_and_terminal("GE")
1057 .add_token_and_terminal("GT")
1058 .add_token_and_terminal("Hash")
1059 .add_token_and_terminal("LBrace")
1060 .add_token_and_terminal("LBrack")
1061 .add_token_and_terminal("LE")
1062 .add_token_and_terminal("LParen")
1063 .add_token_and_terminal("LT")
1064 .add_token_and_terminal("MatchArrow")
1065 .add_token_and_terminal("Minus")
1066 .add_token_and_terminal("MinusEq")
1067 .add_token_and_terminal("Mod")
1068 .add_token_and_terminal("ModEq")
1069 .add_token_and_terminal("Mul")
1070 .add_token_and_terminal("MulEq")
1071 .add_token_and_terminal("Neq")
1072 .add_token_and_terminal("Not")
1073 .add_token_and_terminal("BitNot")
1074 .add_token_and_terminal("Or")
1075 .add_token_and_terminal("OrOr")
1076 .add_token_and_terminal("Plus")
1077 .add_token_and_terminal("PlusEq")
1078 .add_token_and_terminal("QuestionMark")
1079 .add_token_and_terminal("RBrace")
1080 .add_token_and_terminal("RBrack")
1081 .add_token_and_terminal("RParen")
1082 .add_token_and_terminal("Semicolon")
1083 .add_token_and_terminal("Underscore")
1084 .add_token_and_terminal("Xor")
1085 .add_struct(StructBuilder::new("SyntaxFile")
1087 .node("items", "ModuleItemList")
1088 .node("eof", "TerminalEndOfFile")
1089 )
1090 .add_token_and_terminal("Empty")
1091 .add_token("SingleLineComment")
1092 .add_token("SingleLineInnerComment")
1093 .add_token("SingleLineDocComment")
1094 .add_token("Whitespace")
1095 .add_token("Newline")
1096 .add_token("Missing")
1097 .add_token("Skipped")
1098 .add_all_tokens_enum("TokenNode")
1099 .get()
1100}