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 .node("Placeholder")
45 )
46 .add_separated_list("ExprList", "Expr", "TerminalComma")
47 .add_struct(StructBuilder::new("Arg")
48 .node("modifiers", "ModifierList")
49 .node("arg_clause", "ArgClause")
50 )
51 .add_enum(EnumBuilder::new("ArgClause")
52 .node("Unnamed")
53 .node("Named")
54 .node("FieldInitShorthand")
55 )
56 .add_struct(StructBuilder::new("ArgClauseNamed")
57 .node("name", "TerminalIdentifier")
58 .node("colon", "TerminalColon")
59 .node("value", "Expr")
60 )
61 .add_struct(StructBuilder::new("ArgClauseUnnamed")
62 .node("value", "Expr")
63 )
64 .add_struct(StructBuilder::new("ArgClauseFieldInitShorthand")
65 .node("colon", "TerminalColon")
66 .node("name", "ExprFieldInitShorthand")
67 )
68 .add_struct(StructBuilder::new("ExprFieldInitShorthand")
69 .node("name", "TerminalIdentifier")
70 )
71 .add_separated_list("ArgList", "Arg", "TerminalComma")
72 .add_struct(StructBuilder::new("ExprMissing"))
73 .add_enum(EnumBuilder::new("PathSegment")
74 .node("Simple")
75 .node("WithGenericArgs")
76 .missing("Missing")
77 )
78 .add_struct(StructBuilder::new("PathSegmentSimple").node("ident", "TerminalIdentifier"))
79 .add_option("TerminalColonColon")
80 .add_struct(StructBuilder::new("PathSegmentWithGenericArgs")
81 .node("ident", "TerminalIdentifier")
82 .node("separator", "OptionTerminalColonColon")
83 .node("generic_args", "GenericArgs")
84 )
85 .add_struct(StructBuilder::new("ExprPath")
86 .node("dollar", "OptionTerminalDollar")
87 .node("segments", "ExprPathInner")
88 )
89 .add_option("TerminalDollar")
90 .add_struct(StructBuilder::new("PathSegmentMissing").node("ident","TerminalIdentifier"))
93 .add_separated_list("ExprPathInner", "PathSegment", "TerminalColonColon")
94 .add_struct(StructBuilder::new("ExprParenthesized")
95 .node("lparen", "TerminalLParen")
96 .node("expr", "Expr")
97 .node("rparen", "TerminalRParen")
98 )
99 .add_struct(StructBuilder::new("ExprUnary").node("op", "UnaryOperator").node("expr", "Expr"))
100 .add_enum(EnumBuilder::new("UnaryOperator")
101 .node_with_explicit_kind("Not", "TerminalNot")
102 .node_with_explicit_kind("BitNot", "TerminalBitNot")
103 .node_with_explicit_kind("Minus", "TerminalMinus")
104 .node_with_explicit_kind("At", "TerminalAt")
105 .node_with_explicit_kind("Desnap", "TerminalMul")
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("ExprPlaceholder")
262 .node("dollar", "TerminalDollar")
263 .node("path", "ExprPath")
264 )
265 .add_struct(StructBuilder::new("StructArgExpr")
267 .node("colon", "TerminalColon")
268 .node("expr", "Expr")
269 )
270 .add_option("StructArgExpr")
271 .add_struct(StructBuilder::new("StructArgSingle")
272 .key_node("identifier", "TerminalIdentifier")
273 .node("arg_expr", "OptionStructArgExpr")
274 )
275 .add_struct(StructBuilder::new("StructArgTail")
276 .node("dotdot", "TerminalDotDot")
277 .node("expression", "Expr")
278 )
279 .add_enum(EnumBuilder::new("StructArg")
280 .node_with_explicit_kind("StructArgSingle", "StructArgSingle")
281 .node_with_explicit_kind("StructArgTail", "StructArgTail")
282 )
283 .add_separated_list("StructArgList", "StructArg", "TerminalComma")
284 .add_struct(StructBuilder::new("ArgListBraced")
285 .node("lbrace", "TerminalLBrace")
286 .node("arguments", "ArgList")
287 .node("rbrace", "TerminalRBrace")
288 )
289 .add_struct(StructBuilder::new("ArgListBracketed")
290 .node("lbrack", "TerminalLBrack")
291 .node("arguments", "ArgList")
292 .node("rbrack", "TerminalRBrack")
293 )
294 .add_enum(EnumBuilder::new("WrappedArgList")
295 .missing("Missing")
296 .node_with_explicit_kind("BracketedArgList", "ArgListBracketed")
297 .node_with_explicit_kind("ParenthesizedArgList", "ArgListParenthesized")
298 .node_with_explicit_kind("BracedArgList", "ArgListBraced")
299 )
300 .add_struct(StructBuilder::new("WrappedArgListMissing"))
301 .add_enum(EnumBuilder::new("Pattern")
305 .node_with_explicit_kind("Underscore", "TerminalUnderscore")
306 .node_with_explicit_kind("Literal", "TerminalLiteralNumber")
307 .node_with_explicit_kind("False", "TerminalFalse")
308 .node_with_explicit_kind("True", "TerminalTrue")
309 .node_with_explicit_kind("ShortString", "TerminalShortString")
310 .node_with_explicit_kind("String", "TerminalString")
311 .node("Identifier")
312 .node("Struct")
313 .node("Tuple")
314 .node("Enum")
315 .node("FixedSizeArray")
316 .node_with_explicit_kind("Path", "ExprPath")
317 )
318 .add_struct(StructBuilder::new("PatternIdentifier")
319 .node("modifiers", "ModifierList")
320 .key_node("name", "TerminalIdentifier")
321 )
322 .add_struct(StructBuilder::new("PatternStruct")
323 .node("path", "ExprPath")
325 .node("lbrace", "TerminalLBrace")
326 .node("params", "PatternStructParamList")
327 .node("rbrace", "TerminalRBrace")
328 )
329 .add_separated_list("PatternStructParamList", "PatternStructParam", "TerminalComma")
330 .add_struct(StructBuilder::new("PatternTuple")
331 .node("lparen", "TerminalLParen")
332 .node("patterns", "PatternList")
333 .node("rparen", "TerminalRParen")
334 )
335 .add_struct(StructBuilder::new("PatternFixedSizeArray")
336 .node("lbrack", "TerminalLBrack")
337 .node("patterns", "PatternList")
338 .node("rbrack", "TerminalRBrack"))
339 .add_separated_list("PatternList", "Pattern", "TerminalComma")
340 .add_separated_list("PatternListOr", "Pattern", "TerminalOr")
341 .add_enum(EnumBuilder::new("PatternStructParam")
342 .node_with_explicit_kind("Single", "PatternIdentifier")
343 .node("WithExpr")
344 .node_with_explicit_kind("Tail", "TerminalDotDot")
345 )
346 .add_struct(StructBuilder::new("PatternStructParamWithExpr")
347 .node("modifiers", "ModifierList")
348 .node("name", "TerminalIdentifier")
349 .node("colon", "TerminalColon")
350 .node("pattern", "Pattern")
351 )
352 .add_struct(StructBuilder::new("PatternEnum")
353 .node("path", "ExprPath")
354 .node("pattern", "OptionPatternEnumInnerPattern")
355 )
356 .add_struct(StructBuilder::new("PatternEnumInnerPattern")
357 .node("lparen", "TerminalLParen")
358 .node("pattern", "Pattern")
359 .node("rparen", "TerminalRParen")
360 )
361 .add_option("PatternEnumInnerPattern")
362 .add_struct(StructBuilder::new("TypeClause").node("colon", "TerminalColon").node("ty", "Expr"))
365 .add_option("TypeClause")
366 .add_struct(StructBuilder::new("ReturnTypeClause")
367 .node("arrow", "TerminalArrow")
368 .node("ty", "Expr")
369 )
370 .add_option("ReturnTypeClause")
371 .add_enum(EnumBuilder::new("Statement")
373 .missing("Missing")
374 .node("Let")
375 .node("Expr")
376 .node("Continue")
377 .node("Return")
378 .node("Break")
379 .node("Item")
380 )
381 .add_list("StatementList", "Statement")
382 .add_struct(StructBuilder::new("StatementMissing"))
383 .add_struct(StructBuilder::new("StatementLet")
384 .node("attributes" ,"AttributeList")
385 .node("let_kw", "TerminalLet")
386 .key_node("pattern", "Pattern")
387 .node("type_clause", "OptionTypeClause")
388 .node("eq", "TerminalEq")
389 .node("rhs", "Expr")
390 .node("let_else_clause", "OptionLetElseClause")
391 .node("semicolon", "TerminalSemicolon")
392 )
393 .add_struct(StructBuilder::new("LetElseClause")
394 .node("else_kw", "TerminalElse")
395 .node("else_block", "ExprBlock")
396 )
397 .add_option("LetElseClause")
398 .add_option("TerminalSemicolon")
399 .add_struct(StructBuilder::new("StatementExpr")
400 .node("attributes" ,"AttributeList")
401 .node("expr", "Expr")
402 .node("semicolon", "OptionTerminalSemicolon")
403 )
404 .add_struct(StructBuilder::new("StatementContinue")
405 .node("attributes" ,"AttributeList")
406 .node("continue_kw", "TerminalContinue")
407 .node("semicolon", "TerminalSemicolon")
408 )
409 .add_struct(StructBuilder::new("ExprClause")
410 .node("expr", "Expr"))
411 .add_option("ExprClause")
412 .add_struct(StructBuilder::new("StatementReturn")
413 .node("attributes" ,"AttributeList")
414 .node("return_kw", "TerminalReturn")
415 .node("expr_clause", "OptionExprClause")
416 .node("semicolon", "TerminalSemicolon")
417 )
418 .add_struct(StructBuilder::new("StatementBreak")
419 .node("attributes" ,"AttributeList")
420 .node("break_kw", "TerminalBreak")
421 .node("expr_clause", "OptionExprClause")
422 .node("semicolon", "TerminalSemicolon")
423 )
424 .add_struct(StructBuilder::new("StatementItem")
425 .node("item", "ModuleItem")
426 )
427 .add_struct(StructBuilder::new("Param")
429 .node("modifiers", "ModifierList")
430 .key_node("name", "TerminalIdentifier")
431 .node("type_clause", "OptionTypeClause")
432 )
433 .add_list("ModifierList", "Modifier")
434 .add_enum(EnumBuilder::new("Modifier")
435 .node_with_explicit_kind("Ref", "TerminalRef")
436 .node_with_explicit_kind("Mut", "TerminalMut")
437 )
438 .add_separated_list("ParamList", "Param", "TerminalComma")
439 .add_struct(StructBuilder::new("ImplicitsClause")
440 .node("implicits_kw", "TerminalImplicits")
441 .node("lparen", "TerminalLParen")
442 .node("implicits", "ImplicitsList")
443 .node("rparen", "TerminalRParen")
444 )
445 .add_separated_list("ImplicitsList", "ExprPath", "TerminalComma")
446 .add_option("ImplicitsClause")
447 .add_option("TerminalNoPanic")
448 .add_option("TerminalConst")
449 .add_struct(StructBuilder::new("FunctionSignature")
452 .node("lparen", "TerminalLParen")
453 .node("parameters", "ParamList")
454 .node("rparen", "TerminalRParen")
455 .node("ret_ty", "OptionReturnTypeClause")
456 .node("implicits_clause", "OptionImplicitsClause")
457 .node("optional_no_panic", "OptionTerminalNoPanic")
458 )
459 .add_struct(StructBuilder::new("Member")
462 .node("attributes" ,"AttributeList")
463 .node("visibility", "Visibility")
464 .key_node("name", "TerminalIdentifier")
465 .node("type_clause", "TypeClause")
466 )
467 .add_separated_list("MemberList", "Member", "TerminalComma")
468 .add_struct(StructBuilder::new("Variant")
469 .node("attributes" ,"AttributeList")
470 .key_node("name", "TerminalIdentifier")
471 .node("type_clause", "OptionTypeClause")
472 )
473 .add_separated_list("VariantList", "Variant", "TerminalComma")
474 .add_enum(EnumBuilder::new("ModuleItem")
476 .missing("Missing")
477 .node_with_explicit_kind("Constant", "ItemConstant")
478 .node_with_explicit_kind("Module", "ItemModule")
479 .node_with_explicit_kind("Use", "ItemUse")
480 .node_with_explicit_kind("FreeFunction", "FunctionWithBody")
481 .node_with_explicit_kind("ExternFunction", "ItemExternFunction")
482 .node_with_explicit_kind("ExternType", "ItemExternType")
483 .node_with_explicit_kind("Trait", "ItemTrait")
484 .node_with_explicit_kind("Impl", "ItemImpl")
485 .node_with_explicit_kind("ImplAlias", "ItemImplAlias")
486 .node_with_explicit_kind("Struct", "ItemStruct")
487 .node_with_explicit_kind("Enum", "ItemEnum")
488 .node_with_explicit_kind("TypeAlias", "ItemTypeAlias")
489 .node_with_explicit_kind("InlineMacro", "ItemInlineMacro")
490 .node_with_explicit_kind("MacroDeclaration", "ItemMacroDeclaration")
491 .node_with_explicit_kind("HeaderDoc", "ItemHeaderDoc")
492 )
493 .add_list("ModuleItemList", "ModuleItem")
494 .add_struct(StructBuilder::new("ModuleItemMissing"))
495 .add_struct(StructBuilder::new("Attribute")
496 .node("hash", "TerminalHash")
497 .node("lbrack", "TerminalLBrack")
498 .node("attr", "ExprPath")
499 .node("arguments", "OptionArgListParenthesized")
500 .node("rbrack", "TerminalRBrack")
501 )
502 .add_list("AttributeList", "Attribute")
503 .add_struct(StructBuilder::new("VisibilityDefault"))
504 .add_struct(StructBuilder::new("VisibilityPubArgumentClause")
505 .node("lparen", "TerminalLParen")
506 .node("argument", "TerminalIdentifier")
507 .node("rparen", "TerminalRParen")
508 )
509 .add_option("VisibilityPubArgumentClause")
510 .add_struct(StructBuilder::new("VisibilityPub")
511 .node("pub_kw", "TerminalPub")
512 .node("argument_clause", "OptionVisibilityPubArgumentClause")
513 )
514 .add_enum(EnumBuilder::new("Visibility")
515 .node("Default")
516 .node("Pub")
517 )
518 .add_struct(StructBuilder::new("ItemModule")
519 .node("attributes" ,"AttributeList")
520 .node("visibility", "Visibility")
521 .node("module_kw", "TerminalModule")
522 .key_node("name", "TerminalIdentifier")
523 .node("body", "MaybeModuleBody")
524 )
525 .add_enum(EnumBuilder::new("MaybeModuleBody")
526 .node_with_explicit_kind("Some", "ModuleBody")
527 .node_with_explicit_kind("None", "TerminalSemicolon")
528 )
529 .add_struct(StructBuilder::new("ModuleBody")
530 .node("lbrace", "TerminalLBrace")
531 .node("items", "ModuleItemList")
532 .node("rbrace", "TerminalRBrace")
533 )
534 .add_struct(StructBuilder::new("FunctionDeclaration")
535 .node("optional_const", "OptionTerminalConst")
536 .node("function_kw", "TerminalFunction")
537 .key_node("name", "TerminalIdentifier")
538 .node("generic_params", "OptionWrappedGenericParamList")
539 .node("signature", "FunctionSignature")
540 )
541 .add_struct(StructBuilder::new("ItemConstant")
542 .node("attributes" ,"AttributeList")
543 .node("visibility", "Visibility")
544 .node("const_kw", "TerminalConst")
545 .key_node("name", "TerminalIdentifier")
546 .node("type_clause", "TypeClause")
547 .node("eq", "TerminalEq")
548 .node("value", "Expr")
549 .node("semicolon", "TerminalSemicolon")
550 )
551 .add_struct(StructBuilder::new("FunctionWithBody")
552 .node("attributes" ,"AttributeList")
553 .node("visibility", "Visibility")
554 .key_node("declaration", "FunctionDeclaration")
556 .node("body", "ExprBlock")
557 )
558 .add_struct(StructBuilder::new("ItemExternFunction")
559 .node("attributes" ,"AttributeList")
560 .node("visibility", "Visibility")
561 .node("extern_kw", "TerminalExtern")
562 .key_node("declaration", "FunctionDeclaration")
564 .node("semicolon", "TerminalSemicolon")
565 )
566 .add_struct(StructBuilder::new("ItemExternType")
567 .node("attributes" ,"AttributeList")
568 .node("visibility", "Visibility")
569 .node("extern_kw", "TerminalExtern")
570 .node("type_kw", "TerminalType")
571 .key_node("name", "TerminalIdentifier")
572 .node("generic_params", "OptionWrappedGenericParamList")
573 .node("semicolon", "TerminalSemicolon")
574 )
575 .add_struct(StructBuilder::new("ItemTrait")
576 .node("attributes" ,"AttributeList")
577 .node("visibility", "Visibility")
578 .node("trait_kw", "TerminalTrait")
579 .key_node("name", "TerminalIdentifier")
580 .node("generic_params", "OptionWrappedGenericParamList")
581 .node("body", "MaybeTraitBody")
582 )
583 .add_enum(EnumBuilder::new("MaybeTraitBody")
584 .node_with_explicit_kind("Some", "TraitBody")
585 .node_with_explicit_kind("None", "TerminalSemicolon")
586 )
587 .add_struct(StructBuilder::new("TraitBody")
588 .node("lbrace", "TerminalLBrace")
589 .node("items", "TraitItemList")
590 .node("rbrace", "TerminalRBrace")
591 )
592 .add_list("TraitItemList", "TraitItem")
593 .add_enum(EnumBuilder::new("TraitItem")
594 .missing("Missing")
595 .node("Function")
596 .node("Type")
597 .node("Constant")
598 .node("Impl")
599 )
600 .add_struct(StructBuilder::new("TraitItemMissing"))
601 .add_struct(StructBuilder::new("TraitItemFunction")
602 .node("attributes" ,"AttributeList")
603 .key_node("declaration", "FunctionDeclaration")
605 .node("body", "MaybeTraitFunctionBody")
606 )
607 .add_struct(StructBuilder::new("TraitItemType")
608 .node("attributes" ,"AttributeList")
609 .node("type_kw", "TerminalType")
610 .key_node("name", "TerminalIdentifier")
611 .node("generic_params", "OptionWrappedGenericParamList")
612 .node("semicolon", "TerminalSemicolon")
613 )
614 .add_struct(StructBuilder::new("TraitItemConstant")
615 .node("attributes" ,"AttributeList")
616 .node("const_kw", "TerminalConst")
617 .key_node("name", "TerminalIdentifier")
618 .node("type_clause", "TypeClause")
619 .node("semicolon", "TerminalSemicolon")
620 )
621 .add_struct(StructBuilder::new("TraitItemImpl")
622 .node("attributes" ,"AttributeList")
623 .node("impl_kw", "TerminalImpl")
624 .key_node("name", "TerminalIdentifier")
625 .node("colon", "TerminalColon")
626 .node("trait_path", "ExprPath")
627 .node("semicolon", "TerminalSemicolon")
628 )
629 .add_enum(EnumBuilder::new("MaybeTraitFunctionBody")
630 .node_with_explicit_kind("Some", "ExprBlock")
631 .node_with_explicit_kind("None", "TerminalSemicolon")
632 )
633 .add_struct(StructBuilder::new("ItemImpl")
634 .node("attributes" ,"AttributeList")
635 .node("visibility", "Visibility")
636 .node("impl_kw", "TerminalImpl")
637 .key_node("name", "TerminalIdentifier")
638 .node("generic_params", "OptionWrappedGenericParamList")
639 .node("of_kw", "TerminalOf")
640 .node("trait_path", "ExprPath")
641 .node("body", "MaybeImplBody")
642 )
643 .add_struct(StructBuilder::new("ItemHeaderDoc")
647 .node("empty", "TerminalEmpty"))
648 .add_enum(EnumBuilder::new("MaybeImplBody")
649 .node_with_explicit_kind("Some", "ImplBody")
650 .node_with_explicit_kind("None", "TerminalSemicolon")
651 )
652 .add_struct(StructBuilder::new("ImplBody")
653 .node("lbrace", "TerminalLBrace")
654 .node("items", "ImplItemList")
655 .node("rbrace", "TerminalRBrace")
656 )
657 .add_list("ImplItemList", "ImplItem")
658 .add_enum(EnumBuilder::new("ImplItem")
659 .missing("Missing")
660 .node_with_explicit_kind("Function", "FunctionWithBody")
661 .node_with_explicit_kind("Type", "ItemTypeAlias")
662 .node_with_explicit_kind("Constant", "ItemConstant")
663 .node_with_explicit_kind("Impl", "ItemImplAlias")
664 .node_with_explicit_kind("Module", "ItemModule")
666 .node_with_explicit_kind("Use", "ItemUse")
667 .node_with_explicit_kind("ExternFunction", "ItemExternFunction")
668 .node_with_explicit_kind("ExternType", "ItemExternType")
669 .node_with_explicit_kind("Trait", "ItemTrait")
670 .node_with_explicit_kind("Struct", "ItemStruct")
671 .node_with_explicit_kind("Enum", "ItemEnum")
672 )
673 .add_struct(StructBuilder::new("ImplItemMissing"))
674 .add_struct(StructBuilder::new("ItemImplAlias")
675 .node("attributes" ,"AttributeList")
676 .node("visibility", "Visibility")
677 .node("impl_kw", "TerminalImpl")
678 .key_node("name", "TerminalIdentifier")
679 .node("generic_params", "OptionWrappedGenericParamList")
680 .node("eq", "TerminalEq")
681 .node("impl_path", "ExprPath")
682 .node("semicolon", "TerminalSemicolon")
683 )
684 .add_struct(StructBuilder::new("ItemStruct")
685 .node("attributes" ,"AttributeList")
686 .node("visibility", "Visibility")
687 .node("struct_kw", "TerminalStruct")
688 .key_node("name", "TerminalIdentifier")
689 .node("generic_params", "OptionWrappedGenericParamList")
690 .node("lbrace", "TerminalLBrace")
691 .node("members", "MemberList")
692 .node("rbrace", "TerminalRBrace")
693 )
694 .add_struct(StructBuilder::new("ItemEnum")
695 .node("attributes" ,"AttributeList")
696 .node("visibility", "Visibility")
697 .node("enum_kw", "TerminalEnum")
698 .key_node("name", "TerminalIdentifier")
699 .node("generic_params", "OptionWrappedGenericParamList")
700 .node("lbrace", "TerminalLBrace")
701 .node("variants", "VariantList")
702 .node("rbrace", "TerminalRBrace")
703 )
704 .add_struct(StructBuilder::new("ItemTypeAlias")
705 .node("attributes" ,"AttributeList")
706 .node("visibility", "Visibility")
707 .node("type_kw", "TerminalType")
708 .key_node("name", "TerminalIdentifier")
709 .node("generic_params", "OptionWrappedGenericParamList")
710 .node("eq", "TerminalEq")
711 .node("ty", "Expr")
712 .node("semicolon", "TerminalSemicolon")
713 )
714 .add_struct(StructBuilder::new("ItemUse")
715 .node("attributes" ,"AttributeList")
716 .node("visibility", "Visibility")
717 .node("use_kw", "TerminalUse")
718 .key_node("use_path", "UsePath")
719 .node("semicolon", "TerminalSemicolon")
720 )
721 .add_enum(
722 EnumBuilder::new("UsePath")
723 .node("Leaf")
724 .node("Single")
725 .node("Multi")
726 .node("Star")
727 )
728 .add_struct(StructBuilder::new("UsePathLeaf")
729 .key_node("ident", "PathSegment")
730 .key_node("alias_clause", "OptionAliasClause")
731 )
732 .add_struct(StructBuilder::new("UsePathSingle")
733 .node("ident", "PathSegment")
734 .node("colon_colon", "TerminalColonColon")
735 .node("use_path", "UsePath")
736 )
737 .add_struct(StructBuilder::new("UsePathMulti")
738 .node("lbrace", "TerminalLBrace")
739 .node("use_paths", "UsePathList")
740 .node("rbrace", "TerminalRBrace")
741 )
742 .add_struct(StructBuilder::new("UsePathStar")
743 .node("star", "TerminalMul")
744 )
745 .add_separated_list("UsePathList", "UsePath", "TerminalComma")
746 .add_struct(StructBuilder::new("AliasClause")
747 .node("as_kw", "TerminalAs")
748 .key_node("alias", "TerminalIdentifier")
749 )
750 .add_option("AliasClause")
751 .add_enum(
753 EnumBuilder::new("GenericArg")
754 .node("Unnamed")
755 .node("Named")
756 )
757 .add_struct(StructBuilder::new("GenericArgNamed")
758 .node("name", "TerminalIdentifier")
759 .node("colon", "TerminalColon")
760 .node("value", "GenericArgValue")
761 )
762 .add_struct(StructBuilder::new("GenericArgUnnamed")
763 .node("value", "GenericArgValue")
764 )
765 .add_enum(
766 EnumBuilder::new("GenericArgValue")
767 .node("Expr")
768 .node_with_explicit_kind("Underscore", "TerminalUnderscore")
769 )
770 .add_struct(StructBuilder::new("GenericArgValueExpr")
771 .node("expr", "Expr")
772 )
773 .add_struct(StructBuilder::new("GenericArgs")
774 .node("langle", "TerminalLT")
775 .node("generic_args", "GenericArgList")
776 .node("rangle", "TerminalGT")
777 )
778 .add_separated_list("GenericArgList", "GenericArg", "TerminalComma")
779 .add_struct(
780 StructBuilder::new("AssociatedItemConstraint")
781 .node("item","TerminalIdentifier")
782 .node("colon","TerminalColon")
783 .node("value","Expr")
784 )
785 .add_struct(StructBuilder::new("AssociatedItemConstraints")
786 .node("lbrack", "TerminalLBrack")
787 .node("associated_item_constraints", "AssociatedItemConstraintList")
788 .node("rbrack", "TerminalRBrack")
789 )
790 .add_separated_list("AssociatedItemConstraintList", "AssociatedItemConstraint", "TerminalComma")
791 .add_option("AssociatedItemConstraints")
792 .add_option("WrappedGenericParamList")
793 .add_struct(StructBuilder::new("WrappedGenericParamList")
794 .node("langle", "TerminalLT")
795 .node("generic_params", "GenericParamList")
796 .node("rangle", "TerminalGT")
797 )
798 .add_separated_list("GenericParamList", "GenericParam", "TerminalComma")
799 .add_enum(EnumBuilder::new("GenericParam")
801 .node("Type")
802 .node("Const")
803 .node("ImplNamed")
804 .node("ImplAnonymous")
805 .node("NegativeImpl")
806 )
807 .add_struct(StructBuilder::new("GenericParamType")
808 .key_node("name", "TerminalIdentifier")
809 )
810 .add_struct(StructBuilder::new("GenericParamConst")
811 .node("const_kw", "TerminalConst")
812 .key_node("name", "TerminalIdentifier")
813 .node("colon", "TerminalColon")
814 .node("ty", "Expr")
815 )
816 .add_struct(StructBuilder::new("GenericParamImplNamed")
817 .node("impl_kw", "TerminalImpl")
818 .key_node("name", "TerminalIdentifier")
819 .node("colon", "TerminalColon")
820 .node("trait_path", "ExprPath")
821 .node("type_constrains", "OptionAssociatedItemConstraints")
822 )
823 .add_struct(StructBuilder::new("GenericParamImplAnonymous")
824 .node("plus", "TerminalPlus")
825 .node("trait_path", "ExprPath")
826 .node("type_constrains", "OptionAssociatedItemConstraints")
827 )
828 .add_struct(StructBuilder::new("GenericParamNegativeImpl")
829 .node("minus", "TerminalMinus")
830 .node("trait_path", "ExprPath")
831 )
832 .add_list("TokenList", "TokenTree")
839 .add_struct(StructBuilder::new("TokenTreeLeaf")
840 .node("leaf", "TokenNode")
841 )
842 .add_struct(StructBuilder::new("TokenTreeNode")
843 .node("subtree", "WrappedTokenTree")
844 )
845 .add_struct(StructBuilder::new("TokenTreeRepetition")
847 .node("dollar", "TerminalDollar")
848 .node("lparen", "TerminalLParen")
849 .node("elements", "TokenList")
850 .node("rparen", "TerminalRParen")
851 .node("separator", "OptionTerminalComma")
852 .node("operator", "MacroRepetitionOperator")
853 )
854 .add_struct(StructBuilder::new("TokenTreeParam")
855 .node("dollar", "TerminalDollar")
856 .node("name", "TerminalIdentifier")
857 )
858 .add_enum(EnumBuilder::new("TokenTree")
859 .missing("Missing")
860 .node_with_explicit_kind("Token", "TokenTreeLeaf")
861 .node_with_explicit_kind("Subtree", "TokenTreeNode")
862 .node_with_explicit_kind("Repetition", "TokenTreeRepetition")
863 .node_with_explicit_kind("Param", "TokenTreeParam")
864 )
865 .add_struct(StructBuilder::new("TokenTreeMissing"))
866 .add_enum(EnumBuilder::new("WrappedTokenTree")
867 .missing("Missing")
868 .node_with_explicit_kind("Parenthesized", "ParenthesizedTokenTree")
869 .node_with_explicit_kind("Braced", "BracedTokenTree")
870 .node_with_explicit_kind("Bracketed", "BracketedTokenTree")
871 )
872 .add_struct(StructBuilder::new("WrappedTokenTreeMissing"))
873 .add_struct(StructBuilder::new("ParenthesizedTokenTree")
874 .node("lparen", "TerminalLParen")
875 .node("tokens", "TokenList")
876 .node("rparen", "TerminalRParen")
877 )
878 .add_struct(StructBuilder::new("BracedTokenTree")
879 .node("lbrace", "TerminalLBrace")
880 .node("tokens", "TokenList")
881 .node("rbrace", "TerminalRBrace")
882 )
883 .add_struct(StructBuilder::new("BracketedTokenTree")
884 .node("lbrack", "TerminalLBrack")
885 .node("tokens", "TokenList")
886 .node("rbrack", "TerminalRBrack")
887 )
888 .add_struct(StructBuilder::new("ExprInlineMacro")
889 .node("path", "ExprPath")
890 .node("bang", "TerminalNot")
891 .node("arguments", "TokenTreeNode")
892 )
893 .add_struct(StructBuilder::new("ItemInlineMacro")
894 .node("attributes" ,"AttributeList")
895 .node("path", "ExprPath")
896 .node("bang", "TerminalNot")
897 .node("arguments", "TokenTreeNode")
898 .node("semicolon", "TerminalSemicolon"))
899 .add_struct(StructBuilder::new("ItemMacroDeclaration")
900 .node("attributes" ,"AttributeList")
901 .node("visibility", "Visibility")
902 .node("macro_kw", "TerminalMacro")
903 .key_node("name", "TerminalIdentifier")
904 .node("lbrace", "TerminalLBrace")
905 .node("rules", "MacroRulesList")
906 .node("rbrace", "TerminalRBrace")
907 )
908 .add_list("MacroRulesList", "MacroRule")
909 .add_struct(StructBuilder::new("MacroRule")
910 .node("lhs", "WrappedMacro")
911 .node("fat_arrow", "TerminalMatchArrow")
912 .node("rhs", "BracedMacro")
913 .node("semicolon", "TerminalSemicolon")
914 )
915 .add_struct(StructBuilder::new("ParamKind")
916 .node("colon", "TerminalColon")
917 .node("kind", "MacroParamKind")
918 )
919 .add_option("ParamKind")
920 .add_struct(StructBuilder::new("MacroParam")
921 .node("dollar", "TerminalDollar")
922 .node("name", "TerminalIdentifier")
923 .node("kind", "OptionParamKind")
924 )
925 .add_struct(StructBuilder::new("MacroRepetition")
926 .node("dollar", "TerminalDollar")
927 .node("lparen", "TerminalLParen")
928 .node("elements", "MacroElements")
929 .node("rparen", "TerminalRParen")
930 .node("separator", "OptionTerminalComma")
932 .node("operator", "MacroRepetitionOperator")
933 )
934 .add_option("TerminalComma")
935 .add_enum(EnumBuilder::new("MacroRepetitionOperator")
936 .node_with_explicit_kind("ZeroOrOne", "TerminalQuestionMark")
937 .node_with_explicit_kind("OneOrMore", "TerminalPlus")
938 .node_with_explicit_kind("ZeroOrMore", "TerminalMul")
939 .missing("Missing")
940 )
941 .add_struct(StructBuilder::new("MacroRepetitionOperatorMissing"))
942 .add_struct(StructBuilder::new("ParamIdent")
944 .node("ident", "TerminalIdentifier")
945 )
946 .add_struct(StructBuilder::new("ParamExpr")
947 .node("expr", "TerminalIdentifier")
948 )
949 .add_enum(EnumBuilder::new("MacroParamKind")
950 .node_with_explicit_kind("Identifier", "ParamIdent")
951 .node_with_explicit_kind("Expr", "ParamExpr")
952 .missing("Missing")
953 )
954 .add_struct(StructBuilder::new("MacroParamKindMissing"))
955 .add_enum(EnumBuilder::new("MacroElement")
956 .node_with_explicit_kind("Token", "TokenTreeLeaf")
957 .node_with_explicit_kind("Param", "MacroParam")
958 .node_with_explicit_kind("Subtree", "MacroWrapper")
959 .node_with_explicit_kind("Repetition", "MacroRepetition")
960 )
961 .add_list("MacroElements", "MacroElement")
962 .add_struct(StructBuilder::new("MacroWrapper")
963 .node("subtree", "WrappedMacro")
964 )
965 .add_enum(EnumBuilder::new("WrappedMacro")
966 .node_with_explicit_kind("Parenthesized", "ParenthesizedMacro")
967 .node_with_explicit_kind("Braced", "BracedMacro")
968 .node_with_explicit_kind("Bracketed", "BracketedMacro")
969 )
970 .add_struct(StructBuilder::new("ParenthesizedMacro")
971 .node("lparen", "TerminalLParen")
972 .node("elements", "MacroElements")
973 .node("rparen", "TerminalRParen")
974 )
975 .add_struct(StructBuilder::new("BracedMacro")
976 .node("lbrace", "TerminalLBrace")
977 .node("elements", "MacroElements")
978 .node("rbrace", "TerminalRBrace")
979 )
980 .add_struct(StructBuilder::new("BracketedMacro")
981 .node("lbrack", "TerminalLBrack")
982 .node("elements", "MacroElements")
983 .node("rbrack", "TerminalRBrack")
984 )
985 .add_struct(StructBuilder::new("LegacyExprInlineMacro")
986 .node("path", "ExprPath")
987 .node("bang", "TerminalNot")
988 .node("arguments", "WrappedArgList")
989 )
990 .add_struct(StructBuilder::new("LegacyItemInlineMacro")
991 .node("attributes" ,"AttributeList")
992 .node("path", "ExprPath")
993 .node("bang", "TerminalNot")
994 .node("arguments", "WrappedArgList")
995 .node("semicolon", "TerminalSemicolon"))
996 .add_struct(StructBuilder::new("TriviumSkippedNode")
999 .node("node", "SkippedNode")
1000 )
1001 .add_enum(EnumBuilder::new("SkippedNode")
1003 .node_with_explicit_kind("AttributeList", "AttributeList")
1004 .node_with_explicit_kind("VisibilityPub", "VisibilityPub")
1005 .node_with_explicit_kind("ExprPath", "ExprPath")
1006 )
1007 .add_token_and_terminal("Identifier")
1009 .add_token_and_terminal("LiteralNumber")
1010 .add_token_and_terminal("ShortString")
1011 .add_token_and_terminal("String")
1012 .add_keyword_token_and_terminal("As")
1013 .add_keyword_token_and_terminal("Const")
1014 .add_keyword_token_and_terminal("Else")
1015 .add_keyword_token_and_terminal("Enum")
1016 .add_keyword_token_and_terminal("Extern")
1017 .add_keyword_token_and_terminal("False")
1018 .add_keyword_token_and_terminal("Function")
1019 .add_keyword_token_and_terminal("If")
1020 .add_keyword_token_and_terminal("While")
1021 .add_keyword_token_and_terminal("For")
1022 .add_keyword_token_and_terminal("Loop")
1023 .add_keyword_token_and_terminal("Impl")
1024 .add_keyword_token_and_terminal("Implicits")
1025 .add_keyword_token_and_terminal("Let")
1026 .add_keyword_token_and_terminal("Macro")
1027 .add_keyword_token_and_terminal("Match")
1028 .add_keyword_token_and_terminal("Module")
1029 .add_keyword_token_and_terminal("Mut")
1030 .add_keyword_token_and_terminal("NoPanic")
1031 .add_keyword_token_and_terminal("Of")
1032 .add_keyword_token_and_terminal("Ref")
1033 .add_keyword_token_and_terminal("Continue")
1034 .add_keyword_token_and_terminal("Return")
1035 .add_keyword_token_and_terminal("Break")
1036 .add_keyword_token_and_terminal("Struct")
1037 .add_keyword_token_and_terminal("Trait")
1038 .add_keyword_token_and_terminal("True")
1039 .add_keyword_token_and_terminal("Type")
1040 .add_keyword_token_and_terminal("Use")
1041 .add_keyword_token_and_terminal("Pub")
1042 .add_token_and_terminal("And")
1043 .add_token_and_terminal("AndAnd")
1044 .add_token_and_terminal("Arrow")
1045 .add_token_and_terminal("At")
1046 .add_token_and_terminal("BadCharacters")
1047 .add_token_and_terminal("Colon")
1048 .add_token_and_terminal("ColonColon")
1049 .add_token_and_terminal("Comma")
1050 .add_token_and_terminal("Div")
1051 .add_token_and_terminal("DivEq")
1052 .add_token_and_terminal("Dollar")
1053 .add_token_and_terminal("Dot")
1054 .add_token_and_terminal("DotDot")
1055 .add_token_and_terminal("DotDotEq")
1056 .add_token_and_terminal("EndOfFile")
1057 .add_token_and_terminal("Eq")
1058 .add_token_and_terminal("EqEq")
1059 .add_token_and_terminal("GE")
1060 .add_token_and_terminal("GT")
1061 .add_token_and_terminal("Hash")
1062 .add_token_and_terminal("LBrace")
1063 .add_token_and_terminal("LBrack")
1064 .add_token_and_terminal("LE")
1065 .add_token_and_terminal("LParen")
1066 .add_token_and_terminal("LT")
1067 .add_token_and_terminal("MatchArrow")
1068 .add_token_and_terminal("Minus")
1069 .add_token_and_terminal("MinusEq")
1070 .add_token_and_terminal("Mod")
1071 .add_token_and_terminal("ModEq")
1072 .add_token_and_terminal("Mul")
1073 .add_token_and_terminal("MulEq")
1074 .add_token_and_terminal("Neq")
1075 .add_token_and_terminal("Not")
1076 .add_token_and_terminal("BitNot")
1077 .add_token_and_terminal("Or")
1078 .add_token_and_terminal("OrOr")
1079 .add_token_and_terminal("Plus")
1080 .add_token_and_terminal("PlusEq")
1081 .add_token_and_terminal("QuestionMark")
1082 .add_token_and_terminal("RBrace")
1083 .add_token_and_terminal("RBrack")
1084 .add_token_and_terminal("RParen")
1085 .add_token_and_terminal("Semicolon")
1086 .add_token_and_terminal("Underscore")
1087 .add_token_and_terminal("Xor")
1088 .add_struct(StructBuilder::new("SyntaxFile")
1090 .node("items", "ModuleItemList")
1091 .node("eof", "TerminalEndOfFile")
1092 )
1093 .add_token_and_terminal("Empty")
1094 .add_token("SingleLineComment")
1095 .add_token("SingleLineInnerComment")
1096 .add_token("SingleLineDocComment")
1097 .add_token("Whitespace")
1098 .add_token("Newline")
1099 .add_token("Missing")
1100 .add_token("Skipped")
1101 .add_all_tokens_enum("TokenNode")
1102 .get()
1103}