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").missing("Simple").node("WithGenericArgs"))
73 .add_struct(StructBuilder::new("PathSegmentSimple").node("ident", "TerminalIdentifier"))
74 .add_option("TerminalColonColon")
75 .add_struct(StructBuilder::new("PathSegmentWithGenericArgs")
76 .node("ident", "TerminalIdentifier")
77 .node("separator", "OptionTerminalColonColon")
78 .node("generic_args", "GenericArgs")
79 )
80 .add_separated_list("ExprPath", "PathSegment", "TerminalColonColon")
81 .add_struct(StructBuilder::new("ExprParenthesized")
82 .node("lparen", "TerminalLParen")
83 .node("expr", "Expr")
84 .node("rparen", "TerminalRParen")
85 )
86 .add_struct(StructBuilder::new("ExprUnary").node("op", "UnaryOperator").node("expr", "Expr"))
87 .add_enum(EnumBuilder::new("UnaryOperator")
88 .node_with_explicit_kind("Not", "TerminalNot")
89 .node_with_explicit_kind("BitNot", "TerminalBitNot")
90 .node_with_explicit_kind("Minus", "TerminalMinus")
91 .node_with_explicit_kind("At", "TerminalAt")
92 .node_with_explicit_kind("Desnap", "TerminalMul")
93 )
94 .add_struct(StructBuilder::new("ExprBinary")
95 .node("lhs", "Expr")
96 .node("op", "BinaryOperator")
97 .node("rhs", "Expr")
98 )
99 .add_enum(EnumBuilder::new("BinaryOperator")
100 .node_with_explicit_kind("Dot", "TerminalDot")
101 .node_with_explicit_kind("Not", "TerminalNot")
102 .node_with_explicit_kind("Mul", "TerminalMul")
103 .node_with_explicit_kind("MulEq", "TerminalMulEq")
104 .node_with_explicit_kind("Div", "TerminalDiv")
105 .node_with_explicit_kind("DivEq", "TerminalDivEq")
106 .node_with_explicit_kind("Mod", "TerminalMod")
107 .node_with_explicit_kind("ModEq", "TerminalModEq")
108 .node_with_explicit_kind("Plus", "TerminalPlus")
109 .node_with_explicit_kind("PlusEq", "TerminalPlusEq")
110 .node_with_explicit_kind("Minus", "TerminalMinus")
111 .node_with_explicit_kind("MinusEq", "TerminalMinusEq")
112 .node_with_explicit_kind("EqEq", "TerminalEqEq")
113 .node_with_explicit_kind("Neq", "TerminalNeq")
114 .node_with_explicit_kind("Eq", "TerminalEq")
115 .node_with_explicit_kind("And", "TerminalAnd")
116 .node_with_explicit_kind("AndAnd", "TerminalAndAnd")
117 .node_with_explicit_kind("Or", "TerminalOr")
118 .node_with_explicit_kind("OrOr", "TerminalOrOr")
119 .node_with_explicit_kind("Xor", "TerminalXor")
120 .node_with_explicit_kind("LE", "TerminalLE")
121 .node_with_explicit_kind("GE", "TerminalGE")
122 .node_with_explicit_kind("LT", "TerminalLT")
123 .node_with_explicit_kind("GT", "TerminalGT")
124 .node_with_explicit_kind("DotDot", "TerminalDotDot")
125 .node_with_explicit_kind("DotDotEq", "TerminalDotDotEq")
126 )
127 .add_struct(StructBuilder::new("ExprListParenthesized")
128 .node("lparen", "TerminalLParen")
129 .node("expressions", "ExprList")
130 .node("rparen", "TerminalRParen")
131 )
132 .add_struct(StructBuilder::new("ExprFunctionCall")
133 .node("path", "ExprPath")
134 .node("arguments", "ArgListParenthesized")
135 )
136 .add_struct(StructBuilder::new("ArgListParenthesized")
137 .node("lparen", "TerminalLParen")
138 .node("arguments", "ArgList")
139 .node("rparen", "TerminalRParen")
140 )
141 .add_option("ArgListParenthesized")
142 .add_struct(StructBuilder::new("ExprStructCtorCall")
143 .node("path", "ExprPath")
144 .node("arguments", "StructArgListBraced")
145 )
146 .add_struct(StructBuilder::new("StructArgListBraced")
147 .node("lbrace", "TerminalLBrace")
148 .node("arguments", "StructArgList")
149 .node("rbrace", "TerminalRBrace")
150 )
151 .add_struct(StructBuilder::new("ExprBlock")
152 .node("lbrace", "TerminalLBrace")
153 .node("statements", "StatementList")
154 .node("rbrace", "TerminalRBrace")
155 )
156 .add_struct(StructBuilder::new("ExprMatch")
157 .node("match_kw", "TerminalMatch")
158 .node("expr", "Expr")
160 .node("lbrace", "TerminalLBrace")
161 .node("arms", "MatchArms")
162 .node("rbrace", "TerminalRBrace")
163 )
164 .add_separated_list("MatchArms", "MatchArm", "TerminalComma")
165 .add_struct(StructBuilder::new("MatchArm")
166 .node("patterns", "PatternListOr")
167 .node("arrow", "TerminalMatchArrow")
168 .node("expression", "Expr")
169 )
170 .add_struct(StructBuilder::new("ExprIf")
171 .node("if_kw", "TerminalIf")
172 .node("condition", "Condition")
173 .node("if_block", "ExprBlock")
174 .node("else_clause", "OptionElseClause")
175 )
176 .add_enum(EnumBuilder::new("Condition")
177 .node("Let")
178 .node("Expr")
179 )
180 .add_struct(StructBuilder::new("ConditionLet")
181 .node("let_kw", "TerminalLet")
182 .node("patterns", "PatternListOr")
183 .node("eq", "TerminalEq")
184 .node("expr", "Expr")
185 )
186 .add_struct(StructBuilder::new("ConditionExpr")
187 .node("expr", "Expr")
188 )
189 .add_enum(EnumBuilder::new("BlockOrIf")
190 .node_with_explicit_kind("Block", "ExprBlock")
191 .node_with_explicit_kind("If", "ExprIf")
192 )
193 .add_struct(StructBuilder::new("ExprLoop")
194 .node("loop_kw", "TerminalLoop")
195 .node("body", "ExprBlock")
196 )
197 .add_struct(StructBuilder::new("ExprWhile")
198 .node("while_kw", "TerminalWhile")
199 .node("condition", "Condition")
200 .node("body", "ExprBlock")
201 )
202 .add_struct(StructBuilder::new("ExprFor")
203 .node("for_kw", "TerminalFor")
204 .key_node("pattern", "Pattern")
205 .key_node("identifier", "TerminalIdentifier")
206 .node("expr", "Expr")
207 .node("body", "ExprBlock")
208 )
209 .add_struct(StructBuilder::new("ElseClause")
210 .node("else_kw", "TerminalElse")
211 .node("else_block_or_if", "BlockOrIf")
212 )
213 .add_option("ElseClause")
214 .add_struct(StructBuilder::new("ExprErrorPropagate").node("expr", "Expr").node("op", "TerminalQuestionMark"))
215 .add_struct(StructBuilder::new("ExprIndexed")
216 .node("expr", "Expr")
217 .node("lbrack", "TerminalLBrack")
218 .node("index_expr", "Expr")
219 .node("rbrack", "TerminalRBrack")
220 )
221 .add_struct(StructBuilder::new("ExprInlineMacro")
222 .node("path", "ExprPath")
223 .node("bang", "TerminalNot")
224 .node("arguments", "WrappedArgList")
225 )
226 .add_struct(StructBuilder::new("ExprFixedSizeArray")
227 .node("lbrack", "TerminalLBrack")
228 .node("exprs", "ExprList")
229 .node("size", "OptionFixedSizeArraySize")
230 .node("rbrack", "TerminalRBrack")
231 )
232 .add_struct(StructBuilder::new("FixedSizeArraySize")
233 .node("semicolon", "TerminalSemicolon")
234 .node("size", "Expr")
235 )
236 .add_option("FixedSizeArraySize")
237 .add_struct(StructBuilder::new("ExprClosure")
238 .node("wrapper", "ClosureParamWrapper")
239 .node("ret_ty", "OptionReturnTypeClause")
240 .node("optional_no_panic", "OptionTerminalNoPanic")
241 .node("expr", "Expr")
242 )
243 .add_enum(EnumBuilder::new("ClosureParamWrapper")
244 .node_with_explicit_kind("Nullary", "TerminalOrOr")
245 .node("NAry")
246 )
247 .add_struct(StructBuilder::new("ClosureParamWrapperNAry")
248 .node("leftor","TerminalOr")
249 .node("params", "ParamList")
250 .node("rightor", "TerminalOr")
251 )
252 .add_struct(StructBuilder::new("StructArgExpr")
254 .node("colon", "TerminalColon")
255 .node("expr", "Expr")
256 )
257 .add_option("StructArgExpr")
258 .add_struct(StructBuilder::new("StructArgSingle")
259 .key_node("identifier", "TerminalIdentifier")
260 .node("arg_expr", "OptionStructArgExpr")
261 )
262 .add_struct(StructBuilder::new("StructArgTail")
263 .node("dotdot", "TerminalDotDot")
264 .node("expression", "Expr")
265 )
266 .add_enum(EnumBuilder::new("StructArg")
267 .node_with_explicit_kind("StructArgSingle", "StructArgSingle")
268 .node_with_explicit_kind("StructArgTail", "StructArgTail")
269 )
270 .add_separated_list("StructArgList", "StructArg", "TerminalComma")
271 .add_struct(StructBuilder::new("ArgListBraced")
272 .node("lbrace", "TerminalLBrace")
273 .node("arguments", "ArgList")
274 .node("rbrace", "TerminalRBrace")
275 )
276 .add_struct(StructBuilder::new("ArgListBracketed")
277 .node("lbrack", "TerminalLBrack")
278 .node("arguments", "ArgList")
279 .node("rbrack", "TerminalRBrack")
280 )
281 .add_enum(EnumBuilder::new("WrappedArgList")
282 .missing("Missing")
283 .node_with_explicit_kind("BracketedArgList", "ArgListBracketed")
284 .node_with_explicit_kind("ParenthesizedArgList", "ArgListParenthesized")
285 .node_with_explicit_kind("BracedArgList", "ArgListBraced")
286 )
287 .add_struct(StructBuilder::new("WrappedArgListMissing"))
288 .add_enum(EnumBuilder::new("Pattern")
292 .node_with_explicit_kind("Underscore", "TerminalUnderscore")
293 .node_with_explicit_kind("Literal", "TerminalLiteralNumber")
294 .node_with_explicit_kind("False", "TerminalFalse")
295 .node_with_explicit_kind("True", "TerminalTrue")
296 .node_with_explicit_kind("ShortString", "TerminalShortString")
297 .node_with_explicit_kind("String", "TerminalString")
298 .node("Identifier")
299 .node("Struct")
300 .node("Tuple")
301 .node("Enum")
302 .node("FixedSizeArray")
303 .node_with_explicit_kind("Path", "ExprPath")
304 )
305 .add_struct(StructBuilder::new("PatternIdentifier")
306 .node("modifiers", "ModifierList")
307 .key_node("name", "TerminalIdentifier")
308 )
309 .add_struct(StructBuilder::new("PatternStruct")
310 .node("path", "ExprPath")
312 .node("lbrace", "TerminalLBrace")
313 .node("params", "PatternStructParamList")
314 .node("rbrace", "TerminalRBrace")
315 )
316 .add_separated_list("PatternStructParamList", "PatternStructParam", "TerminalComma")
317 .add_struct(StructBuilder::new("PatternTuple")
318 .node("lparen", "TerminalLParen")
319 .node("patterns", "PatternList")
320 .node("rparen", "TerminalRParen")
321 )
322 .add_struct(StructBuilder::new("PatternFixedSizeArray")
323 .node("lbrack", "TerminalLBrack")
324 .node("patterns", "PatternList")
325 .node("rbrack", "TerminalRBrack"))
326 .add_separated_list("PatternList", "Pattern", "TerminalComma")
327 .add_separated_list("PatternListOr", "Pattern", "TerminalOr")
328 .add_enum(EnumBuilder::new("PatternStructParam")
329 .node_with_explicit_kind("Single", "PatternIdentifier")
330 .node("WithExpr")
331 .node_with_explicit_kind("Tail", "TerminalDotDot")
332 )
333 .add_struct(StructBuilder::new("PatternStructParamWithExpr")
334 .node("modifiers", "ModifierList")
335 .node("name", "TerminalIdentifier")
336 .node("colon", "TerminalColon")
337 .node("pattern", "Pattern")
338 )
339 .add_struct(StructBuilder::new("PatternEnum")
340 .node("path", "ExprPath")
341 .node("pattern", "OptionPatternEnumInnerPattern")
342 )
343 .add_struct(StructBuilder::new("PatternEnumInnerPattern")
344 .node("lparen", "TerminalLParen")
345 .node("pattern", "Pattern")
346 .node("rparen", "TerminalRParen")
347 )
348 .add_option("PatternEnumInnerPattern")
349 .add_struct(StructBuilder::new("TypeClause").node("colon", "TerminalColon").node("ty", "Expr"))
352 .add_option("TypeClause")
353 .add_struct(StructBuilder::new("ReturnTypeClause")
354 .node("arrow", "TerminalArrow")
355 .node("ty", "Expr")
356 )
357 .add_option("ReturnTypeClause")
358 .add_enum(EnumBuilder::new("Statement")
360 .missing("Missing")
361 .node("Let")
362 .node("Expr")
363 .node("Continue")
364 .node("Return")
365 .node("Break")
366 .node("Item")
367 )
368 .add_list("StatementList", "Statement")
369 .add_struct(StructBuilder::new("StatementMissing"))
370 .add_struct(StructBuilder::new("StatementLet")
371 .node("attributes" ,"AttributeList")
372 .node("let_kw", "TerminalLet")
373 .key_node("pattern", "Pattern")
374 .node("type_clause", "OptionTypeClause")
375 .node("eq", "TerminalEq")
376 .node("rhs", "Expr")
377 .node("semicolon", "TerminalSemicolon")
378 )
379 .add_option("TerminalSemicolon")
380 .add_struct(StructBuilder::new("StatementExpr")
381 .node("attributes" ,"AttributeList")
382 .node("expr", "Expr")
383 .node("semicolon", "OptionTerminalSemicolon")
384 )
385 .add_struct(StructBuilder::new("StatementContinue")
386 .node("attributes" ,"AttributeList")
387 .node("continue_kw", "TerminalContinue")
388 .node("semicolon", "TerminalSemicolon")
389 )
390 .add_struct(StructBuilder::new("ExprClause")
391 .node("expr", "Expr"))
392 .add_option("ExprClause")
393 .add_struct(StructBuilder::new("StatementReturn")
394 .node("attributes" ,"AttributeList")
395 .node("return_kw", "TerminalReturn")
396 .node("expr_clause", "OptionExprClause")
397 .node("semicolon", "TerminalSemicolon")
398 )
399 .add_struct(StructBuilder::new("StatementBreak")
400 .node("attributes" ,"AttributeList")
401 .node("break_kw", "TerminalBreak")
402 .node("expr_clause", "OptionExprClause")
403 .node("semicolon", "TerminalSemicolon")
404 )
405 .add_struct(StructBuilder::new("StatementItem")
406 .node("item", "ModuleItem")
407 )
408 .add_struct(StructBuilder::new("Param")
410 .node("modifiers", "ModifierList")
411 .key_node("name", "TerminalIdentifier")
412 .node("type_clause", "OptionTypeClause")
413 )
414 .add_list("ModifierList", "Modifier")
415 .add_enum(EnumBuilder::new("Modifier")
416 .node_with_explicit_kind("Ref", "TerminalRef")
417 .node_with_explicit_kind("Mut", "TerminalMut")
418 )
419 .add_separated_list("ParamList", "Param", "TerminalComma")
420 .add_struct(StructBuilder::new("ImplicitsClause")
421 .node("implicits_kw", "TerminalImplicits")
422 .node("lparen", "TerminalLParen")
423 .node("implicits", "ImplicitsList")
424 .node("rparen", "TerminalRParen")
425 )
426 .add_separated_list("ImplicitsList", "ExprPath", "TerminalComma")
427 .add_option("ImplicitsClause")
428 .add_option("TerminalNoPanic")
429 .add_option("TerminalConst")
430 .add_struct(StructBuilder::new("FunctionSignature")
433 .node("lparen", "TerminalLParen")
434 .node("parameters", "ParamList")
435 .node("rparen", "TerminalRParen")
436 .node("ret_ty", "OptionReturnTypeClause")
437 .node("implicits_clause", "OptionImplicitsClause")
438 .node("optional_no_panic", "OptionTerminalNoPanic")
439 )
440 .add_struct(StructBuilder::new("Member")
443 .node("attributes" ,"AttributeList")
444 .node("visibility", "Visibility")
445 .key_node("name", "TerminalIdentifier")
446 .node("type_clause", "TypeClause")
447 )
448 .add_separated_list("MemberList", "Member", "TerminalComma")
449 .add_struct(StructBuilder::new("Variant")
450 .node("attributes" ,"AttributeList")
451 .key_node("name", "TerminalIdentifier")
452 .node("type_clause", "OptionTypeClause")
453 )
454 .add_separated_list("VariantList", "Variant", "TerminalComma")
455 .add_enum(EnumBuilder::new("ModuleItem")
457 .missing("Missing")
458 .node_with_explicit_kind("Constant", "ItemConstant")
459 .node_with_explicit_kind("Module", "ItemModule")
460 .node_with_explicit_kind("Use", "ItemUse")
461 .node_with_explicit_kind("FreeFunction", "FunctionWithBody")
462 .node_with_explicit_kind("ExternFunction", "ItemExternFunction")
463 .node_with_explicit_kind("ExternType", "ItemExternType")
464 .node_with_explicit_kind("Trait", "ItemTrait")
465 .node_with_explicit_kind("Impl", "ItemImpl")
466 .node_with_explicit_kind("ImplAlias", "ItemImplAlias")
467 .node_with_explicit_kind("Struct", "ItemStruct")
468 .node_with_explicit_kind("Enum", "ItemEnum")
469 .node_with_explicit_kind("TypeAlias", "ItemTypeAlias")
470 .node_with_explicit_kind("InlineMacro", "ItemInlineMacro")
471 .node_with_explicit_kind("HeaderDoc", "ItemHeaderDoc")
472 )
473 .add_list("ModuleItemList", "ModuleItem")
474 .add_struct(StructBuilder::new("ModuleItemMissing"))
475 .add_struct(StructBuilder::new("Attribute")
476 .node("hash", "TerminalHash")
477 .node("lbrack", "TerminalLBrack")
478 .node("attr", "ExprPath")
479 .node("arguments", "OptionArgListParenthesized")
480 .node("rbrack", "TerminalRBrack")
481 )
482 .add_list("AttributeList", "Attribute")
483 .add_struct(StructBuilder::new("VisibilityDefault"))
484 .add_struct(StructBuilder::new("VisibilityPubArgumentClause")
485 .node("lparen", "TerminalLParen")
486 .node("argument", "TerminalIdentifier")
487 .node("rparen", "TerminalRParen")
488 )
489 .add_option("VisibilityPubArgumentClause")
490 .add_struct(StructBuilder::new("VisibilityPub")
491 .node("pub_kw", "TerminalPub")
492 .node("argument_clause", "OptionVisibilityPubArgumentClause")
493 )
494 .add_enum(EnumBuilder::new("Visibility")
495 .node("Default")
496 .node("Pub")
497 )
498 .add_struct(StructBuilder::new("ItemModule")
499 .node("attributes" ,"AttributeList")
500 .node("visibility", "Visibility")
501 .node("module_kw", "TerminalModule")
502 .key_node("name", "TerminalIdentifier")
503 .node("body", "MaybeModuleBody")
504 )
505 .add_enum(EnumBuilder::new("MaybeModuleBody")
506 .node_with_explicit_kind("Some", "ModuleBody")
507 .node_with_explicit_kind("None", "TerminalSemicolon")
508 )
509 .add_struct(StructBuilder::new("ModuleBody")
510 .node("lbrace", "TerminalLBrace")
511 .node("items", "ModuleItemList")
512 .node("rbrace", "TerminalRBrace")
513 )
514 .add_struct(StructBuilder::new("FunctionDeclaration")
515 .node("optional_const", "OptionTerminalConst")
516 .node("function_kw", "TerminalFunction")
517 .key_node("name", "TerminalIdentifier")
518 .node("generic_params", "OptionWrappedGenericParamList")
519 .node("signature", "FunctionSignature")
520 )
521 .add_struct(StructBuilder::new("ItemConstant")
522 .node("attributes" ,"AttributeList")
523 .node("visibility", "Visibility")
524 .node("const_kw", "TerminalConst")
525 .key_node("name", "TerminalIdentifier")
526 .node("type_clause", "TypeClause")
527 .node("eq", "TerminalEq")
528 .node("value", "Expr")
529 .node("semicolon", "TerminalSemicolon")
530 )
531 .add_struct(StructBuilder::new("FunctionWithBody")
532 .node("attributes" ,"AttributeList")
533 .node("visibility", "Visibility")
534 .key_node("declaration", "FunctionDeclaration")
536 .node("body", "ExprBlock")
537 )
538 .add_struct(StructBuilder::new("ItemExternFunction")
539 .node("attributes" ,"AttributeList")
540 .node("visibility", "Visibility")
541 .node("extern_kw", "TerminalExtern")
542 .key_node("declaration", "FunctionDeclaration")
544 .node("semicolon", "TerminalSemicolon")
545 )
546 .add_struct(StructBuilder::new("ItemExternType")
547 .node("attributes" ,"AttributeList")
548 .node("visibility", "Visibility")
549 .node("extern_kw", "TerminalExtern")
550 .node("type_kw", "TerminalType")
551 .key_node("name", "TerminalIdentifier")
552 .node("generic_params", "OptionWrappedGenericParamList")
553 .node("semicolon", "TerminalSemicolon")
554 )
555 .add_struct(StructBuilder::new("ItemTrait")
556 .node("attributes" ,"AttributeList")
557 .node("visibility", "Visibility")
558 .node("trait_kw", "TerminalTrait")
559 .key_node("name", "TerminalIdentifier")
560 .node("generic_params", "OptionWrappedGenericParamList")
561 .node("body", "MaybeTraitBody")
562 )
563 .add_enum(EnumBuilder::new("MaybeTraitBody")
564 .node_with_explicit_kind("Some", "TraitBody")
565 .node_with_explicit_kind("None", "TerminalSemicolon")
566 )
567 .add_struct(StructBuilder::new("TraitBody")
568 .node("lbrace", "TerminalLBrace")
569 .node("items", "TraitItemList")
570 .node("rbrace", "TerminalRBrace")
571 )
572 .add_list("TraitItemList", "TraitItem")
573 .add_enum(EnumBuilder::new("TraitItem")
574 .missing("Missing")
575 .node("Function")
576 .node("Type")
577 .node("Constant")
578 .node("Impl")
579 )
580 .add_struct(StructBuilder::new("TraitItemMissing"))
581 .add_struct(StructBuilder::new("TraitItemFunction")
582 .node("attributes" ,"AttributeList")
583 .key_node("declaration", "FunctionDeclaration")
585 .node("body", "MaybeTraitFunctionBody")
586 )
587 .add_struct(StructBuilder::new("TraitItemType")
588 .node("attributes" ,"AttributeList")
589 .node("type_kw", "TerminalType")
590 .key_node("name", "TerminalIdentifier")
591 .node("generic_params", "OptionWrappedGenericParamList")
592 .node("semicolon", "TerminalSemicolon")
593 )
594 .add_struct(StructBuilder::new("TraitItemConstant")
595 .node("attributes" ,"AttributeList")
596 .node("const_kw", "TerminalConst")
597 .key_node("name", "TerminalIdentifier")
598 .node("type_clause", "TypeClause")
599 .node("semicolon", "TerminalSemicolon")
600 )
601 .add_struct(StructBuilder::new("TraitItemImpl")
602 .node("attributes" ,"AttributeList")
603 .node("impl_kw", "TerminalImpl")
604 .key_node("name", "TerminalIdentifier")
605 .node("colon", "TerminalColon")
606 .node("trait_path", "ExprPath")
607 .node("semicolon", "TerminalSemicolon")
608 )
609 .add_enum(EnumBuilder::new("MaybeTraitFunctionBody")
610 .node_with_explicit_kind("Some", "ExprBlock")
611 .node_with_explicit_kind("None", "TerminalSemicolon")
612 )
613 .add_struct(StructBuilder::new("ItemImpl")
614 .node("attributes" ,"AttributeList")
615 .node("visibility", "Visibility")
616 .node("impl_kw", "TerminalImpl")
617 .key_node("name", "TerminalIdentifier")
618 .node("generic_params", "OptionWrappedGenericParamList")
619 .node("of_kw", "TerminalOf")
620 .node("trait_path", "ExprPath")
621 .node("body", "MaybeImplBody")
622 ).add_struct(StructBuilder::new("ItemInlineMacro")
623 .node("attributes" ,"AttributeList")
624 .node("name", "TerminalIdentifier")
625 .node("bang", "TerminalNot")
626 .node("arguments", "WrappedArgList")
627 .node("semicolon", "TerminalSemicolon")
628 )
629 .add_struct(StructBuilder::new("ItemHeaderDoc")
633 .node("empty", "TerminalEmpty"))
634 .add_enum(EnumBuilder::new("MaybeImplBody")
635 .node_with_explicit_kind("Some", "ImplBody")
636 .node_with_explicit_kind("None", "TerminalSemicolon")
637 )
638 .add_struct(StructBuilder::new("ImplBody")
639 .node("lbrace", "TerminalLBrace")
640 .node("items", "ImplItemList")
641 .node("rbrace", "TerminalRBrace")
642 )
643 .add_list("ImplItemList", "ImplItem")
644 .add_enum(EnumBuilder::new("ImplItem")
645 .missing("Missing")
646 .node_with_explicit_kind("Function", "FunctionWithBody")
647 .node_with_explicit_kind("Type", "ItemTypeAlias")
648 .node_with_explicit_kind("Constant", "ItemConstant")
649 .node_with_explicit_kind("Impl", "ItemImplAlias")
650 .node_with_explicit_kind("Module", "ItemModule")
652 .node_with_explicit_kind("Use", "ItemUse")
653 .node_with_explicit_kind("ExternFunction", "ItemExternFunction")
654 .node_with_explicit_kind("ExternType", "ItemExternType")
655 .node_with_explicit_kind("Trait", "ItemTrait")
656 .node_with_explicit_kind("Struct", "ItemStruct")
657 .node_with_explicit_kind("Enum", "ItemEnum")
658 )
659 .add_struct(StructBuilder::new("ImplItemMissing"))
660 .add_struct(StructBuilder::new("ItemImplAlias")
661 .node("attributes" ,"AttributeList")
662 .node("visibility", "Visibility")
663 .node("impl_kw", "TerminalImpl")
664 .key_node("name", "TerminalIdentifier")
665 .node("generic_params", "OptionWrappedGenericParamList")
666 .node("eq", "TerminalEq")
667 .node("impl_path", "ExprPath")
668 .node("semicolon", "TerminalSemicolon")
669 )
670 .add_struct(StructBuilder::new("ItemStruct")
671 .node("attributes" ,"AttributeList")
672 .node("visibility", "Visibility")
673 .node("struct_kw", "TerminalStruct")
674 .key_node("name", "TerminalIdentifier")
675 .node("generic_params", "OptionWrappedGenericParamList")
676 .node("lbrace", "TerminalLBrace")
677 .node("members", "MemberList")
678 .node("rbrace", "TerminalRBrace")
679 )
680 .add_struct(StructBuilder::new("ItemEnum")
681 .node("attributes" ,"AttributeList")
682 .node("visibility", "Visibility")
683 .node("enum_kw", "TerminalEnum")
684 .key_node("name", "TerminalIdentifier")
685 .node("generic_params", "OptionWrappedGenericParamList")
686 .node("lbrace", "TerminalLBrace")
687 .node("variants", "VariantList")
688 .node("rbrace", "TerminalRBrace")
689 )
690 .add_struct(StructBuilder::new("ItemTypeAlias")
691 .node("attributes" ,"AttributeList")
692 .node("visibility", "Visibility")
693 .node("type_kw", "TerminalType")
694 .key_node("name", "TerminalIdentifier")
695 .node("generic_params", "OptionWrappedGenericParamList")
696 .node("eq", "TerminalEq")
697 .node("ty", "Expr")
698 .node("semicolon", "TerminalSemicolon")
699 )
700 .add_struct(StructBuilder::new("ItemUse")
701 .node("attributes" ,"AttributeList")
702 .node("visibility", "Visibility")
703 .node("use_kw", "TerminalUse")
704 .key_node("use_path", "UsePath")
705 .node("semicolon", "TerminalSemicolon")
706 )
707 .add_enum(
708 EnumBuilder::new("UsePath")
709 .node("Leaf")
710 .node("Single")
711 .node("Multi")
712 .node("Star")
713 )
714 .add_struct(StructBuilder::new("UsePathLeaf")
715 .key_node("ident", "PathSegment")
716 .key_node("alias_clause", "OptionAliasClause")
717 )
718 .add_struct(StructBuilder::new("UsePathSingle")
719 .node("ident", "PathSegment")
720 .node("colon_colon", "TerminalColonColon")
721 .node("use_path", "UsePath")
722 )
723 .add_struct(StructBuilder::new("UsePathMulti")
724 .node("lbrace", "TerminalLBrace")
725 .node("use_paths", "UsePathList")
726 .node("rbrace", "TerminalRBrace")
727 )
728 .add_struct(StructBuilder::new("UsePathStar")
729 .node("star", "TerminalMul")
730 )
731 .add_separated_list("UsePathList", "UsePath", "TerminalComma")
732 .add_struct(StructBuilder::new("AliasClause")
733 .node("as_kw", "TerminalAs")
734 .key_node("alias", "TerminalIdentifier")
735 )
736 .add_option("AliasClause")
737 .add_enum(
739 EnumBuilder::new("GenericArg")
740 .node("Unnamed")
741 .node("Named")
742 )
743 .add_struct(StructBuilder::new("GenericArgNamed")
744 .node("name", "TerminalIdentifier")
745 .node("colon", "TerminalColon")
746 .node("value", "GenericArgValue")
747 )
748 .add_struct(StructBuilder::new("GenericArgUnnamed")
749 .node("value", "GenericArgValue")
750 )
751 .add_enum(
752 EnumBuilder::new("GenericArgValue")
753 .node("Expr")
754 .node_with_explicit_kind("Underscore", "TerminalUnderscore")
755 )
756 .add_struct(StructBuilder::new("GenericArgValueExpr")
757 .node("expr", "Expr")
758 )
759 .add_struct(StructBuilder::new("GenericArgs")
760 .node("langle", "TerminalLT")
761 .node("generic_args", "GenericArgList")
762 .node("rangle", "TerminalGT")
763 )
764 .add_separated_list("GenericArgList", "GenericArg", "TerminalComma")
765 .add_struct(
766 StructBuilder::new("AssociatedItemConstraint")
767 .node("item","TerminalIdentifier")
768 .node("colon","TerminalColon")
769 .node("value","Expr")
770 )
771 .add_struct(StructBuilder::new("AssociatedItemConstraints")
772 .node("lbrack", "TerminalLBrack")
773 .node("associated_item_constraints", "AssociatedItemConstraintList")
774 .node("rbrack", "TerminalRBrack")
775 )
776 .add_separated_list("AssociatedItemConstraintList", "AssociatedItemConstraint", "TerminalComma")
777 .add_option("AssociatedItemConstraints")
778 .add_option("WrappedGenericParamList")
779 .add_struct(StructBuilder::new("WrappedGenericParamList")
780 .node("langle", "TerminalLT")
781 .node("generic_params", "GenericParamList")
782 .node("rangle", "TerminalGT")
783 )
784 .add_separated_list("GenericParamList", "GenericParam", "TerminalComma")
785 .add_enum(EnumBuilder::new("GenericParam")
787 .node("Type")
788 .node("Const")
789 .node("ImplNamed")
790 .node("ImplAnonymous")
791 .node("NegativeImpl")
792 )
793 .add_struct(StructBuilder::new("GenericParamType")
794 .key_node("name", "TerminalIdentifier")
795 )
796 .add_struct(StructBuilder::new("GenericParamConst")
797 .node("const_kw", "TerminalConst")
798 .key_node("name", "TerminalIdentifier")
799 .node("colon", "TerminalColon")
800 .node("ty", "Expr")
801 )
802 .add_struct(StructBuilder::new("GenericParamImplNamed")
803 .node("impl_kw", "TerminalImpl")
804 .key_node("name", "TerminalIdentifier")
805 .node("colon", "TerminalColon")
806 .node("trait_path", "ExprPath")
807 .node("type_constrains", "OptionAssociatedItemConstraints")
808 )
809 .add_struct(StructBuilder::new("GenericParamImplAnonymous")
810 .node("plus", "TerminalPlus")
811 .node("trait_path", "ExprPath")
812 .node("type_constrains", "OptionAssociatedItemConstraints")
813 )
814 .add_struct(StructBuilder::new("GenericParamNegativeImpl")
815 .node("minus", "TerminalMinus")
816 .node("trait_path", "ExprPath")
817 )
818 .add_struct(StructBuilder::new("TriviumSkippedNode")
821 .node("node", "SkippedNode")
822 )
823 .add_enum(EnumBuilder::new("SkippedNode")
825 .node_with_explicit_kind("AttributeList", "AttributeList")
826 .node_with_explicit_kind("VisibilityPub", "VisibilityPub")
827 )
828 .add_token_and_terminal("Identifier")
830 .add_token_and_terminal("LiteralNumber")
831 .add_token_and_terminal("ShortString")
832 .add_token_and_terminal("String")
833 .add_keyword_token_and_terminal("As")
834 .add_keyword_token_and_terminal("Const")
835 .add_keyword_token_and_terminal("Else")
836 .add_keyword_token_and_terminal("Enum")
837 .add_keyword_token_and_terminal("Extern")
838 .add_keyword_token_and_terminal("False")
839 .add_keyword_token_and_terminal("Function")
840 .add_keyword_token_and_terminal("If")
841 .add_keyword_token_and_terminal("While")
842 .add_keyword_token_and_terminal("For")
843 .add_keyword_token_and_terminal("Loop")
844 .add_keyword_token_and_terminal("Impl")
845 .add_keyword_token_and_terminal("Implicits")
846 .add_keyword_token_and_terminal("Let")
847 .add_keyword_token_and_terminal("Match")
848 .add_keyword_token_and_terminal("Module")
849 .add_keyword_token_and_terminal("Mut")
850 .add_keyword_token_and_terminal("NoPanic")
851 .add_keyword_token_and_terminal("Of")
852 .add_keyword_token_and_terminal("Ref")
853 .add_keyword_token_and_terminal("Continue")
854 .add_keyword_token_and_terminal("Return")
855 .add_keyword_token_and_terminal("Break")
856 .add_keyword_token_and_terminal("Struct")
857 .add_keyword_token_and_terminal("Trait")
858 .add_keyword_token_and_terminal("True")
859 .add_keyword_token_and_terminal("Type")
860 .add_keyword_token_and_terminal("Use")
861 .add_keyword_token_and_terminal("Pub")
862 .add_token_and_terminal("And")
863 .add_token_and_terminal("AndAnd")
864 .add_token_and_terminal("Arrow")
865 .add_token_and_terminal("At")
866 .add_token_and_terminal("BadCharacters")
867 .add_token_and_terminal("Colon")
868 .add_token_and_terminal("ColonColon")
869 .add_token_and_terminal("Comma")
870 .add_token_and_terminal("Div")
871 .add_token_and_terminal("DivEq")
872 .add_token_and_terminal("Dot")
873 .add_token_and_terminal("DotDot")
874 .add_token_and_terminal("DotDotEq")
875 .add_token_and_terminal("EndOfFile")
876 .add_token_and_terminal("Eq")
877 .add_token_and_terminal("EqEq")
878 .add_token_and_terminal("GE")
879 .add_token_and_terminal("GT")
880 .add_token_and_terminal("Hash")
881 .add_token_and_terminal("LBrace")
882 .add_token_and_terminal("LBrack")
883 .add_token_and_terminal("LE")
884 .add_token_and_terminal("LParen")
885 .add_token_and_terminal("LT")
886 .add_token_and_terminal("MatchArrow")
887 .add_token_and_terminal("Minus")
888 .add_token_and_terminal("MinusEq")
889 .add_token_and_terminal("Mod")
890 .add_token_and_terminal("ModEq")
891 .add_token_and_terminal("Mul")
892 .add_token_and_terminal("MulEq")
893 .add_token_and_terminal("Neq")
894 .add_token_and_terminal("Not")
895 .add_token_and_terminal("BitNot")
896 .add_token_and_terminal("Or")
897 .add_token_and_terminal("OrOr")
898 .add_token_and_terminal("Plus")
899 .add_token_and_terminal("PlusEq")
900 .add_token_and_terminal("QuestionMark")
901 .add_token_and_terminal("RBrace")
902 .add_token_and_terminal("RBrack")
903 .add_token_and_terminal("RParen")
904 .add_token_and_terminal("Semicolon")
905 .add_token_and_terminal("Underscore")
906 .add_token_and_terminal("Xor")
907 .add_struct(StructBuilder::new("SyntaxFile")
909 .node("items", "ModuleItemList")
910 .node("eof", "TerminalEndOfFile")
911 )
912 .add_token_and_terminal("Empty")
913 .add_token("SingleLineComment")
914 .add_token("SingleLineInnerComment")
915 .add_token("SingleLineDocComment")
916 .add_token("Whitespace")
917 .add_token("Newline")
918 .add_token("Missing")
919 .add_token("Skipped")
920 .add_all_tokens_enum("TokenNode")
921 .get()
922}