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