]> git.proxmox.com Git - rustc.git/blame - src/tools/rust-analyzer/crates/syntax/src/tests/ast_src.rs
New upstream version 1.68.2+dfsg1
[rustc.git] / src / tools / rust-analyzer / crates / syntax / src / tests / ast_src.rs
CommitLineData
064997fb
FG
1//! Defines input for code generation process.
2
3pub(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
12pub(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)]
221pub(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)]
228pub(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)]
236pub(crate) enum Field {
237 Token(String),
238 Node { name: String, ty: String, cardinality: Cardinality },
239}
240
241#[derive(Debug, Eq, PartialEq)]
242pub(crate) enum Cardinality {
243 Optional,
244 Many,
245}
246
247#[derive(Debug)]
248pub(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}