]> git.lizzy.rs Git - rust.git/blob - xtask/src/ast_src.rs
Revert "Rewrite `#[derive]` removal to be based on AST"
[rust.git] / xtask / src / ast_src.rs
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: &[
68         "as", "async", "await", "box", "break", "const", "continue", "crate", "dyn", "else",
69         "enum", "extern", "false", "fn", "for", "if", "impl", "in", "let", "loop", "macro",
70         "match", "mod", "move", "mut", "pub", "ref", "return", "self", "static", "struct", "super",
71         "trait", "true", "try", "type", "unsafe", "use", "where", "while", "yield",
72     ],
73     contextual_keywords: &["auto", "default", "existential", "union", "raw", "macro_rules"],
74     literals: &["INT_NUMBER", "FLOAT_NUMBER", "CHAR", "BYTE", "STRING", "BYTE_STRING"],
75     tokens: &[
76         "ERROR",
77         "IDENT",
78         "WHITESPACE",
79         "LIFETIME_IDENT",
80         "COMMENT",
81         "SHEBANG",
82         "L_DOLLAR",
83         "R_DOLLAR",
84     ],
85     nodes: &[
86         "SOURCE_FILE",
87         "STRUCT",
88         "UNION",
89         "ENUM",
90         "FN",
91         "RET_TYPE",
92         "EXTERN_CRATE",
93         "MODULE",
94         "USE",
95         "STATIC",
96         "CONST",
97         "TRAIT",
98         "IMPL",
99         "TYPE_ALIAS",
100         "MACRO_CALL",
101         "MACRO_RULES",
102         "MACRO_ARM",
103         "TOKEN_TREE",
104         "MACRO_DEF",
105         "PAREN_TYPE",
106         "TUPLE_TYPE",
107         "MACRO_TYPE",
108         "NEVER_TYPE",
109         "PATH_TYPE",
110         "PTR_TYPE",
111         "ARRAY_TYPE",
112         "SLICE_TYPE",
113         "REF_TYPE",
114         "INFER_TYPE",
115         "FN_PTR_TYPE",
116         "FOR_TYPE",
117         "IMPL_TRAIT_TYPE",
118         "DYN_TRAIT_TYPE",
119         "OR_PAT",
120         "PAREN_PAT",
121         "REF_PAT",
122         "BOX_PAT",
123         "IDENT_PAT",
124         "WILDCARD_PAT",
125         "REST_PAT",
126         "PATH_PAT",
127         "RECORD_PAT",
128         "RECORD_PAT_FIELD_LIST",
129         "RECORD_PAT_FIELD",
130         "TUPLE_STRUCT_PAT",
131         "TUPLE_PAT",
132         "SLICE_PAT",
133         "RANGE_PAT",
134         "LITERAL_PAT",
135         "MACRO_PAT",
136         "CONST_BLOCK_PAT",
137         // atoms
138         "TUPLE_EXPR",
139         "ARRAY_EXPR",
140         "PAREN_EXPR",
141         "PATH_EXPR",
142         "CLOSURE_EXPR",
143         "IF_EXPR",
144         "WHILE_EXPR",
145         "CONDITION",
146         "LOOP_EXPR",
147         "FOR_EXPR",
148         "CONTINUE_EXPR",
149         "BREAK_EXPR",
150         "LABEL",
151         "BLOCK_EXPR",
152         "RETURN_EXPR",
153         "YIELD_EXPR",
154         "MATCH_EXPR",
155         "MATCH_ARM_LIST",
156         "MATCH_ARM",
157         "MATCH_GUARD",
158         "RECORD_EXPR",
159         "RECORD_EXPR_FIELD_LIST",
160         "RECORD_EXPR_FIELD",
161         "EFFECT_EXPR",
162         "BOX_EXPR",
163         // postfix
164         "CALL_EXPR",
165         "INDEX_EXPR",
166         "METHOD_CALL_EXPR",
167         "FIELD_EXPR",
168         "AWAIT_EXPR",
169         "TRY_EXPR",
170         "CAST_EXPR",
171         // unary
172         "REF_EXPR",
173         "PREFIX_EXPR",
174         "RANGE_EXPR", // just weird
175         "BIN_EXPR",
176         "EXTERN_BLOCK",
177         "EXTERN_ITEM_LIST",
178         "VARIANT",
179         "RECORD_FIELD_LIST",
180         "RECORD_FIELD",
181         "TUPLE_FIELD_LIST",
182         "TUPLE_FIELD",
183         "VARIANT_LIST",
184         "ITEM_LIST",
185         "ASSOC_ITEM_LIST",
186         "ATTR",
187         "META_ITEM", // not an item actually
188         "USE_TREE",
189         "USE_TREE_LIST",
190         "PATH",
191         "PATH_SEGMENT",
192         "LITERAL",
193         "RENAME",
194         "VISIBILITY",
195         "WHERE_CLAUSE",
196         "WHERE_PRED",
197         "ABI",
198         "NAME",
199         "NAME_REF",
200         "LET_STMT",
201         "EXPR_STMT",
202         "GENERIC_PARAM_LIST",
203         "GENERIC_PARAM",
204         "LIFETIME_PARAM",
205         "TYPE_PARAM",
206         "CONST_PARAM",
207         "GENERIC_ARG_LIST",
208         "LIFETIME",
209         "LIFETIME_ARG",
210         "TYPE_ARG",
211         "ASSOC_TYPE_ARG",
212         "CONST_ARG",
213         "PARAM_LIST",
214         "PARAM",
215         "SELF_PARAM",
216         "ARG_LIST",
217         "TYPE_BOUND",
218         "TYPE_BOUND_LIST",
219         // macro related
220         "MACRO_ITEMS",
221         "MACRO_STMTS",
222     ],
223 };
224
225 #[derive(Default, Debug)]
226 pub(crate) struct AstSrc {
227     pub(crate) tokens: Vec<String>,
228     pub(crate) nodes: Vec<AstNodeSrc>,
229     pub(crate) enums: Vec<AstEnumSrc>,
230 }
231
232 #[derive(Debug)]
233 pub(crate) struct AstNodeSrc {
234     pub(crate) doc: Vec<String>,
235     pub(crate) name: String,
236     pub(crate) traits: Vec<String>,
237     pub(crate) fields: Vec<Field>,
238 }
239
240 #[derive(Debug, Eq, PartialEq)]
241 pub(crate) enum Field {
242     Token(String),
243     Node { name: String, ty: String, cardinality: Cardinality },
244 }
245
246 #[derive(Debug, Eq, PartialEq)]
247 pub(crate) enum Cardinality {
248     Optional,
249     Many,
250 }
251
252 #[derive(Debug)]
253 pub(crate) struct AstEnumSrc {
254     pub(crate) doc: Vec<String>,
255     pub(crate) name: String,
256     pub(crate) traits: Vec<String>,
257     pub(crate) variants: Vec<String>,
258 }