]>
Commit | Line | Data |
---|---|---|
064997fb FG |
1 | //! Defines input for code generation process. |
2 | ||
3 | pub(crate) struct KindsSrc<'a> { | |
4 | pub(crate) punct: &'a [(&'a str, &'a str)], | |
5 | pub(crate) keywords: &'a [&'a str], | |
6 | pub(crate) contextual_keywords: &'a [&'a str], | |
7 | pub(crate) literals: &'a [&'a str], | |
8 | pub(crate) tokens: &'a [&'a str], | |
9 | pub(crate) nodes: &'a [&'a str], | |
10 | } | |
11 | ||
12 | pub(crate) const KINDS_SRC: KindsSrc<'_> = KindsSrc { | |
13 | punct: &[ | |
14 | (";", "SEMICOLON"), | |
15 | (",", "COMMA"), | |
16 | ("(", "L_PAREN"), | |
17 | (")", "R_PAREN"), | |
18 | ("{", "L_CURLY"), | |
19 | ("}", "R_CURLY"), | |
20 | ("[", "L_BRACK"), | |
21 | ("]", "R_BRACK"), | |
22 | ("<", "L_ANGLE"), | |
23 | (">", "R_ANGLE"), | |
24 | ("@", "AT"), | |
25 | ("#", "POUND"), | |
26 | ("~", "TILDE"), | |
27 | ("?", "QUESTION"), | |
28 | ("$", "DOLLAR"), | |
29 | ("&", "AMP"), | |
30 | ("|", "PIPE"), | |
31 | ("+", "PLUS"), | |
32 | ("*", "STAR"), | |
33 | ("/", "SLASH"), | |
34 | ("^", "CARET"), | |
35 | ("%", "PERCENT"), | |
36 | ("_", "UNDERSCORE"), | |
37 | (".", "DOT"), | |
38 | ("..", "DOT2"), | |
39 | ("...", "DOT3"), | |
40 | ("..=", "DOT2EQ"), | |
41 | (":", "COLON"), | |
42 | ("::", "COLON2"), | |
43 | ("=", "EQ"), | |
44 | ("==", "EQ2"), | |
45 | ("=>", "FAT_ARROW"), | |
46 | ("!", "BANG"), | |
47 | ("!=", "NEQ"), | |
48 | ("-", "MINUS"), | |
49 | ("->", "THIN_ARROW"), | |
50 | ("<=", "LTEQ"), | |
51 | (">=", "GTEQ"), | |
52 | ("+=", "PLUSEQ"), | |
53 | ("-=", "MINUSEQ"), | |
54 | ("|=", "PIPEEQ"), | |
55 | ("&=", "AMPEQ"), | |
56 | ("^=", "CARETEQ"), | |
57 | ("/=", "SLASHEQ"), | |
58 | ("*=", "STAREQ"), | |
59 | ("%=", "PERCENTEQ"), | |
60 | ("&&", "AMP2"), | |
61 | ("||", "PIPE2"), | |
62 | ("<<", "SHL"), | |
63 | (">>", "SHR"), | |
64 | ("<<=", "SHLEQ"), | |
65 | (">>=", "SHREQ"), | |
66 | ], | |
67 | keywords: &[ | |
f25598a0 | 68 | "as", "async", "await", "box", "break", "const", "continue", "crate", "do", "dyn", "else", |
064997fb FG |
69 | "enum", "extern", "false", "fn", "for", "if", "impl", "in", "let", "loop", "macro", |
70 | "match", "mod", "move", "mut", "pub", "ref", "return", "self", "Self", "static", "struct", | |
71 | "super", "trait", "true", "try", "type", "unsafe", "use", "where", "while", "yield", | |
72 | ], | |
f25598a0 | 73 | contextual_keywords: &["auto", "default", "existential", "union", "raw", "macro_rules", "yeet"], |
064997fb FG |
74 | literals: &["INT_NUMBER", "FLOAT_NUMBER", "CHAR", "BYTE", "STRING", "BYTE_STRING"], |
75 | tokens: &["ERROR", "IDENT", "WHITESPACE", "LIFETIME_IDENT", "COMMENT", "SHEBANG"], | |
76 | nodes: &[ | |
77 | "SOURCE_FILE", | |
78 | "STRUCT", | |
79 | "UNION", | |
80 | "ENUM", | |
81 | "FN", | |
82 | "RET_TYPE", | |
83 | "EXTERN_CRATE", | |
84 | "MODULE", | |
85 | "USE", | |
86 | "STATIC", | |
87 | "CONST", | |
88 | "TRAIT", | |
89 | "IMPL", | |
90 | "TYPE_ALIAS", | |
91 | "MACRO_CALL", | |
92 | "MACRO_RULES", | |
93 | "MACRO_ARM", | |
94 | "TOKEN_TREE", | |
95 | "MACRO_DEF", | |
96 | "PAREN_TYPE", | |
97 | "TUPLE_TYPE", | |
98 | "MACRO_TYPE", | |
99 | "NEVER_TYPE", | |
100 | "PATH_TYPE", | |
101 | "PTR_TYPE", | |
102 | "ARRAY_TYPE", | |
103 | "SLICE_TYPE", | |
104 | "REF_TYPE", | |
105 | "INFER_TYPE", | |
106 | "FN_PTR_TYPE", | |
107 | "FOR_TYPE", | |
108 | "IMPL_TRAIT_TYPE", | |
109 | "DYN_TRAIT_TYPE", | |
110 | "OR_PAT", | |
111 | "PAREN_PAT", | |
112 | "REF_PAT", | |
113 | "BOX_PAT", | |
114 | "IDENT_PAT", | |
115 | "WILDCARD_PAT", | |
116 | "REST_PAT", | |
117 | "PATH_PAT", | |
118 | "RECORD_PAT", | |
119 | "RECORD_PAT_FIELD_LIST", | |
120 | "RECORD_PAT_FIELD", | |
121 | "TUPLE_STRUCT_PAT", | |
122 | "TUPLE_PAT", | |
123 | "SLICE_PAT", | |
124 | "RANGE_PAT", | |
125 | "LITERAL_PAT", | |
126 | "MACRO_PAT", | |
127 | "CONST_BLOCK_PAT", | |
128 | // atoms | |
129 | "TUPLE_EXPR", | |
130 | "ARRAY_EXPR", | |
131 | "PAREN_EXPR", | |
132 | "PATH_EXPR", | |
133 | "CLOSURE_EXPR", | |
134 | "IF_EXPR", | |
135 | "WHILE_EXPR", | |
136 | "LOOP_EXPR", | |
137 | "FOR_EXPR", | |
138 | "CONTINUE_EXPR", | |
139 | "BREAK_EXPR", | |
140 | "LABEL", | |
141 | "BLOCK_EXPR", | |
142 | "STMT_LIST", | |
143 | "RETURN_EXPR", | |
144 | "YIELD_EXPR", | |
f25598a0 | 145 | "YEET_EXPR", |
064997fb FG |
146 | "LET_EXPR", |
147 | "UNDERSCORE_EXPR", | |
148 | "MACRO_EXPR", | |
149 | "MATCH_EXPR", | |
150 | "MATCH_ARM_LIST", | |
151 | "MATCH_ARM", | |
152 | "MATCH_GUARD", | |
153 | "RECORD_EXPR", | |
154 | "RECORD_EXPR_FIELD_LIST", | |
155 | "RECORD_EXPR_FIELD", | |
156 | "BOX_EXPR", | |
157 | // postfix | |
158 | "CALL_EXPR", | |
159 | "INDEX_EXPR", | |
160 | "METHOD_CALL_EXPR", | |
161 | "FIELD_EXPR", | |
162 | "AWAIT_EXPR", | |
163 | "TRY_EXPR", | |
164 | "CAST_EXPR", | |
165 | // unary | |
166 | "REF_EXPR", | |
167 | "PREFIX_EXPR", | |
168 | "RANGE_EXPR", // just weird | |
169 | "BIN_EXPR", | |
170 | "EXTERN_BLOCK", | |
171 | "EXTERN_ITEM_LIST", | |
172 | "VARIANT", | |
173 | "RECORD_FIELD_LIST", | |
174 | "RECORD_FIELD", | |
175 | "TUPLE_FIELD_LIST", | |
176 | "TUPLE_FIELD", | |
177 | "VARIANT_LIST", | |
178 | "ITEM_LIST", | |
179 | "ASSOC_ITEM_LIST", | |
180 | "ATTR", | |
181 | "META", | |
182 | "USE_TREE", | |
183 | "USE_TREE_LIST", | |
184 | "PATH", | |
185 | "PATH_SEGMENT", | |
186 | "LITERAL", | |
187 | "RENAME", | |
188 | "VISIBILITY", | |
189 | "WHERE_CLAUSE", | |
190 | "WHERE_PRED", | |
191 | "ABI", | |
192 | "NAME", | |
193 | "NAME_REF", | |
194 | "LET_STMT", | |
195 | "LET_ELSE", | |
196 | "EXPR_STMT", | |
197 | "GENERIC_PARAM_LIST", | |
198 | "GENERIC_PARAM", | |
199 | "LIFETIME_PARAM", | |
200 | "TYPE_PARAM", | |
201 | "CONST_PARAM", | |
202 | "GENERIC_ARG_LIST", | |
203 | "LIFETIME", | |
204 | "LIFETIME_ARG", | |
205 | "TYPE_ARG", | |
206 | "ASSOC_TYPE_ARG", | |
207 | "CONST_ARG", | |
208 | "PARAM_LIST", | |
209 | "PARAM", | |
210 | "SELF_PARAM", | |
211 | "ARG_LIST", | |
212 | "TYPE_BOUND", | |
213 | "TYPE_BOUND_LIST", | |
214 | // macro related | |
215 | "MACRO_ITEMS", | |
216 | "MACRO_STMTS", | |
217 | ], | |
218 | }; | |
219 | ||
220 | #[derive(Default, Debug)] | |
221 | pub(crate) struct AstSrc { | |
222 | pub(crate) tokens: Vec<String>, | |
223 | pub(crate) nodes: Vec<AstNodeSrc>, | |
224 | pub(crate) enums: Vec<AstEnumSrc>, | |
225 | } | |
226 | ||
227 | #[derive(Debug)] | |
228 | pub(crate) struct AstNodeSrc { | |
229 | pub(crate) doc: Vec<String>, | |
230 | pub(crate) name: String, | |
231 | pub(crate) traits: Vec<String>, | |
232 | pub(crate) fields: Vec<Field>, | |
233 | } | |
234 | ||
235 | #[derive(Debug, Eq, PartialEq)] | |
236 | pub(crate) enum Field { | |
237 | Token(String), | |
238 | Node { name: String, ty: String, cardinality: Cardinality }, | |
239 | } | |
240 | ||
241 | #[derive(Debug, Eq, PartialEq)] | |
242 | pub(crate) enum Cardinality { | |
243 | Optional, | |
244 | Many, | |
245 | } | |
246 | ||
247 | #[derive(Debug)] | |
248 | pub(crate) struct AstEnumSrc { | |
249 | pub(crate) doc: Vec<String>, | |
250 | pub(crate) name: String, | |
251 | pub(crate) traits: Vec<String>, | |
252 | pub(crate) variants: Vec<String>, | |
253 | } |