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