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