diff options
33 files changed, 2368 insertions, 1768 deletions
diff --git a/.vscode/launch.json b/.vscode/launch.json index ca70fb209..3f74d7566 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json | |||
@@ -11,7 +11,7 @@ | |||
11 | "configurations": [ | 11 | "configurations": [ |
12 | { | 12 | { |
13 | // Used for testing the extension with the installed LSP server. | 13 | // Used for testing the extension with the installed LSP server. |
14 | "name": "Run Extension", | 14 | "name": "Run Installed Extension", |
15 | "type": "extensionHost", | 15 | "type": "extensionHost", |
16 | "request": "launch", | 16 | "request": "launch", |
17 | "runtimeExecutable": "${execPath}", | 17 | "runtimeExecutable": "${execPath}", |
@@ -30,7 +30,7 @@ | |||
30 | }, | 30 | }, |
31 | { | 31 | { |
32 | // Used for testing the extension with a local build of the LSP server (in `target/debug`). | 32 | // Used for testing the extension with a local build of the LSP server (in `target/debug`). |
33 | "name": "Run Extension (Dev Server)", | 33 | "name": "Run Extension (Debug Build)", |
34 | "type": "extensionHost", | 34 | "type": "extensionHost", |
35 | "request": "launch", | 35 | "request": "launch", |
36 | "runtimeExecutable": "${execPath}", | 36 | "runtimeExecutable": "${execPath}", |
@@ -50,6 +50,27 @@ | |||
50 | } | 50 | } |
51 | }, | 51 | }, |
52 | { | 52 | { |
53 | // Used for testing the extension with a local build of the LSP server (in `target/release`). | ||
54 | "name": "Run Extension (Release Build)", | ||
55 | "type": "extensionHost", | ||
56 | "request": "launch", | ||
57 | "runtimeExecutable": "${execPath}", | ||
58 | "args": [ | ||
59 | "--disable-extensions", | ||
60 | "--extensionDevelopmentPath=${workspaceFolder}/editors/code" | ||
61 | ], | ||
62 | "outFiles": [ | ||
63 | "${workspaceFolder}/editors/code/out/**/*.js" | ||
64 | ], | ||
65 | "preLaunchTask": "Build Extension", | ||
66 | "skipFiles": [ | ||
67 | "<node_internals>/**/*.js" | ||
68 | ], | ||
69 | "env": { | ||
70 | "__RA_LSP_SERVER_DEBUG": "${workspaceFolder}/target/release/rust-analyzer" | ||
71 | } | ||
72 | }, | ||
73 | { | ||
53 | // Used to attach LLDB to a running LSP server. | 74 | // Used to attach LLDB to a running LSP server. |
54 | // NOTE: Might require root permissions. For this run: | 75 | // NOTE: Might require root permissions. For this run: |
55 | // | 76 | // |
diff --git a/Cargo.lock b/Cargo.lock index 37455bc57..56404ded2 100644 --- a/Cargo.lock +++ b/Cargo.lock | |||
@@ -58,9 +58,9 @@ dependencies = [ | |||
58 | 58 | ||
59 | [[package]] | 59 | [[package]] |
60 | name = "backtrace-sys" | 60 | name = "backtrace-sys" |
61 | version = "0.1.35" | 61 | version = "0.1.36" |
62 | source = "registry+https://github.com/rust-lang/crates.io-index" | 62 | source = "registry+https://github.com/rust-lang/crates.io-index" |
63 | checksum = "7de8aba10a69c8e8d7622c5710229485ec32e9d55fdad160ea559c086fdcd118" | 63 | checksum = "78848718ee1255a2485d1309ad9cdecfc2e7d0362dd11c6829364c6b35ae1bc7" |
64 | dependencies = [ | 64 | dependencies = [ |
65 | "cc", | 65 | "cc", |
66 | "libc", | 66 | "libc", |
@@ -101,9 +101,9 @@ dependencies = [ | |||
101 | 101 | ||
102 | [[package]] | 102 | [[package]] |
103 | name = "cc" | 103 | name = "cc" |
104 | version = "1.0.50" | 104 | version = "1.0.51" |
105 | source = "registry+https://github.com/rust-lang/crates.io-index" | 105 | source = "registry+https://github.com/rust-lang/crates.io-index" |
106 | checksum = "95e28fa049fda1c330bcf9d723be7663a899c4679724b34c81e9f5a326aab8cd" | 106 | checksum = "9c9384ca4b90c0ea47e19a5c996d6643a3e73dedf9b89c65efb67587e34da1bb" |
107 | 107 | ||
108 | [[package]] | 108 | [[package]] |
109 | name = "cfg-if" | 109 | name = "cfg-if" |
@@ -800,9 +800,9 @@ dependencies = [ | |||
800 | 800 | ||
801 | [[package]] | 801 | [[package]] |
802 | name = "parking_lot_core" | 802 | name = "parking_lot_core" |
803 | version = "0.7.1" | 803 | version = "0.7.2" |
804 | source = "registry+https://github.com/rust-lang/crates.io-index" | 804 | source = "registry+https://github.com/rust-lang/crates.io-index" |
805 | checksum = "0e136c1904604defe99ce5fd71a28d473fa60a12255d511aa78a9ddf11237aeb" | 805 | checksum = "d58c7c768d4ba344e3e8d72518ac13e259d7c7ade24167003b8488e10b6740a3" |
806 | dependencies = [ | 806 | dependencies = [ |
807 | "cfg-if", | 807 | "cfg-if", |
808 | "cloudabi", | 808 | "cloudabi", |
@@ -1012,6 +1012,7 @@ dependencies = [ | |||
1012 | "ra_prof", | 1012 | "ra_prof", |
1013 | "ra_syntax", | 1013 | "ra_syntax", |
1014 | "ra_tt", | 1014 | "ra_tt", |
1015 | "test_utils", | ||
1015 | ] | 1016 | ] |
1016 | 1017 | ||
1017 | [[package]] | 1018 | [[package]] |
@@ -1741,9 +1742,9 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" | |||
1741 | 1742 | ||
1742 | [[package]] | 1743 | [[package]] |
1743 | name = "winapi-util" | 1744 | name = "winapi-util" |
1744 | version = "0.1.4" | 1745 | version = "0.1.5" |
1745 | source = "registry+https://github.com/rust-lang/crates.io-index" | 1746 | source = "registry+https://github.com/rust-lang/crates.io-index" |
1746 | checksum = "fa515c5163a99cc82bab70fd3bfdd36d827be85de63737b40fcef2ce084a436e" | 1747 | checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" |
1747 | dependencies = [ | 1748 | dependencies = [ |
1748 | "winapi 0.3.8", | 1749 | "winapi 0.3.8", |
1749 | ] | 1750 | ] |
diff --git a/crates/ra_assists/src/handlers/add_explicit_type.rs b/crates/ra_assists/src/handlers/add_explicit_type.rs index d86d804b2..6c56d93d8 100644 --- a/crates/ra_assists/src/handlers/add_explicit_type.rs +++ b/crates/ra_assists/src/handlers/add_explicit_type.rs | |||
@@ -52,21 +52,22 @@ pub(crate) fn add_explicit_type(ctx: AssistCtx) -> Option<Assist> { | |||
52 | } | 52 | } |
53 | // Infer type | 53 | // Infer type |
54 | let ty = ctx.sema.type_of_expr(&expr)?; | 54 | let ty = ctx.sema.type_of_expr(&expr)?; |
55 | // Assist not applicable if the type is unknown | 55 | |
56 | if ty.contains_unknown() { | 56 | if ty.contains_unknown() || ty.is_closure() { |
57 | return None; | 57 | return None; |
58 | } | 58 | } |
59 | 59 | ||
60 | let db = ctx.db; | 60 | let db = ctx.db; |
61 | let new_type_string = ty.display_truncated(db, None).to_string(); | ||
61 | ctx.add_assist( | 62 | ctx.add_assist( |
62 | AssistId("add_explicit_type"), | 63 | AssistId("add_explicit_type"), |
63 | format!("Insert explicit type '{}'", ty.display(db)), | 64 | format!("Insert explicit type '{}'", new_type_string), |
64 | |edit| { | 65 | |edit| { |
65 | edit.target(pat_range); | 66 | edit.target(pat_range); |
66 | if let Some(ascribed_ty) = ascribed_ty { | 67 | if let Some(ascribed_ty) = ascribed_ty { |
67 | edit.replace(ascribed_ty.syntax().text_range(), format!("{}", ty.display(db))); | 68 | edit.replace(ascribed_ty.syntax().text_range(), new_type_string); |
68 | } else { | 69 | } else { |
69 | edit.insert(name_range.end(), format!(": {}", ty.display(db))); | 70 | edit.insert(name_range.end(), format!(": {}", new_type_string)); |
70 | } | 71 | } |
71 | }, | 72 | }, |
72 | ) | 73 | ) |
@@ -174,4 +175,41 @@ mod tests { | |||
174 | "fn f() <|>{let a = match 1 {2 => 3, 3 => 5};}", | 175 | "fn f() <|>{let a = match 1 {2 => 3, 3 => 5};}", |
175 | ) | 176 | ) |
176 | } | 177 | } |
178 | |||
179 | #[test] | ||
180 | fn closure_parameters_are_not_added() { | ||
181 | check_assist_not_applicable( | ||
182 | add_explicit_type, | ||
183 | r#" | ||
184 | fn main() { | ||
185 | let multiply_by_two<|> = |i| i * 3; | ||
186 | let six = multiply_by_two(2); | ||
187 | }"#, | ||
188 | ) | ||
189 | } | ||
190 | |||
191 | #[test] | ||
192 | fn default_generics_should_not_be_added() { | ||
193 | check_assist( | ||
194 | add_explicit_type, | ||
195 | r#" | ||
196 | struct Test<K, T = u8> { | ||
197 | k: K, | ||
198 | t: T, | ||
199 | } | ||
200 | |||
201 | fn main() { | ||
202 | let test<|> = Test { t: 23, k: 33 }; | ||
203 | }"#, | ||
204 | r#" | ||
205 | struct Test<K, T = u8> { | ||
206 | k: K, | ||
207 | t: T, | ||
208 | } | ||
209 | |||
210 | fn main() { | ||
211 | let test<|>: Test<i32> = Test { t: 23, k: 33 }; | ||
212 | }"#, | ||
213 | ); | ||
214 | } | ||
177 | } | 215 | } |
diff --git a/crates/ra_hir/src/code_model.rs b/crates/ra_hir/src/code_model.rs index 6e0d89466..43f932e20 100644 --- a/crates/ra_hir/src/code_model.rs +++ b/crates/ra_hir/src/code_model.rs | |||
@@ -1132,6 +1132,10 @@ impl Type { | |||
1132 | Some(self.ty.value.as_callable()?.0) | 1132 | Some(self.ty.value.as_callable()?.0) |
1133 | } | 1133 | } |
1134 | 1134 | ||
1135 | pub fn is_closure(&self) -> bool { | ||
1136 | matches!(&self.ty.value, Ty::Apply(ApplicationTy { ctor: TypeCtor::Closure { .. }, .. })) | ||
1137 | } | ||
1138 | |||
1135 | pub fn contains_unknown(&self) -> bool { | 1139 | pub fn contains_unknown(&self) -> bool { |
1136 | return go(&self.ty.value); | 1140 | return go(&self.ty.value); |
1137 | 1141 | ||
diff --git a/crates/ra_hir_def/src/body/scope.rs b/crates/ra_hir_def/src/body/scope.rs index fe4137176..5b36a7cc1 100644 --- a/crates/ra_hir_def/src/body/scope.rs +++ b/crates/ra_hir_def/src/body/scope.rs | |||
@@ -325,8 +325,11 @@ mod tests { | |||
325 | let resolved = scopes.resolve_name_in_scope(expr_scope, &name_ref.as_name()).unwrap(); | 325 | let resolved = scopes.resolve_name_in_scope(expr_scope, &name_ref.as_name()).unwrap(); |
326 | let pat_src = source_map.pat_syntax(resolved.pat()).unwrap(); | 326 | let pat_src = source_map.pat_syntax(resolved.pat()).unwrap(); |
327 | 327 | ||
328 | let local_name = pat_src.value.either(|it| it.syntax_node_ptr(), |it| it.syntax_node_ptr()); | 328 | let local_name = pat_src.value.either( |
329 | assert_eq!(local_name.range(), expected_name.syntax().text_range()); | 329 | |it| it.syntax_node_ptr().to_node(file.syntax()), |
330 | |it| it.syntax_node_ptr().to_node(file.syntax()), | ||
331 | ); | ||
332 | assert_eq!(local_name.text_range(), expected_name.syntax().text_range()); | ||
330 | } | 333 | } |
331 | 334 | ||
332 | #[test] | 335 | #[test] |
diff --git a/crates/ra_hir_def/src/nameres/raw.rs b/crates/ra_hir_def/src/nameres/raw.rs index afd538e4a..39b011ad7 100644 --- a/crates/ra_hir_def/src/nameres/raw.rs +++ b/crates/ra_hir_def/src/nameres/raw.rs | |||
@@ -266,8 +266,8 @@ impl RawItemsCollector { | |||
266 | self.add_macro(current_module, it); | 266 | self.add_macro(current_module, it); |
267 | return; | 267 | return; |
268 | } | 268 | } |
269 | ast::ModuleItem::ExternBlock(_) => { | 269 | ast::ModuleItem::ExternBlock(it) => { |
270 | // FIXME: add extern block | 270 | self.add_extern_block(current_module, it); |
271 | return; | 271 | return; |
272 | } | 272 | } |
273 | }; | 273 | }; |
@@ -278,6 +278,34 @@ impl RawItemsCollector { | |||
278 | } | 278 | } |
279 | } | 279 | } |
280 | 280 | ||
281 | fn add_extern_block( | ||
282 | &mut self, | ||
283 | current_module: Option<Idx<ModuleData>>, | ||
284 | block: ast::ExternBlock, | ||
285 | ) { | ||
286 | if let Some(items) = block.extern_item_list() { | ||
287 | for item in items.extern_items() { | ||
288 | let attrs = self.parse_attrs(&item); | ||
289 | let visibility = | ||
290 | RawVisibility::from_ast_with_hygiene(item.visibility(), &self.hygiene); | ||
291 | let (kind, name) = match item { | ||
292 | ast::ExternItem::FnDef(it) => { | ||
293 | (DefKind::Function(self.source_ast_id_map.ast_id(&it)), it.name()) | ||
294 | } | ||
295 | ast::ExternItem::StaticDef(it) => { | ||
296 | (DefKind::Static(self.source_ast_id_map.ast_id(&it)), it.name()) | ||
297 | } | ||
298 | }; | ||
299 | |||
300 | if let Some(name) = name { | ||
301 | let name = name.as_name(); | ||
302 | let def = self.raw_items.defs.alloc(DefData { name, kind, visibility }); | ||
303 | self.push_item(current_module, attrs, RawItemKind::Def(def)); | ||
304 | } | ||
305 | } | ||
306 | } | ||
307 | } | ||
308 | |||
281 | fn add_module(&mut self, current_module: Option<Idx<ModuleData>>, module: ast::Module) { | 309 | fn add_module(&mut self, current_module: Option<Idx<ModuleData>>, module: ast::Module) { |
282 | let name = match module.name() { | 310 | let name = match module.name() { |
283 | Some(it) => it.as_name(), | 311 | Some(it) => it.as_name(), |
diff --git a/crates/ra_hir_def/src/nameres/tests.rs b/crates/ra_hir_def/src/nameres/tests.rs index 949ca7595..83120fa36 100644 --- a/crates/ra_hir_def/src/nameres/tests.rs +++ b/crates/ra_hir_def/src/nameres/tests.rs | |||
@@ -25,7 +25,7 @@ fn compute_crate_def_map(fixture: &str) -> Arc<CrateDefMap> { | |||
25 | #[test] | 25 | #[test] |
26 | fn crate_def_map_smoke_test() { | 26 | fn crate_def_map_smoke_test() { |
27 | let map = def_map( | 27 | let map = def_map( |
28 | " | 28 | r" |
29 | //- /lib.rs | 29 | //- /lib.rs |
30 | mod foo; | 30 | mod foo; |
31 | struct S; | 31 | struct S; |
@@ -45,6 +45,11 @@ fn crate_def_map_smoke_test() { | |||
45 | } | 45 | } |
46 | 46 | ||
47 | enum E { V } | 47 | enum E { V } |
48 | |||
49 | extern { | ||
50 | static EXT: u8; | ||
51 | fn ext(); | ||
52 | } | ||
48 | ", | 53 | ", |
49 | ); | 54 | ); |
50 | assert_snapshot!(map, @r###" | 55 | assert_snapshot!(map, @r###" |
@@ -61,7 +66,9 @@ fn crate_def_map_smoke_test() { | |||
61 | â‹®crate::foo::bar | 66 | â‹®crate::foo::bar |
62 | â‹®Baz: t v | 67 | â‹®Baz: t v |
63 | â‹®E: t | 68 | â‹®E: t |
69 | â‹®EXT: v | ||
64 | â‹®U: t v | 70 | â‹®U: t v |
71 | â‹®ext: v | ||
65 | "###) | 72 | "###) |
66 | } | 73 | } |
67 | 74 | ||
diff --git a/crates/ra_hir_expand/Cargo.toml b/crates/ra_hir_expand/Cargo.toml index d6e3c1f76..2cd522766 100644 --- a/crates/ra_hir_expand/Cargo.toml +++ b/crates/ra_hir_expand/Cargo.toml | |||
@@ -18,3 +18,4 @@ ra_parser = { path = "../ra_parser" } | |||
18 | ra_prof = { path = "../ra_prof" } | 18 | ra_prof = { path = "../ra_prof" } |
19 | tt = { path = "../ra_tt", package = "ra_tt" } | 19 | tt = { path = "../ra_tt", package = "ra_tt" } |
20 | mbe = { path = "../ra_mbe", package = "ra_mbe" } | 20 | mbe = { path = "../ra_mbe", package = "ra_mbe" } |
21 | test_utils = { path = "../test_utils"} | ||
diff --git a/crates/ra_hir_expand/src/proc_macro.rs b/crates/ra_hir_expand/src/proc_macro.rs index 97d1208ec..4e0e069c8 100644 --- a/crates/ra_hir_expand/src/proc_macro.rs +++ b/crates/ra_hir_expand/src/proc_macro.rs | |||
@@ -2,6 +2,7 @@ | |||
2 | 2 | ||
3 | use crate::{db::AstDatabase, LazyMacroId}; | 3 | use crate::{db::AstDatabase, LazyMacroId}; |
4 | use ra_db::{CrateId, ProcMacroId}; | 4 | use ra_db::{CrateId, ProcMacroId}; |
5 | use tt::buffer::{Cursor, TokenBuffer}; | ||
5 | 6 | ||
6 | #[derive(Debug, Clone, Copy, Eq, PartialEq, Hash)] | 7 | #[derive(Debug, Clone, Copy, Eq, PartialEq, Hash)] |
7 | pub struct ProcMacroExpander { | 8 | pub struct ProcMacroExpander { |
@@ -36,22 +37,107 @@ impl ProcMacroExpander { | |||
36 | .clone() | 37 | .clone() |
37 | .ok_or_else(|| err!("No derive macro found."))?; | 38 | .ok_or_else(|| err!("No derive macro found."))?; |
38 | 39 | ||
39 | let tt = remove_derive_atr(tt, &proc_macro.name) | 40 | let tt = remove_derive_attrs(tt) |
40 | .ok_or_else(|| err!("Fail to remove derive for custom derive"))?; | 41 | .ok_or_else(|| err!("Fail to remove derive for custom derive"))?; |
41 | 42 | ||
42 | proc_macro.expander.expand(&tt, None).map_err(mbe::ExpandError::from) | 43 | proc_macro.expander.expand(&tt, None).map_err(mbe::ExpandError::from) |
43 | } | 44 | } |
44 | } | 45 | } |
45 | 46 | ||
46 | fn remove_derive_atr(tt: &tt::Subtree, _name: &str) -> Option<tt::Subtree> { | 47 | fn eat_punct(cursor: &mut Cursor, c: char) -> bool { |
47 | // FIXME: proper handle the remove derive | 48 | if let Some(tt::TokenTree::Leaf(tt::Leaf::Punct(punct))) = cursor.token_tree() { |
48 | // We assume the first 2 tokens are #[derive(name)] | 49 | if punct.char == c { |
49 | if tt.token_trees.len() > 2 { | 50 | *cursor = cursor.bump(); |
50 | let mut tt = tt.clone(); | 51 | return true; |
51 | tt.token_trees.remove(0); | 52 | } |
52 | tt.token_trees.remove(0); | ||
53 | return Some(tt); | ||
54 | } | 53 | } |
54 | false | ||
55 | } | ||
56 | |||
57 | fn eat_subtree(cursor: &mut Cursor, kind: tt::DelimiterKind) -> bool { | ||
58 | if let Some(tt::TokenTree::Subtree(subtree)) = cursor.token_tree() { | ||
59 | if Some(kind) == subtree.delimiter_kind() { | ||
60 | *cursor = cursor.bump_subtree(); | ||
61 | return true; | ||
62 | } | ||
63 | } | ||
64 | false | ||
65 | } | ||
66 | |||
67 | fn eat_ident(cursor: &mut Cursor, t: &str) -> bool { | ||
68 | if let Some(tt::TokenTree::Leaf(tt::Leaf::Ident(ident))) = cursor.token_tree() { | ||
69 | if t == ident.text.as_str() { | ||
70 | *cursor = cursor.bump(); | ||
71 | return true; | ||
72 | } | ||
73 | } | ||
74 | false | ||
75 | } | ||
76 | |||
77 | fn remove_derive_attrs(tt: &tt::Subtree) -> Option<tt::Subtree> { | ||
78 | let buffer = TokenBuffer::new(&tt.token_trees); | ||
79 | let mut p = buffer.begin(); | ||
80 | let mut result = tt::Subtree::default(); | ||
81 | |||
82 | while !p.eof() { | ||
83 | let curr = p; | ||
55 | 84 | ||
56 | None | 85 | if eat_punct(&mut p, '#') { |
86 | eat_punct(&mut p, '!'); | ||
87 | let parent = p; | ||
88 | if eat_subtree(&mut p, tt::DelimiterKind::Bracket) { | ||
89 | if eat_ident(&mut p, "derive") { | ||
90 | p = parent.bump(); | ||
91 | continue; | ||
92 | } | ||
93 | } | ||
94 | } | ||
95 | |||
96 | result.token_trees.push(curr.token_tree()?.clone()); | ||
97 | p = curr.bump(); | ||
98 | } | ||
99 | |||
100 | Some(result) | ||
101 | } | ||
102 | |||
103 | #[cfg(test)] | ||
104 | mod test { | ||
105 | use super::*; | ||
106 | use test_utils::assert_eq_text; | ||
107 | |||
108 | #[test] | ||
109 | fn test_remove_derive_attrs() { | ||
110 | let tt = mbe::parse_to_token_tree( | ||
111 | r#" | ||
112 | #[allow(unused)] | ||
113 | #[derive(Copy)] | ||
114 | #[derive(Hello)] | ||
115 | struct A { | ||
116 | bar: u32 | ||
117 | } | ||
118 | "#, | ||
119 | ) | ||
120 | .unwrap() | ||
121 | .0; | ||
122 | let result = format!("{:#?}", remove_derive_attrs(&tt).unwrap()); | ||
123 | |||
124 | assert_eq_text!( | ||
125 | &result, | ||
126 | r#" | ||
127 | SUBTREE $ | ||
128 | PUNCH # [alone] 0 | ||
129 | SUBTREE [] 1 | ||
130 | IDENT allow 2 | ||
131 | SUBTREE () 3 | ||
132 | IDENT unused 4 | ||
133 | IDENT struct 15 | ||
134 | IDENT A 16 | ||
135 | SUBTREE {} 17 | ||
136 | IDENT bar 18 | ||
137 | PUNCH : [alone] 19 | ||
138 | IDENT u32 20 | ||
139 | "# | ||
140 | .trim() | ||
141 | ); | ||
142 | } | ||
57 | } | 143 | } |
diff --git a/crates/ra_hir_ty/src/tests.rs b/crates/ra_hir_ty/src/tests.rs index 81fc0f63a..846005baa 100644 --- a/crates/ra_hir_ty/src/tests.rs +++ b/crates/ra_hir_ty/src/tests.rs | |||
@@ -18,16 +18,19 @@ use hir_def::{ | |||
18 | nameres::CrateDefMap, | 18 | nameres::CrateDefMap, |
19 | AssocItemId, DefWithBodyId, LocalModuleId, Lookup, ModuleDefId, | 19 | AssocItemId, DefWithBodyId, LocalModuleId, Lookup, ModuleDefId, |
20 | }; | 20 | }; |
21 | use hir_expand::InFile; | 21 | use hir_expand::{db::AstDatabase, InFile}; |
22 | use insta::assert_snapshot; | 22 | use insta::assert_snapshot; |
23 | use ra_db::{fixture::WithFixture, salsa::Database, FilePosition, SourceDatabase}; | 23 | use ra_db::{fixture::WithFixture, salsa::Database, FilePosition, SourceDatabase}; |
24 | use ra_syntax::{ | 24 | use ra_syntax::{ |
25 | algo, | 25 | algo, |
26 | ast::{self, AstNode}, | 26 | ast::{self, AstNode}, |
27 | SyntaxNode, | ||
27 | }; | 28 | }; |
28 | use stdx::format_to; | 29 | use stdx::format_to; |
29 | 30 | ||
30 | use crate::{db::HirDatabase, display::HirDisplay, test_db::TestDB, InferenceResult}; | 31 | use crate::{ |
32 | db::HirDatabase, display::HirDisplay, infer::TypeMismatch, test_db::TestDB, InferenceResult, Ty, | ||
33 | }; | ||
31 | 34 | ||
32 | // These tests compare the inference results for all expressions in a file | 35 | // These tests compare the inference results for all expressions in a file |
33 | // against snapshots of the expected results using insta. Use cargo-insta to | 36 | // against snapshots of the expected results using insta. Use cargo-insta to |
@@ -67,13 +70,19 @@ fn infer_with_mismatches(content: &str, include_mismatches: bool) -> String { | |||
67 | 70 | ||
68 | let mut infer_def = |inference_result: Arc<InferenceResult>, | 71 | let mut infer_def = |inference_result: Arc<InferenceResult>, |
69 | body_source_map: Arc<BodySourceMap>| { | 72 | body_source_map: Arc<BodySourceMap>| { |
70 | let mut types = Vec::new(); | 73 | let mut types: Vec<(InFile<SyntaxNode>, &Ty)> = Vec::new(); |
71 | let mut mismatches = Vec::new(); | 74 | let mut mismatches: Vec<(InFile<SyntaxNode>, &TypeMismatch)> = Vec::new(); |
72 | 75 | ||
73 | for (pat, ty) in inference_result.type_of_pat.iter() { | 76 | for (pat, ty) in inference_result.type_of_pat.iter() { |
74 | let syntax_ptr = match body_source_map.pat_syntax(pat) { | 77 | let syntax_ptr = match body_source_map.pat_syntax(pat) { |
75 | Ok(sp) => { | 78 | Ok(sp) => { |
76 | sp.map(|ast| ast.either(|it| it.syntax_node_ptr(), |it| it.syntax_node_ptr())) | 79 | let root = db.parse_or_expand(sp.file_id).unwrap(); |
80 | sp.map(|ptr| { | ||
81 | ptr.either( | ||
82 | |it| it.to_node(&root).syntax().clone(), | ||
83 | |it| it.to_node(&root).syntax().clone(), | ||
84 | ) | ||
85 | }) | ||
77 | } | 86 | } |
78 | Err(SyntheticSyntax) => continue, | 87 | Err(SyntheticSyntax) => continue, |
79 | }; | 88 | }; |
@@ -81,29 +90,31 @@ fn infer_with_mismatches(content: &str, include_mismatches: bool) -> String { | |||
81 | } | 90 | } |
82 | 91 | ||
83 | for (expr, ty) in inference_result.type_of_expr.iter() { | 92 | for (expr, ty) in inference_result.type_of_expr.iter() { |
84 | let syntax_ptr = match body_source_map.expr_syntax(expr) { | 93 | let node = match body_source_map.expr_syntax(expr) { |
85 | Ok(sp) => sp.map(|ast| ast.syntax_node_ptr()), | 94 | Ok(sp) => { |
95 | let root = db.parse_or_expand(sp.file_id).unwrap(); | ||
96 | sp.map(|ptr| ptr.to_node(&root).syntax().clone()) | ||
97 | } | ||
86 | Err(SyntheticSyntax) => continue, | 98 | Err(SyntheticSyntax) => continue, |
87 | }; | 99 | }; |
88 | types.push((syntax_ptr.clone(), ty)); | 100 | types.push((node.clone(), ty)); |
89 | if let Some(mismatch) = inference_result.type_mismatch_for_expr(expr) { | 101 | if let Some(mismatch) = inference_result.type_mismatch_for_expr(expr) { |
90 | mismatches.push((syntax_ptr, mismatch)); | 102 | mismatches.push((node, mismatch)); |
91 | } | 103 | } |
92 | } | 104 | } |
93 | 105 | ||
94 | // sort ranges for consistency | 106 | // sort ranges for consistency |
95 | types.sort_by_key(|(src_ptr, _)| { | 107 | types.sort_by_key(|(node, _)| { |
96 | (src_ptr.value.range().start(), src_ptr.value.range().end()) | 108 | let range = node.value.text_range(); |
109 | (range.start(), range.end()) | ||
97 | }); | 110 | }); |
98 | for (src_ptr, ty) in &types { | 111 | for (node, ty) in &types { |
99 | let node = src_ptr.value.to_node(&src_ptr.file_syntax(&db)); | 112 | let (range, text) = if let Some(self_param) = ast::SelfParam::cast(node.value.clone()) { |
100 | |||
101 | let (range, text) = if let Some(self_param) = ast::SelfParam::cast(node.clone()) { | ||
102 | (self_param.self_token().unwrap().text_range(), "self".to_string()) | 113 | (self_param.self_token().unwrap().text_range(), "self".to_string()) |
103 | } else { | 114 | } else { |
104 | (src_ptr.value.range(), node.text().to_string().replace("\n", " ")) | 115 | (node.value.text_range(), node.value.text().to_string().replace("\n", " ")) |
105 | }; | 116 | }; |
106 | let macro_prefix = if src_ptr.file_id != file_id.into() { "!" } else { "" }; | 117 | let macro_prefix = if node.file_id != file_id.into() { "!" } else { "" }; |
107 | format_to!( | 118 | format_to!( |
108 | buf, | 119 | buf, |
109 | "{}{} '{}': {}\n", | 120 | "{}{} '{}': {}\n", |
@@ -114,11 +125,12 @@ fn infer_with_mismatches(content: &str, include_mismatches: bool) -> String { | |||
114 | ); | 125 | ); |
115 | } | 126 | } |
116 | if include_mismatches { | 127 | if include_mismatches { |
117 | mismatches.sort_by_key(|(src_ptr, _)| { | 128 | mismatches.sort_by_key(|(node, _)| { |
118 | (src_ptr.value.range().start(), src_ptr.value.range().end()) | 129 | let range = node.value.text_range(); |
130 | (range.start(), range.end()) | ||
119 | }); | 131 | }); |
120 | for (src_ptr, mismatch) in &mismatches { | 132 | for (src_ptr, mismatch) in &mismatches { |
121 | let range = src_ptr.value.range(); | 133 | let range = src_ptr.value.text_range(); |
122 | let macro_prefix = if src_ptr.file_id != file_id.into() { "!" } else { "" }; | 134 | let macro_prefix = if src_ptr.file_id != file_id.into() { "!" } else { "" }; |
123 | format_to!( | 135 | format_to!( |
124 | buf, | 136 | buf, |
diff --git a/crates/ra_ide/src/completion/complete_unqualified_path.rs b/crates/ra_ide/src/completion/complete_unqualified_path.rs index ad5fdcc4e..ad00154a3 100644 --- a/crates/ra_ide/src/completion/complete_unqualified_path.rs +++ b/crates/ra_ide/src/completion/complete_unqualified_path.rs | |||
@@ -4,20 +4,23 @@ use hir::ScopeDef; | |||
4 | use test_utils::tested_by; | 4 | use test_utils::tested_by; |
5 | 5 | ||
6 | use crate::completion::{CompletionContext, Completions}; | 6 | use crate::completion::{CompletionContext, Completions}; |
7 | use hir::{Adt, ModuleDef}; | ||
7 | use ra_syntax::AstNode; | 8 | use ra_syntax::AstNode; |
8 | 9 | ||
9 | pub(super) fn complete_unqualified_path(acc: &mut Completions, ctx: &CompletionContext) { | 10 | pub(super) fn complete_unqualified_path(acc: &mut Completions, ctx: &CompletionContext) { |
10 | if !ctx.is_trivial_path { | 11 | if (!ctx.is_trivial_path && !ctx.is_pat_binding_or_const) |
11 | return; | ||
12 | } | ||
13 | |||
14 | if ctx.is_pat_binding_or_const | ||
15 | || ctx.record_lit_syntax.is_some() | 12 | || ctx.record_lit_syntax.is_some() |
16 | || ctx.record_pat_syntax.is_some() | 13 | || ctx.record_pat_syntax.is_some() |
17 | { | 14 | { |
18 | return; | 15 | return; |
19 | } | 16 | } |
20 | 17 | ||
18 | complete_enum_variants(acc, ctx); | ||
19 | |||
20 | if ctx.is_pat_binding_or_const { | ||
21 | return; | ||
22 | } | ||
23 | |||
21 | ctx.scope().process_all_names(&mut |name, res| { | 24 | ctx.scope().process_all_names(&mut |name, res| { |
22 | if ctx.use_item_syntax.is_some() { | 25 | if ctx.use_item_syntax.is_some() { |
23 | if let (ScopeDef::Unknown, Some(name_ref)) = (&res, &ctx.name_ref_syntax) { | 26 | if let (ScopeDef::Unknown, Some(name_ref)) = (&res, &ctx.name_ref_syntax) { |
@@ -31,6 +34,24 @@ pub(super) fn complete_unqualified_path(acc: &mut Completions, ctx: &CompletionC | |||
31 | }); | 34 | }); |
32 | } | 35 | } |
33 | 36 | ||
37 | fn complete_enum_variants(acc: &mut Completions, ctx: &CompletionContext) { | ||
38 | if let Some(ty) = ctx.expected_type_of(&ctx.token.parent()) { | ||
39 | if let Some(Adt::Enum(enum_data)) = ty.as_adt() { | ||
40 | let variants = enum_data.variants(ctx.db); | ||
41 | let module = enum_data.module(ctx.db); | ||
42 | for variant in variants { | ||
43 | if let Some(path) = module.find_use_path(ctx.db, ModuleDef::from(variant)) { | ||
44 | // Variants with trivial paths are already added by the existing completion logic, | ||
45 | // so we should avoid adding these twice | ||
46 | if path.segments.len() > 1 { | ||
47 | acc.add_enum_variant(ctx, variant, Some(path.to_string())); | ||
48 | } | ||
49 | } | ||
50 | } | ||
51 | } | ||
52 | } | ||
53 | } | ||
54 | |||
34 | #[cfg(test)] | 55 | #[cfg(test)] |
35 | mod tests { | 56 | mod tests { |
36 | use insta::assert_debug_snapshot; | 57 | use insta::assert_debug_snapshot; |
@@ -82,7 +103,7 @@ mod tests { | |||
82 | } | 103 | } |
83 | " | 104 | " |
84 | ), | 105 | ), |
85 | @r###"[]"### | 106 | @"[]" |
86 | ); | 107 | ); |
87 | } | 108 | } |
88 | 109 | ||
@@ -1109,4 +1130,182 @@ mod tests { | |||
1109 | "### | 1130 | "### |
1110 | ); | 1131 | ); |
1111 | } | 1132 | } |
1133 | #[test] | ||
1134 | fn completes_enum_variant_matcharm() { | ||
1135 | assert_debug_snapshot!( | ||
1136 | do_reference_completion( | ||
1137 | r" | ||
1138 | enum Foo { | ||
1139 | Bar, | ||
1140 | Baz, | ||
1141 | Quux | ||
1142 | } | ||
1143 | |||
1144 | fn main() { | ||
1145 | let foo = Foo::Quux; | ||
1146 | |||
1147 | match foo { | ||
1148 | Qu<|> | ||
1149 | } | ||
1150 | } | ||
1151 | " | ||
1152 | ), | ||
1153 | @r###" | ||
1154 | [ | ||
1155 | CompletionItem { | ||
1156 | label: "Foo", | ||
1157 | source_range: [248; 250), | ||
1158 | delete: [248; 250), | ||
1159 | insert: "Foo", | ||
1160 | kind: Enum, | ||
1161 | }, | ||
1162 | CompletionItem { | ||
1163 | label: "Foo::Bar", | ||
1164 | source_range: [248; 250), | ||
1165 | delete: [248; 250), | ||
1166 | insert: "Foo::Bar", | ||
1167 | kind: EnumVariant, | ||
1168 | detail: "()", | ||
1169 | }, | ||
1170 | CompletionItem { | ||
1171 | label: "Foo::Baz", | ||
1172 | source_range: [248; 250), | ||
1173 | delete: [248; 250), | ||
1174 | insert: "Foo::Baz", | ||
1175 | kind: EnumVariant, | ||
1176 | detail: "()", | ||
1177 | }, | ||
1178 | CompletionItem { | ||
1179 | label: "Foo::Quux", | ||
1180 | source_range: [248; 250), | ||
1181 | delete: [248; 250), | ||
1182 | insert: "Foo::Quux", | ||
1183 | kind: EnumVariant, | ||
1184 | detail: "()", | ||
1185 | }, | ||
1186 | ] | ||
1187 | "### | ||
1188 | ) | ||
1189 | } | ||
1190 | |||
1191 | #[test] | ||
1192 | fn completes_enum_variant_iflet() { | ||
1193 | assert_debug_snapshot!( | ||
1194 | do_reference_completion( | ||
1195 | r" | ||
1196 | enum Foo { | ||
1197 | Bar, | ||
1198 | Baz, | ||
1199 | Quux | ||
1200 | } | ||
1201 | |||
1202 | fn main() { | ||
1203 | let foo = Foo::Quux; | ||
1204 | |||
1205 | if let Qu<|> = foo { | ||
1206 | |||
1207 | } | ||
1208 | } | ||
1209 | " | ||
1210 | ), | ||
1211 | @r###" | ||
1212 | [ | ||
1213 | CompletionItem { | ||
1214 | label: "Foo", | ||
1215 | source_range: [219; 221), | ||
1216 | delete: [219; 221), | ||
1217 | insert: "Foo", | ||
1218 | kind: Enum, | ||
1219 | }, | ||
1220 | CompletionItem { | ||
1221 | label: "Foo::Bar", | ||
1222 | source_range: [219; 221), | ||
1223 | delete: [219; 221), | ||
1224 | insert: "Foo::Bar", | ||
1225 | kind: EnumVariant, | ||
1226 | detail: "()", | ||
1227 | }, | ||
1228 | CompletionItem { | ||
1229 | label: "Foo::Baz", | ||
1230 | source_range: [219; 221), | ||
1231 | delete: [219; 221), | ||
1232 | insert: "Foo::Baz", | ||
1233 | kind: EnumVariant, | ||
1234 | detail: "()", | ||
1235 | }, | ||
1236 | CompletionItem { | ||
1237 | label: "Foo::Quux", | ||
1238 | source_range: [219; 221), | ||
1239 | delete: [219; 221), | ||
1240 | insert: "Foo::Quux", | ||
1241 | kind: EnumVariant, | ||
1242 | detail: "()", | ||
1243 | }, | ||
1244 | ] | ||
1245 | "### | ||
1246 | ) | ||
1247 | } | ||
1248 | |||
1249 | #[test] | ||
1250 | fn completes_enum_variant_basic_expr() { | ||
1251 | assert_debug_snapshot!( | ||
1252 | do_reference_completion( | ||
1253 | r" | ||
1254 | enum Foo { | ||
1255 | Bar, | ||
1256 | Baz, | ||
1257 | Quux | ||
1258 | } | ||
1259 | |||
1260 | fn main() { | ||
1261 | let foo: Foo = Q<|> | ||
1262 | } | ||
1263 | " | ||
1264 | ), | ||
1265 | @r###" | ||
1266 | [ | ||
1267 | CompletionItem { | ||
1268 | label: "Foo", | ||
1269 | source_range: [185; 186), | ||
1270 | delete: [185; 186), | ||
1271 | insert: "Foo", | ||
1272 | kind: Enum, | ||
1273 | }, | ||
1274 | CompletionItem { | ||
1275 | label: "Foo::Bar", | ||
1276 | source_range: [185; 186), | ||
1277 | delete: [185; 186), | ||
1278 | insert: "Foo::Bar", | ||
1279 | kind: EnumVariant, | ||
1280 | detail: "()", | ||
1281 | }, | ||
1282 | CompletionItem { | ||
1283 | label: "Foo::Baz", | ||
1284 | source_range: [185; 186), | ||
1285 | delete: [185; 186), | ||
1286 | insert: "Foo::Baz", | ||
1287 | kind: EnumVariant, | ||
1288 | detail: "()", | ||
1289 | }, | ||
1290 | CompletionItem { | ||
1291 | label: "Foo::Quux", | ||
1292 | source_range: [185; 186), | ||
1293 | delete: [185; 186), | ||
1294 | insert: "Foo::Quux", | ||
1295 | kind: EnumVariant, | ||
1296 | detail: "()", | ||
1297 | }, | ||
1298 | CompletionItem { | ||
1299 | label: "main()", | ||
1300 | source_range: [185; 186), | ||
1301 | delete: [185; 186), | ||
1302 | insert: "main()$0", | ||
1303 | kind: Function, | ||
1304 | lookup: "main", | ||
1305 | detail: "fn main()", | ||
1306 | }, | ||
1307 | ] | ||
1308 | "### | ||
1309 | ) | ||
1310 | } | ||
1112 | } | 1311 | } |
diff --git a/crates/ra_ide/src/completion/completion_context.rs b/crates/ra_ide/src/completion/completion_context.rs index 46e243192..dd7c8a873 100644 --- a/crates/ra_ide/src/completion/completion_context.rs +++ b/crates/ra_ide/src/completion/completion_context.rs | |||
@@ -1,6 +1,6 @@ | |||
1 | //! FIXME: write short doc here | 1 | //! FIXME: write short doc here |
2 | 2 | ||
3 | use hir::{Semantics, SemanticsScope}; | 3 | use hir::{Semantics, SemanticsScope, Type}; |
4 | use ra_db::SourceDatabase; | 4 | use ra_db::SourceDatabase; |
5 | use ra_ide_db::RootDatabase; | 5 | use ra_ide_db::RootDatabase; |
6 | use ra_syntax::{ | 6 | use ra_syntax::{ |
@@ -172,6 +172,17 @@ impl<'a> CompletionContext<'a> { | |||
172 | self.sema.scope_at_offset(&self.token.parent(), self.offset) | 172 | self.sema.scope_at_offset(&self.token.parent(), self.offset) |
173 | } | 173 | } |
174 | 174 | ||
175 | pub(crate) fn expected_type_of(&self, node: &SyntaxNode) -> Option<Type> { | ||
176 | for ancestor in node.ancestors() { | ||
177 | if let Some(pat) = ast::Pat::cast(ancestor.clone()) { | ||
178 | return self.sema.type_of_pat(&pat); | ||
179 | } else if let Some(expr) = ast::Expr::cast(ancestor) { | ||
180 | return self.sema.type_of_expr(&expr); | ||
181 | } | ||
182 | } | ||
183 | None | ||
184 | } | ||
185 | |||
175 | fn fill( | 186 | fn fill( |
176 | &mut self, | 187 | &mut self, |
177 | original_file: &SyntaxNode, | 188 | original_file: &SyntaxNode, |
diff --git a/crates/ra_ide/src/display/navigation_target.rs b/crates/ra_ide/src/display/navigation_target.rs index 6289f53f3..67bc9c31b 100644 --- a/crates/ra_ide/src/display/navigation_target.rs +++ b/crates/ra_ide/src/display/navigation_target.rs | |||
@@ -176,7 +176,7 @@ impl ToNav for FileSymbol { | |||
176 | file_id: self.file_id, | 176 | file_id: self.file_id, |
177 | name: self.name.clone(), | 177 | name: self.name.clone(), |
178 | kind: self.kind, | 178 | kind: self.kind, |
179 | full_range: self.ptr.range(), | 179 | full_range: self.range, |
180 | focus_range: self.name_range, | 180 | focus_range: self.name_range, |
181 | container_name: self.container_name.clone(), | 181 | container_name: self.container_name.clone(), |
182 | description: description_from_symbol(db, self), | 182 | description: description_from_symbol(db, self), |
diff --git a/crates/ra_ide/src/runnables.rs b/crates/ra_ide/src/runnables.rs index 9433f3a24..05a66e03c 100644 --- a/crates/ra_ide/src/runnables.rs +++ b/crates/ra_ide/src/runnables.rs | |||
@@ -34,7 +34,7 @@ impl Display for TestId { | |||
34 | 34 | ||
35 | #[derive(Debug)] | 35 | #[derive(Debug)] |
36 | pub enum RunnableKind { | 36 | pub enum RunnableKind { |
37 | Test { test_id: TestId }, | 37 | Test { test_id: TestId, attr: TestAttr }, |
38 | TestMod { path: String }, | 38 | TestMod { path: String }, |
39 | Bench { test_id: TestId }, | 39 | Bench { test_id: TestId }, |
40 | Bin, | 40 | Bin, |
@@ -77,7 +77,8 @@ fn runnable_fn(sema: &Semantics<RootDatabase>, fn_def: ast::FnDef) -> Option<Run | |||
77 | }; | 77 | }; |
78 | 78 | ||
79 | if has_test_related_attribute(&fn_def) { | 79 | if has_test_related_attribute(&fn_def) { |
80 | RunnableKind::Test { test_id } | 80 | let attr = TestAttr::from_fn(&fn_def); |
81 | RunnableKind::Test { test_id, attr } | ||
81 | } else if fn_def.has_atom_attr("bench") { | 82 | } else if fn_def.has_atom_attr("bench") { |
82 | RunnableKind::Bench { test_id } | 83 | RunnableKind::Bench { test_id } |
83 | } else { | 84 | } else { |
@@ -87,6 +88,21 @@ fn runnable_fn(sema: &Semantics<RootDatabase>, fn_def: ast::FnDef) -> Option<Run | |||
87 | Some(Runnable { range: fn_def.syntax().text_range(), kind }) | 88 | Some(Runnable { range: fn_def.syntax().text_range(), kind }) |
88 | } | 89 | } |
89 | 90 | ||
91 | #[derive(Debug)] | ||
92 | pub struct TestAttr { | ||
93 | pub ignore: bool, | ||
94 | } | ||
95 | |||
96 | impl TestAttr { | ||
97 | fn from_fn(fn_def: &ast::FnDef) -> TestAttr { | ||
98 | let ignore = fn_def | ||
99 | .attrs() | ||
100 | .filter_map(|attr| attr.simple_name()) | ||
101 | .any(|attribute_text| attribute_text == "ignore"); | ||
102 | TestAttr { ignore } | ||
103 | } | ||
104 | } | ||
105 | |||
90 | /// This is a method with a heuristics to support test methods annotated with custom test annotations, such as | 106 | /// This is a method with a heuristics to support test methods annotated with custom test annotations, such as |
91 | /// `#[test_case(...)]`, `#[tokio::test]` and similar. | 107 | /// `#[test_case(...)]`, `#[tokio::test]` and similar. |
92 | /// Also a regular `#[test]` annotation is supported. | 108 | /// Also a regular `#[test]` annotation is supported. |
@@ -157,6 +173,9 @@ mod tests { | |||
157 | test_id: Path( | 173 | test_id: Path( |
158 | "test_foo", | 174 | "test_foo", |
159 | ), | 175 | ), |
176 | attr: TestAttr { | ||
177 | ignore: false, | ||
178 | }, | ||
160 | }, | 179 | }, |
161 | }, | 180 | }, |
162 | Runnable { | 181 | Runnable { |
@@ -165,6 +184,9 @@ mod tests { | |||
165 | test_id: Path( | 184 | test_id: Path( |
166 | "test_foo", | 185 | "test_foo", |
167 | ), | 186 | ), |
187 | attr: TestAttr { | ||
188 | ignore: true, | ||
189 | }, | ||
168 | }, | 190 | }, |
169 | }, | 191 | }, |
170 | ] | 192 | ] |
@@ -200,6 +222,9 @@ mod tests { | |||
200 | test_id: Path( | 222 | test_id: Path( |
201 | "test_mod::test_foo1", | 223 | "test_mod::test_foo1", |
202 | ), | 224 | ), |
225 | attr: TestAttr { | ||
226 | ignore: false, | ||
227 | }, | ||
203 | }, | 228 | }, |
204 | }, | 229 | }, |
205 | ] | 230 | ] |
@@ -237,6 +262,9 @@ mod tests { | |||
237 | test_id: Path( | 262 | test_id: Path( |
238 | "foo::test_mod::test_foo1", | 263 | "foo::test_mod::test_foo1", |
239 | ), | 264 | ), |
265 | attr: TestAttr { | ||
266 | ignore: false, | ||
267 | }, | ||
240 | }, | 268 | }, |
241 | }, | 269 | }, |
242 | ] | 270 | ] |
@@ -276,6 +304,9 @@ mod tests { | |||
276 | test_id: Path( | 304 | test_id: Path( |
277 | "foo::bar::test_mod::test_foo1", | 305 | "foo::bar::test_mod::test_foo1", |
278 | ), | 306 | ), |
307 | attr: TestAttr { | ||
308 | ignore: false, | ||
309 | }, | ||
279 | }, | 310 | }, |
280 | }, | 311 | }, |
281 | ] | 312 | ] |
diff --git a/crates/ra_ide_db/src/symbol_index.rs b/crates/ra_ide_db/src/symbol_index.rs index 937abb433..95be11134 100644 --- a/crates/ra_ide_db/src/symbol_index.rs +++ b/crates/ra_ide_db/src/symbol_index.rs | |||
@@ -313,6 +313,7 @@ pub struct FileSymbol { | |||
313 | pub file_id: FileId, | 313 | pub file_id: FileId, |
314 | pub name: SmolStr, | 314 | pub name: SmolStr, |
315 | pub kind: SyntaxKind, | 315 | pub kind: SyntaxKind, |
316 | pub range: TextRange, | ||
316 | pub ptr: SyntaxNodePtr, | 317 | pub ptr: SyntaxNodePtr, |
317 | pub name_range: Option<TextRange>, | 318 | pub name_range: Option<TextRange>, |
318 | pub container_name: Option<SmolStr>, | 319 | pub container_name: Option<SmolStr>, |
@@ -379,6 +380,7 @@ fn to_file_symbol(node: &SyntaxNode, file_id: FileId) -> Option<FileSymbol> { | |||
379 | to_symbol(node).map(move |(name, ptr, name_range)| FileSymbol { | 380 | to_symbol(node).map(move |(name, ptr, name_range)| FileSymbol { |
380 | name, | 381 | name, |
381 | kind: node.kind(), | 382 | kind: node.kind(), |
383 | range: node.text_range(), | ||
382 | ptr, | 384 | ptr, |
383 | file_id, | 385 | file_id, |
384 | name_range: Some(name_range), | 386 | name_range: Some(name_range), |
diff --git a/crates/ra_proc_macro/src/process.rs b/crates/ra_proc_macro/src/process.rs index 673f80a7a..5bcdacb48 100644 --- a/crates/ra_proc_macro/src/process.rs +++ b/crates/ra_proc_macro/src/process.rs | |||
@@ -189,7 +189,7 @@ fn mk_child(path: &Path, args: impl IntoIterator<Item = impl AsRef<OsStr>>) -> i | |||
189 | .args(args) | 189 | .args(args) |
190 | .stdin(Stdio::piped()) | 190 | .stdin(Stdio::piped()) |
191 | .stdout(Stdio::piped()) | 191 | .stdout(Stdio::piped()) |
192 | .stderr(Stdio::null()) | 192 | .stderr(Stdio::inherit()) |
193 | .spawn() | 193 | .spawn() |
194 | } | 194 | } |
195 | 195 | ||
diff --git a/crates/ra_syntax/src/ast/generated/nodes.rs b/crates/ra_syntax/src/ast/generated/nodes.rs index 188f0df96..2cb3ad011 100644 --- a/crates/ra_syntax/src/ast/generated/nodes.rs +++ b/crates/ra_syntax/src/ast/generated/nodes.rs | |||
@@ -10,17 +10,6 @@ use crate::{ | |||
10 | pub struct SourceFile { | 10 | pub struct SourceFile { |
11 | pub(crate) syntax: SyntaxNode, | 11 | pub(crate) syntax: SyntaxNode, |
12 | } | 12 | } |
13 | impl AstNode for SourceFile { | ||
14 | fn can_cast(kind: SyntaxKind) -> bool { kind == SOURCE_FILE } | ||
15 | fn cast(syntax: SyntaxNode) -> Option<Self> { | ||
16 | if Self::can_cast(syntax.kind()) { | ||
17 | Some(Self { syntax }) | ||
18 | } else { | ||
19 | None | ||
20 | } | ||
21 | } | ||
22 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | ||
23 | } | ||
24 | impl ast::ModuleItemOwner for SourceFile {} | 13 | impl ast::ModuleItemOwner for SourceFile {} |
25 | impl ast::AttrsOwner for SourceFile {} | 14 | impl ast::AttrsOwner for SourceFile {} |
26 | impl SourceFile { | 15 | impl SourceFile { |
@@ -31,17 +20,6 @@ impl SourceFile { | |||
31 | pub struct FnDef { | 20 | pub struct FnDef { |
32 | pub(crate) syntax: SyntaxNode, | 21 | pub(crate) syntax: SyntaxNode, |
33 | } | 22 | } |
34 | impl AstNode for FnDef { | ||
35 | fn can_cast(kind: SyntaxKind) -> bool { kind == FN_DEF } | ||
36 | fn cast(syntax: SyntaxNode) -> Option<Self> { | ||
37 | if Self::can_cast(syntax.kind()) { | ||
38 | Some(Self { syntax }) | ||
39 | } else { | ||
40 | None | ||
41 | } | ||
42 | } | ||
43 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | ||
44 | } | ||
45 | impl ast::VisibilityOwner for FnDef {} | 23 | impl ast::VisibilityOwner for FnDef {} |
46 | impl ast::NameOwner for FnDef {} | 24 | impl ast::NameOwner for FnDef {} |
47 | impl ast::TypeParamsOwner for FnDef {} | 25 | impl ast::TypeParamsOwner for FnDef {} |
@@ -64,17 +42,6 @@ impl FnDef { | |||
64 | pub struct RetType { | 42 | pub struct RetType { |
65 | pub(crate) syntax: SyntaxNode, | 43 | pub(crate) syntax: SyntaxNode, |
66 | } | 44 | } |
67 | impl AstNode for RetType { | ||
68 | fn can_cast(kind: SyntaxKind) -> bool { kind == RET_TYPE } | ||
69 | fn cast(syntax: SyntaxNode) -> Option<Self> { | ||
70 | if Self::can_cast(syntax.kind()) { | ||
71 | Some(Self { syntax }) | ||
72 | } else { | ||
73 | None | ||
74 | } | ||
75 | } | ||
76 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | ||
77 | } | ||
78 | impl RetType { | 45 | impl RetType { |
79 | pub fn thin_arrow_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![->]) } | 46 | pub fn thin_arrow_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![->]) } |
80 | pub fn type_ref(&self) -> Option<TypeRef> { support::child(&self.syntax) } | 47 | pub fn type_ref(&self) -> Option<TypeRef> { support::child(&self.syntax) } |
@@ -84,17 +51,6 @@ impl RetType { | |||
84 | pub struct StructDef { | 51 | pub struct StructDef { |
85 | pub(crate) syntax: SyntaxNode, | 52 | pub(crate) syntax: SyntaxNode, |
86 | } | 53 | } |
87 | impl AstNode for StructDef { | ||
88 | fn can_cast(kind: SyntaxKind) -> bool { kind == STRUCT_DEF } | ||
89 | fn cast(syntax: SyntaxNode) -> Option<Self> { | ||
90 | if Self::can_cast(syntax.kind()) { | ||
91 | Some(Self { syntax }) | ||
92 | } else { | ||
93 | None | ||
94 | } | ||
95 | } | ||
96 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | ||
97 | } | ||
98 | impl ast::VisibilityOwner for StructDef {} | 54 | impl ast::VisibilityOwner for StructDef {} |
99 | impl ast::NameOwner for StructDef {} | 55 | impl ast::NameOwner for StructDef {} |
100 | impl ast::TypeParamsOwner for StructDef {} | 56 | impl ast::TypeParamsOwner for StructDef {} |
@@ -110,17 +66,6 @@ impl StructDef { | |||
110 | pub struct UnionDef { | 66 | pub struct UnionDef { |
111 | pub(crate) syntax: SyntaxNode, | 67 | pub(crate) syntax: SyntaxNode, |
112 | } | 68 | } |
113 | impl AstNode for UnionDef { | ||
114 | fn can_cast(kind: SyntaxKind) -> bool { kind == UNION_DEF } | ||
115 | fn cast(syntax: SyntaxNode) -> Option<Self> { | ||
116 | if Self::can_cast(syntax.kind()) { | ||
117 | Some(Self { syntax }) | ||
118 | } else { | ||
119 | None | ||
120 | } | ||
121 | } | ||
122 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | ||
123 | } | ||
124 | impl ast::VisibilityOwner for UnionDef {} | 69 | impl ast::VisibilityOwner for UnionDef {} |
125 | impl ast::NameOwner for UnionDef {} | 70 | impl ast::NameOwner for UnionDef {} |
126 | impl ast::TypeParamsOwner for UnionDef {} | 71 | impl ast::TypeParamsOwner for UnionDef {} |
@@ -137,17 +82,6 @@ impl UnionDef { | |||
137 | pub struct RecordFieldDefList { | 82 | pub struct RecordFieldDefList { |
138 | pub(crate) syntax: SyntaxNode, | 83 | pub(crate) syntax: SyntaxNode, |
139 | } | 84 | } |
140 | impl AstNode for RecordFieldDefList { | ||
141 | fn can_cast(kind: SyntaxKind) -> bool { kind == RECORD_FIELD_DEF_LIST } | ||
142 | fn cast(syntax: SyntaxNode) -> Option<Self> { | ||
143 | if Self::can_cast(syntax.kind()) { | ||
144 | Some(Self { syntax }) | ||
145 | } else { | ||
146 | None | ||
147 | } | ||
148 | } | ||
149 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | ||
150 | } | ||
151 | impl RecordFieldDefList { | 85 | impl RecordFieldDefList { |
152 | pub fn l_curly_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['{']) } | 86 | pub fn l_curly_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['{']) } |
153 | pub fn fields(&self) -> AstChildren<RecordFieldDef> { support::children(&self.syntax) } | 87 | pub fn fields(&self) -> AstChildren<RecordFieldDef> { support::children(&self.syntax) } |
@@ -158,17 +92,6 @@ impl RecordFieldDefList { | |||
158 | pub struct RecordFieldDef { | 92 | pub struct RecordFieldDef { |
159 | pub(crate) syntax: SyntaxNode, | 93 | pub(crate) syntax: SyntaxNode, |
160 | } | 94 | } |
161 | impl AstNode for RecordFieldDef { | ||
162 | fn can_cast(kind: SyntaxKind) -> bool { kind == RECORD_FIELD_DEF } | ||
163 | fn cast(syntax: SyntaxNode) -> Option<Self> { | ||
164 | if Self::can_cast(syntax.kind()) { | ||
165 | Some(Self { syntax }) | ||
166 | } else { | ||
167 | None | ||
168 | } | ||
169 | } | ||
170 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | ||
171 | } | ||
172 | impl ast::VisibilityOwner for RecordFieldDef {} | 95 | impl ast::VisibilityOwner for RecordFieldDef {} |
173 | impl ast::NameOwner for RecordFieldDef {} | 96 | impl ast::NameOwner for RecordFieldDef {} |
174 | impl ast::AttrsOwner for RecordFieldDef {} | 97 | impl ast::AttrsOwner for RecordFieldDef {} |
@@ -180,17 +103,6 @@ impl RecordFieldDef {} | |||
180 | pub struct TupleFieldDefList { | 103 | pub struct TupleFieldDefList { |
181 | pub(crate) syntax: SyntaxNode, | 104 | pub(crate) syntax: SyntaxNode, |
182 | } | 105 | } |
183 | impl AstNode for TupleFieldDefList { | ||
184 | fn can_cast(kind: SyntaxKind) -> bool { kind == TUPLE_FIELD_DEF_LIST } | ||
185 | fn cast(syntax: SyntaxNode) -> Option<Self> { | ||
186 | if Self::can_cast(syntax.kind()) { | ||
187 | Some(Self { syntax }) | ||
188 | } else { | ||
189 | None | ||
190 | } | ||
191 | } | ||
192 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | ||
193 | } | ||
194 | impl TupleFieldDefList { | 106 | impl TupleFieldDefList { |
195 | pub fn l_paren_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['(']) } | 107 | pub fn l_paren_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['(']) } |
196 | pub fn fields(&self) -> AstChildren<TupleFieldDef> { support::children(&self.syntax) } | 108 | pub fn fields(&self) -> AstChildren<TupleFieldDef> { support::children(&self.syntax) } |
@@ -201,17 +113,6 @@ impl TupleFieldDefList { | |||
201 | pub struct TupleFieldDef { | 113 | pub struct TupleFieldDef { |
202 | pub(crate) syntax: SyntaxNode, | 114 | pub(crate) syntax: SyntaxNode, |
203 | } | 115 | } |
204 | impl AstNode for TupleFieldDef { | ||
205 | fn can_cast(kind: SyntaxKind) -> bool { kind == TUPLE_FIELD_DEF } | ||
206 | fn cast(syntax: SyntaxNode) -> Option<Self> { | ||
207 | if Self::can_cast(syntax.kind()) { | ||
208 | Some(Self { syntax }) | ||
209 | } else { | ||
210 | None | ||
211 | } | ||
212 | } | ||
213 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | ||
214 | } | ||
215 | impl ast::VisibilityOwner for TupleFieldDef {} | 116 | impl ast::VisibilityOwner for TupleFieldDef {} |
216 | impl ast::AttrsOwner for TupleFieldDef {} | 117 | impl ast::AttrsOwner for TupleFieldDef {} |
217 | impl TupleFieldDef { | 118 | impl TupleFieldDef { |
@@ -222,17 +123,6 @@ impl TupleFieldDef { | |||
222 | pub struct EnumDef { | 123 | pub struct EnumDef { |
223 | pub(crate) syntax: SyntaxNode, | 124 | pub(crate) syntax: SyntaxNode, |
224 | } | 125 | } |
225 | impl AstNode for EnumDef { | ||
226 | fn can_cast(kind: SyntaxKind) -> bool { kind == ENUM_DEF } | ||
227 | fn cast(syntax: SyntaxNode) -> Option<Self> { | ||
228 | if Self::can_cast(syntax.kind()) { | ||
229 | Some(Self { syntax }) | ||
230 | } else { | ||
231 | None | ||
232 | } | ||
233 | } | ||
234 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | ||
235 | } | ||
236 | impl ast::VisibilityOwner for EnumDef {} | 126 | impl ast::VisibilityOwner for EnumDef {} |
237 | impl ast::NameOwner for EnumDef {} | 127 | impl ast::NameOwner for EnumDef {} |
238 | impl ast::TypeParamsOwner for EnumDef {} | 128 | impl ast::TypeParamsOwner for EnumDef {} |
@@ -247,17 +137,6 @@ impl EnumDef { | |||
247 | pub struct EnumVariantList { | 137 | pub struct EnumVariantList { |
248 | pub(crate) syntax: SyntaxNode, | 138 | pub(crate) syntax: SyntaxNode, |
249 | } | 139 | } |
250 | impl AstNode for EnumVariantList { | ||
251 | fn can_cast(kind: SyntaxKind) -> bool { kind == ENUM_VARIANT_LIST } | ||
252 | fn cast(syntax: SyntaxNode) -> Option<Self> { | ||
253 | if Self::can_cast(syntax.kind()) { | ||
254 | Some(Self { syntax }) | ||
255 | } else { | ||
256 | None | ||
257 | } | ||
258 | } | ||
259 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | ||
260 | } | ||
261 | impl EnumVariantList { | 140 | impl EnumVariantList { |
262 | pub fn l_curly_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['{']) } | 141 | pub fn l_curly_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['{']) } |
263 | pub fn variants(&self) -> AstChildren<EnumVariant> { support::children(&self.syntax) } | 142 | pub fn variants(&self) -> AstChildren<EnumVariant> { support::children(&self.syntax) } |
@@ -268,17 +147,6 @@ impl EnumVariantList { | |||
268 | pub struct EnumVariant { | 147 | pub struct EnumVariant { |
269 | pub(crate) syntax: SyntaxNode, | 148 | pub(crate) syntax: SyntaxNode, |
270 | } | 149 | } |
271 | impl AstNode for EnumVariant { | ||
272 | fn can_cast(kind: SyntaxKind) -> bool { kind == ENUM_VARIANT } | ||
273 | fn cast(syntax: SyntaxNode) -> Option<Self> { | ||
274 | if Self::can_cast(syntax.kind()) { | ||
275 | Some(Self { syntax }) | ||
276 | } else { | ||
277 | None | ||
278 | } | ||
279 | } | ||
280 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | ||
281 | } | ||
282 | impl ast::VisibilityOwner for EnumVariant {} | 150 | impl ast::VisibilityOwner for EnumVariant {} |
283 | impl ast::NameOwner for EnumVariant {} | 151 | impl ast::NameOwner for EnumVariant {} |
284 | impl ast::DocCommentsOwner for EnumVariant {} | 152 | impl ast::DocCommentsOwner for EnumVariant {} |
@@ -293,17 +161,6 @@ impl EnumVariant { | |||
293 | pub struct TraitDef { | 161 | pub struct TraitDef { |
294 | pub(crate) syntax: SyntaxNode, | 162 | pub(crate) syntax: SyntaxNode, |
295 | } | 163 | } |
296 | impl AstNode for TraitDef { | ||
297 | fn can_cast(kind: SyntaxKind) -> bool { kind == TRAIT_DEF } | ||
298 | fn cast(syntax: SyntaxNode) -> Option<Self> { | ||
299 | if Self::can_cast(syntax.kind()) { | ||
300 | Some(Self { syntax }) | ||
301 | } else { | ||
302 | None | ||
303 | } | ||
304 | } | ||
305 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | ||
306 | } | ||
307 | impl ast::VisibilityOwner for TraitDef {} | 164 | impl ast::VisibilityOwner for TraitDef {} |
308 | impl ast::NameOwner for TraitDef {} | 165 | impl ast::NameOwner for TraitDef {} |
309 | impl ast::AttrsOwner for TraitDef {} | 166 | impl ast::AttrsOwner for TraitDef {} |
@@ -321,17 +178,6 @@ impl TraitDef { | |||
321 | pub struct Module { | 178 | pub struct Module { |
322 | pub(crate) syntax: SyntaxNode, | 179 | pub(crate) syntax: SyntaxNode, |
323 | } | 180 | } |
324 | impl AstNode for Module { | ||
325 | fn can_cast(kind: SyntaxKind) -> bool { kind == MODULE } | ||
326 | fn cast(syntax: SyntaxNode) -> Option<Self> { | ||
327 | if Self::can_cast(syntax.kind()) { | ||
328 | Some(Self { syntax }) | ||
329 | } else { | ||
330 | None | ||
331 | } | ||
332 | } | ||
333 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | ||
334 | } | ||
335 | impl ast::VisibilityOwner for Module {} | 181 | impl ast::VisibilityOwner for Module {} |
336 | impl ast::NameOwner for Module {} | 182 | impl ast::NameOwner for Module {} |
337 | impl ast::AttrsOwner for Module {} | 183 | impl ast::AttrsOwner for Module {} |
@@ -346,17 +192,6 @@ impl Module { | |||
346 | pub struct ItemList { | 192 | pub struct ItemList { |
347 | pub(crate) syntax: SyntaxNode, | 193 | pub(crate) syntax: SyntaxNode, |
348 | } | 194 | } |
349 | impl AstNode for ItemList { | ||
350 | fn can_cast(kind: SyntaxKind) -> bool { kind == ITEM_LIST } | ||
351 | fn cast(syntax: SyntaxNode) -> Option<Self> { | ||
352 | if Self::can_cast(syntax.kind()) { | ||
353 | Some(Self { syntax }) | ||
354 | } else { | ||
355 | None | ||
356 | } | ||
357 | } | ||
358 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | ||
359 | } | ||
360 | impl ast::ModuleItemOwner for ItemList {} | 195 | impl ast::ModuleItemOwner for ItemList {} |
361 | impl ItemList { | 196 | impl ItemList { |
362 | pub fn l_curly_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['{']) } | 197 | pub fn l_curly_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['{']) } |
@@ -368,17 +203,6 @@ impl ItemList { | |||
368 | pub struct ConstDef { | 203 | pub struct ConstDef { |
369 | pub(crate) syntax: SyntaxNode, | 204 | pub(crate) syntax: SyntaxNode, |
370 | } | 205 | } |
371 | impl AstNode for ConstDef { | ||
372 | fn can_cast(kind: SyntaxKind) -> bool { kind == CONST_DEF } | ||
373 | fn cast(syntax: SyntaxNode) -> Option<Self> { | ||
374 | if Self::can_cast(syntax.kind()) { | ||
375 | Some(Self { syntax }) | ||
376 | } else { | ||
377 | None | ||
378 | } | ||
379 | } | ||
380 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | ||
381 | } | ||
382 | impl ast::VisibilityOwner for ConstDef {} | 206 | impl ast::VisibilityOwner for ConstDef {} |
383 | impl ast::NameOwner for ConstDef {} | 207 | impl ast::NameOwner for ConstDef {} |
384 | impl ast::TypeParamsOwner for ConstDef {} | 208 | impl ast::TypeParamsOwner for ConstDef {} |
@@ -397,17 +221,6 @@ impl ConstDef { | |||
397 | pub struct StaticDef { | 221 | pub struct StaticDef { |
398 | pub(crate) syntax: SyntaxNode, | 222 | pub(crate) syntax: SyntaxNode, |
399 | } | 223 | } |
400 | impl AstNode for StaticDef { | ||
401 | fn can_cast(kind: SyntaxKind) -> bool { kind == STATIC_DEF } | ||
402 | fn cast(syntax: SyntaxNode) -> Option<Self> { | ||
403 | if Self::can_cast(syntax.kind()) { | ||
404 | Some(Self { syntax }) | ||
405 | } else { | ||
406 | None | ||
407 | } | ||
408 | } | ||
409 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | ||
410 | } | ||
411 | impl ast::VisibilityOwner for StaticDef {} | 224 | impl ast::VisibilityOwner for StaticDef {} |
412 | impl ast::NameOwner for StaticDef {} | 225 | impl ast::NameOwner for StaticDef {} |
413 | impl ast::TypeParamsOwner for StaticDef {} | 226 | impl ast::TypeParamsOwner for StaticDef {} |
@@ -426,17 +239,6 @@ impl StaticDef { | |||
426 | pub struct TypeAliasDef { | 239 | pub struct TypeAliasDef { |
427 | pub(crate) syntax: SyntaxNode, | 240 | pub(crate) syntax: SyntaxNode, |
428 | } | 241 | } |
429 | impl AstNode for TypeAliasDef { | ||
430 | fn can_cast(kind: SyntaxKind) -> bool { kind == TYPE_ALIAS_DEF } | ||
431 | fn cast(syntax: SyntaxNode) -> Option<Self> { | ||
432 | if Self::can_cast(syntax.kind()) { | ||
433 | Some(Self { syntax }) | ||
434 | } else { | ||
435 | None | ||
436 | } | ||
437 | } | ||
438 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | ||
439 | } | ||
440 | impl ast::VisibilityOwner for TypeAliasDef {} | 242 | impl ast::VisibilityOwner for TypeAliasDef {} |
441 | impl ast::NameOwner for TypeAliasDef {} | 243 | impl ast::NameOwner for TypeAliasDef {} |
442 | impl ast::TypeParamsOwner for TypeAliasDef {} | 244 | impl ast::TypeParamsOwner for TypeAliasDef {} |
@@ -455,17 +257,6 @@ impl TypeAliasDef { | |||
455 | pub struct ImplDef { | 257 | pub struct ImplDef { |
456 | pub(crate) syntax: SyntaxNode, | 258 | pub(crate) syntax: SyntaxNode, |
457 | } | 259 | } |
458 | impl AstNode for ImplDef { | ||
459 | fn can_cast(kind: SyntaxKind) -> bool { kind == IMPL_DEF } | ||
460 | fn cast(syntax: SyntaxNode) -> Option<Self> { | ||
461 | if Self::can_cast(syntax.kind()) { | ||
462 | Some(Self { syntax }) | ||
463 | } else { | ||
464 | None | ||
465 | } | ||
466 | } | ||
467 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | ||
468 | } | ||
469 | impl ast::TypeParamsOwner for ImplDef {} | 260 | impl ast::TypeParamsOwner for ImplDef {} |
470 | impl ast::AttrsOwner for ImplDef {} | 261 | impl ast::AttrsOwner for ImplDef {} |
471 | impl ImplDef { | 262 | impl ImplDef { |
@@ -482,8 +273,1262 @@ impl ImplDef { | |||
482 | pub struct ParenType { | 273 | pub struct ParenType { |
483 | pub(crate) syntax: SyntaxNode, | 274 | pub(crate) syntax: SyntaxNode, |
484 | } | 275 | } |
485 | impl AstNode for ParenType { | 276 | impl ParenType { |
486 | fn can_cast(kind: SyntaxKind) -> bool { kind == PAREN_TYPE } | 277 | pub fn l_paren_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['(']) } |
278 | pub fn type_ref(&self) -> Option<TypeRef> { support::child(&self.syntax) } | ||
279 | pub fn r_paren_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![')']) } | ||
280 | } | ||
281 | |||
282 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
283 | pub struct TupleType { | ||
284 | pub(crate) syntax: SyntaxNode, | ||
285 | } | ||
286 | impl TupleType { | ||
287 | pub fn l_paren_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['(']) } | ||
288 | pub fn fields(&self) -> AstChildren<TypeRef> { support::children(&self.syntax) } | ||
289 | pub fn r_paren_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![')']) } | ||
290 | } | ||
291 | |||
292 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
293 | pub struct NeverType { | ||
294 | pub(crate) syntax: SyntaxNode, | ||
295 | } | ||
296 | impl NeverType { | ||
297 | pub fn excl_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![!]) } | ||
298 | } | ||
299 | |||
300 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
301 | pub struct PathType { | ||
302 | pub(crate) syntax: SyntaxNode, | ||
303 | } | ||
304 | impl PathType { | ||
305 | pub fn path(&self) -> Option<Path> { support::child(&self.syntax) } | ||
306 | } | ||
307 | |||
308 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
309 | pub struct PointerType { | ||
310 | pub(crate) syntax: SyntaxNode, | ||
311 | } | ||
312 | impl PointerType { | ||
313 | pub fn star_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![*]) } | ||
314 | pub fn const_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![const]) } | ||
315 | pub fn mut_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![mut]) } | ||
316 | pub fn type_ref(&self) -> Option<TypeRef> { support::child(&self.syntax) } | ||
317 | } | ||
318 | |||
319 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
320 | pub struct ArrayType { | ||
321 | pub(crate) syntax: SyntaxNode, | ||
322 | } | ||
323 | impl ArrayType { | ||
324 | pub fn l_brack_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['[']) } | ||
325 | pub fn type_ref(&self) -> Option<TypeRef> { support::child(&self.syntax) } | ||
326 | pub fn semicolon_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![;]) } | ||
327 | pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
328 | pub fn r_brack_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![']']) } | ||
329 | } | ||
330 | |||
331 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
332 | pub struct SliceType { | ||
333 | pub(crate) syntax: SyntaxNode, | ||
334 | } | ||
335 | impl SliceType { | ||
336 | pub fn l_brack_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['[']) } | ||
337 | pub fn type_ref(&self) -> Option<TypeRef> { support::child(&self.syntax) } | ||
338 | pub fn r_brack_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![']']) } | ||
339 | } | ||
340 | |||
341 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
342 | pub struct ReferenceType { | ||
343 | pub(crate) syntax: SyntaxNode, | ||
344 | } | ||
345 | impl ReferenceType { | ||
346 | pub fn amp_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![&]) } | ||
347 | pub fn lifetime_token(&self) -> Option<SyntaxToken> { | ||
348 | support::token(&self.syntax, T![lifetime]) | ||
349 | } | ||
350 | pub fn mut_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![mut]) } | ||
351 | pub fn type_ref(&self) -> Option<TypeRef> { support::child(&self.syntax) } | ||
352 | } | ||
353 | |||
354 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
355 | pub struct PlaceholderType { | ||
356 | pub(crate) syntax: SyntaxNode, | ||
357 | } | ||
358 | impl PlaceholderType { | ||
359 | pub fn underscore_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![_]) } | ||
360 | } | ||
361 | |||
362 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
363 | pub struct FnPointerType { | ||
364 | pub(crate) syntax: SyntaxNode, | ||
365 | } | ||
366 | impl FnPointerType { | ||
367 | pub fn abi(&self) -> Option<Abi> { support::child(&self.syntax) } | ||
368 | pub fn unsafe_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![unsafe]) } | ||
369 | pub fn fn_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![fn]) } | ||
370 | pub fn param_list(&self) -> Option<ParamList> { support::child(&self.syntax) } | ||
371 | pub fn ret_type(&self) -> Option<RetType> { support::child(&self.syntax) } | ||
372 | } | ||
373 | |||
374 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
375 | pub struct ForType { | ||
376 | pub(crate) syntax: SyntaxNode, | ||
377 | } | ||
378 | impl ForType { | ||
379 | pub fn for_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![for]) } | ||
380 | pub fn type_param_list(&self) -> Option<TypeParamList> { support::child(&self.syntax) } | ||
381 | pub fn type_ref(&self) -> Option<TypeRef> { support::child(&self.syntax) } | ||
382 | } | ||
383 | |||
384 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
385 | pub struct ImplTraitType { | ||
386 | pub(crate) syntax: SyntaxNode, | ||
387 | } | ||
388 | impl ast::TypeBoundsOwner for ImplTraitType {} | ||
389 | impl ImplTraitType { | ||
390 | pub fn impl_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![impl]) } | ||
391 | } | ||
392 | |||
393 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
394 | pub struct DynTraitType { | ||
395 | pub(crate) syntax: SyntaxNode, | ||
396 | } | ||
397 | impl ast::TypeBoundsOwner for DynTraitType {} | ||
398 | impl DynTraitType { | ||
399 | pub fn dyn_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![dyn]) } | ||
400 | } | ||
401 | |||
402 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
403 | pub struct TupleExpr { | ||
404 | pub(crate) syntax: SyntaxNode, | ||
405 | } | ||
406 | impl ast::AttrsOwner for TupleExpr {} | ||
407 | impl TupleExpr { | ||
408 | pub fn l_paren_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['(']) } | ||
409 | pub fn exprs(&self) -> AstChildren<Expr> { support::children(&self.syntax) } | ||
410 | pub fn r_paren_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![')']) } | ||
411 | } | ||
412 | |||
413 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
414 | pub struct ArrayExpr { | ||
415 | pub(crate) syntax: SyntaxNode, | ||
416 | } | ||
417 | impl ast::AttrsOwner for ArrayExpr {} | ||
418 | impl ArrayExpr { | ||
419 | pub fn l_brack_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['[']) } | ||
420 | pub fn exprs(&self) -> AstChildren<Expr> { support::children(&self.syntax) } | ||
421 | pub fn semicolon_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![;]) } | ||
422 | pub fn r_brack_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![']']) } | ||
423 | } | ||
424 | |||
425 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
426 | pub struct ParenExpr { | ||
427 | pub(crate) syntax: SyntaxNode, | ||
428 | } | ||
429 | impl ast::AttrsOwner for ParenExpr {} | ||
430 | impl ParenExpr { | ||
431 | pub fn l_paren_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['(']) } | ||
432 | pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
433 | pub fn r_paren_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![')']) } | ||
434 | } | ||
435 | |||
436 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
437 | pub struct PathExpr { | ||
438 | pub(crate) syntax: SyntaxNode, | ||
439 | } | ||
440 | impl PathExpr { | ||
441 | pub fn path(&self) -> Option<Path> { support::child(&self.syntax) } | ||
442 | } | ||
443 | |||
444 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
445 | pub struct LambdaExpr { | ||
446 | pub(crate) syntax: SyntaxNode, | ||
447 | } | ||
448 | impl ast::AttrsOwner for LambdaExpr {} | ||
449 | impl LambdaExpr { | ||
450 | pub fn static_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![static]) } | ||
451 | pub fn async_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![async]) } | ||
452 | pub fn move_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![move]) } | ||
453 | pub fn param_list(&self) -> Option<ParamList> { support::child(&self.syntax) } | ||
454 | pub fn ret_type(&self) -> Option<RetType> { support::child(&self.syntax) } | ||
455 | pub fn body(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
456 | } | ||
457 | |||
458 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
459 | pub struct IfExpr { | ||
460 | pub(crate) syntax: SyntaxNode, | ||
461 | } | ||
462 | impl ast::AttrsOwner for IfExpr {} | ||
463 | impl IfExpr { | ||
464 | pub fn if_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![if]) } | ||
465 | pub fn condition(&self) -> Option<Condition> { support::child(&self.syntax) } | ||
466 | } | ||
467 | |||
468 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
469 | pub struct LoopExpr { | ||
470 | pub(crate) syntax: SyntaxNode, | ||
471 | } | ||
472 | impl ast::AttrsOwner for LoopExpr {} | ||
473 | impl ast::LoopBodyOwner for LoopExpr {} | ||
474 | impl LoopExpr { | ||
475 | pub fn loop_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![loop]) } | ||
476 | } | ||
477 | |||
478 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
479 | pub struct TryBlockExpr { | ||
480 | pub(crate) syntax: SyntaxNode, | ||
481 | } | ||
482 | impl ast::AttrsOwner for TryBlockExpr {} | ||
483 | impl TryBlockExpr { | ||
484 | pub fn try_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![try]) } | ||
485 | pub fn body(&self) -> Option<BlockExpr> { support::child(&self.syntax) } | ||
486 | } | ||
487 | |||
488 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
489 | pub struct ForExpr { | ||
490 | pub(crate) syntax: SyntaxNode, | ||
491 | } | ||
492 | impl ast::AttrsOwner for ForExpr {} | ||
493 | impl ast::LoopBodyOwner for ForExpr {} | ||
494 | impl ForExpr { | ||
495 | pub fn for_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![for]) } | ||
496 | pub fn pat(&self) -> Option<Pat> { support::child(&self.syntax) } | ||
497 | pub fn in_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![in]) } | ||
498 | pub fn iterable(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
499 | } | ||
500 | |||
501 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
502 | pub struct WhileExpr { | ||
503 | pub(crate) syntax: SyntaxNode, | ||
504 | } | ||
505 | impl ast::AttrsOwner for WhileExpr {} | ||
506 | impl ast::LoopBodyOwner for WhileExpr {} | ||
507 | impl WhileExpr { | ||
508 | pub fn while_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![while]) } | ||
509 | pub fn condition(&self) -> Option<Condition> { support::child(&self.syntax) } | ||
510 | } | ||
511 | |||
512 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
513 | pub struct ContinueExpr { | ||
514 | pub(crate) syntax: SyntaxNode, | ||
515 | } | ||
516 | impl ast::AttrsOwner for ContinueExpr {} | ||
517 | impl ContinueExpr { | ||
518 | pub fn continue_token(&self) -> Option<SyntaxToken> { | ||
519 | support::token(&self.syntax, T![continue]) | ||
520 | } | ||
521 | pub fn lifetime_token(&self) -> Option<SyntaxToken> { | ||
522 | support::token(&self.syntax, T![lifetime]) | ||
523 | } | ||
524 | } | ||
525 | |||
526 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
527 | pub struct BreakExpr { | ||
528 | pub(crate) syntax: SyntaxNode, | ||
529 | } | ||
530 | impl ast::AttrsOwner for BreakExpr {} | ||
531 | impl BreakExpr { | ||
532 | pub fn break_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![break]) } | ||
533 | pub fn lifetime_token(&self) -> Option<SyntaxToken> { | ||
534 | support::token(&self.syntax, T![lifetime]) | ||
535 | } | ||
536 | pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
537 | } | ||
538 | |||
539 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
540 | pub struct Label { | ||
541 | pub(crate) syntax: SyntaxNode, | ||
542 | } | ||
543 | impl Label { | ||
544 | pub fn lifetime_token(&self) -> Option<SyntaxToken> { | ||
545 | support::token(&self.syntax, T![lifetime]) | ||
546 | } | ||
547 | } | ||
548 | |||
549 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
550 | pub struct BlockExpr { | ||
551 | pub(crate) syntax: SyntaxNode, | ||
552 | } | ||
553 | impl ast::AttrsOwner for BlockExpr {} | ||
554 | impl BlockExpr { | ||
555 | pub fn label(&self) -> Option<Label> { support::child(&self.syntax) } | ||
556 | pub fn unsafe_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![unsafe]) } | ||
557 | pub fn block(&self) -> Option<Block> { support::child(&self.syntax) } | ||
558 | } | ||
559 | |||
560 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
561 | pub struct ReturnExpr { | ||
562 | pub(crate) syntax: SyntaxNode, | ||
563 | } | ||
564 | impl ast::AttrsOwner for ReturnExpr {} | ||
565 | impl ReturnExpr { | ||
566 | pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
567 | } | ||
568 | |||
569 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
570 | pub struct CallExpr { | ||
571 | pub(crate) syntax: SyntaxNode, | ||
572 | } | ||
573 | impl ast::ArgListOwner for CallExpr {} | ||
574 | impl CallExpr { | ||
575 | pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
576 | } | ||
577 | |||
578 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
579 | pub struct MethodCallExpr { | ||
580 | pub(crate) syntax: SyntaxNode, | ||
581 | } | ||
582 | impl ast::AttrsOwner for MethodCallExpr {} | ||
583 | impl ast::ArgListOwner for MethodCallExpr {} | ||
584 | impl MethodCallExpr { | ||
585 | pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
586 | pub fn dot_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![.]) } | ||
587 | pub fn name_ref(&self) -> Option<NameRef> { support::child(&self.syntax) } | ||
588 | pub fn type_arg_list(&self) -> Option<TypeArgList> { support::child(&self.syntax) } | ||
589 | } | ||
590 | |||
591 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
592 | pub struct IndexExpr { | ||
593 | pub(crate) syntax: SyntaxNode, | ||
594 | } | ||
595 | impl ast::AttrsOwner for IndexExpr {} | ||
596 | impl IndexExpr { | ||
597 | pub fn l_brack_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['[']) } | ||
598 | pub fn r_brack_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![']']) } | ||
599 | } | ||
600 | |||
601 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
602 | pub struct FieldExpr { | ||
603 | pub(crate) syntax: SyntaxNode, | ||
604 | } | ||
605 | impl ast::AttrsOwner for FieldExpr {} | ||
606 | impl FieldExpr { | ||
607 | pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
608 | pub fn dot_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![.]) } | ||
609 | pub fn name_ref(&self) -> Option<NameRef> { support::child(&self.syntax) } | ||
610 | } | ||
611 | |||
612 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
613 | pub struct AwaitExpr { | ||
614 | pub(crate) syntax: SyntaxNode, | ||
615 | } | ||
616 | impl ast::AttrsOwner for AwaitExpr {} | ||
617 | impl AwaitExpr { | ||
618 | pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
619 | pub fn dot_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![.]) } | ||
620 | pub fn await_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![await]) } | ||
621 | } | ||
622 | |||
623 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
624 | pub struct TryExpr { | ||
625 | pub(crate) syntax: SyntaxNode, | ||
626 | } | ||
627 | impl ast::AttrsOwner for TryExpr {} | ||
628 | impl TryExpr { | ||
629 | pub fn try_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![try]) } | ||
630 | pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
631 | } | ||
632 | |||
633 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
634 | pub struct CastExpr { | ||
635 | pub(crate) syntax: SyntaxNode, | ||
636 | } | ||
637 | impl ast::AttrsOwner for CastExpr {} | ||
638 | impl CastExpr { | ||
639 | pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
640 | pub fn as_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![as]) } | ||
641 | pub fn type_ref(&self) -> Option<TypeRef> { support::child(&self.syntax) } | ||
642 | } | ||
643 | |||
644 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
645 | pub struct RefExpr { | ||
646 | pub(crate) syntax: SyntaxNode, | ||
647 | } | ||
648 | impl ast::AttrsOwner for RefExpr {} | ||
649 | impl RefExpr { | ||
650 | pub fn amp_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![&]) } | ||
651 | pub fn raw_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![raw]) } | ||
652 | pub fn mut_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![mut]) } | ||
653 | pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
654 | } | ||
655 | |||
656 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
657 | pub struct PrefixExpr { | ||
658 | pub(crate) syntax: SyntaxNode, | ||
659 | } | ||
660 | impl ast::AttrsOwner for PrefixExpr {} | ||
661 | impl PrefixExpr { | ||
662 | pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
663 | } | ||
664 | |||
665 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
666 | pub struct BoxExpr { | ||
667 | pub(crate) syntax: SyntaxNode, | ||
668 | } | ||
669 | impl ast::AttrsOwner for BoxExpr {} | ||
670 | impl BoxExpr { | ||
671 | pub fn box_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![box]) } | ||
672 | pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
673 | } | ||
674 | |||
675 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
676 | pub struct RangeExpr { | ||
677 | pub(crate) syntax: SyntaxNode, | ||
678 | } | ||
679 | impl ast::AttrsOwner for RangeExpr {} | ||
680 | impl RangeExpr {} | ||
681 | |||
682 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
683 | pub struct BinExpr { | ||
684 | pub(crate) syntax: SyntaxNode, | ||
685 | } | ||
686 | impl ast::AttrsOwner for BinExpr {} | ||
687 | impl BinExpr {} | ||
688 | |||
689 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
690 | pub struct Literal { | ||
691 | pub(crate) syntax: SyntaxNode, | ||
692 | } | ||
693 | impl Literal {} | ||
694 | |||
695 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
696 | pub struct MatchExpr { | ||
697 | pub(crate) syntax: SyntaxNode, | ||
698 | } | ||
699 | impl ast::AttrsOwner for MatchExpr {} | ||
700 | impl MatchExpr { | ||
701 | pub fn match_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![match]) } | ||
702 | pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
703 | pub fn match_arm_list(&self) -> Option<MatchArmList> { support::child(&self.syntax) } | ||
704 | } | ||
705 | |||
706 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
707 | pub struct MatchArmList { | ||
708 | pub(crate) syntax: SyntaxNode, | ||
709 | } | ||
710 | impl ast::AttrsOwner for MatchArmList {} | ||
711 | impl MatchArmList { | ||
712 | pub fn l_curly_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['{']) } | ||
713 | pub fn arms(&self) -> AstChildren<MatchArm> { support::children(&self.syntax) } | ||
714 | pub fn r_curly_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['}']) } | ||
715 | } | ||
716 | |||
717 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
718 | pub struct MatchArm { | ||
719 | pub(crate) syntax: SyntaxNode, | ||
720 | } | ||
721 | impl ast::AttrsOwner for MatchArm {} | ||
722 | impl MatchArm { | ||
723 | pub fn pat(&self) -> Option<Pat> { support::child(&self.syntax) } | ||
724 | pub fn guard(&self) -> Option<MatchGuard> { support::child(&self.syntax) } | ||
725 | pub fn fat_arrow_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![=>]) } | ||
726 | pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
727 | } | ||
728 | |||
729 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
730 | pub struct MatchGuard { | ||
731 | pub(crate) syntax: SyntaxNode, | ||
732 | } | ||
733 | impl MatchGuard { | ||
734 | pub fn if_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![if]) } | ||
735 | pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
736 | } | ||
737 | |||
738 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
739 | pub struct RecordLit { | ||
740 | pub(crate) syntax: SyntaxNode, | ||
741 | } | ||
742 | impl RecordLit { | ||
743 | pub fn path(&self) -> Option<Path> { support::child(&self.syntax) } | ||
744 | pub fn record_field_list(&self) -> Option<RecordFieldList> { support::child(&self.syntax) } | ||
745 | } | ||
746 | |||
747 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
748 | pub struct RecordFieldList { | ||
749 | pub(crate) syntax: SyntaxNode, | ||
750 | } | ||
751 | impl RecordFieldList { | ||
752 | pub fn l_curly_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['{']) } | ||
753 | pub fn fields(&self) -> AstChildren<RecordField> { support::children(&self.syntax) } | ||
754 | pub fn dotdot_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![..]) } | ||
755 | pub fn spread(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
756 | pub fn r_curly_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['}']) } | ||
757 | } | ||
758 | |||
759 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
760 | pub struct RecordField { | ||
761 | pub(crate) syntax: SyntaxNode, | ||
762 | } | ||
763 | impl ast::AttrsOwner for RecordField {} | ||
764 | impl RecordField { | ||
765 | pub fn name_ref(&self) -> Option<NameRef> { support::child(&self.syntax) } | ||
766 | pub fn colon_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![:]) } | ||
767 | pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
768 | } | ||
769 | |||
770 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
771 | pub struct OrPat { | ||
772 | pub(crate) syntax: SyntaxNode, | ||
773 | } | ||
774 | impl OrPat { | ||
775 | pub fn pats(&self) -> AstChildren<Pat> { support::children(&self.syntax) } | ||
776 | } | ||
777 | |||
778 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
779 | pub struct ParenPat { | ||
780 | pub(crate) syntax: SyntaxNode, | ||
781 | } | ||
782 | impl ParenPat { | ||
783 | pub fn l_paren_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['(']) } | ||
784 | pub fn pat(&self) -> Option<Pat> { support::child(&self.syntax) } | ||
785 | pub fn r_paren_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![')']) } | ||
786 | } | ||
787 | |||
788 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
789 | pub struct RefPat { | ||
790 | pub(crate) syntax: SyntaxNode, | ||
791 | } | ||
792 | impl RefPat { | ||
793 | pub fn amp_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![&]) } | ||
794 | pub fn mut_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![mut]) } | ||
795 | pub fn pat(&self) -> Option<Pat> { support::child(&self.syntax) } | ||
796 | } | ||
797 | |||
798 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
799 | pub struct BoxPat { | ||
800 | pub(crate) syntax: SyntaxNode, | ||
801 | } | ||
802 | impl BoxPat { | ||
803 | pub fn box_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![box]) } | ||
804 | pub fn pat(&self) -> Option<Pat> { support::child(&self.syntax) } | ||
805 | } | ||
806 | |||
807 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
808 | pub struct BindPat { | ||
809 | pub(crate) syntax: SyntaxNode, | ||
810 | } | ||
811 | impl ast::AttrsOwner for BindPat {} | ||
812 | impl ast::NameOwner for BindPat {} | ||
813 | impl BindPat { | ||
814 | pub fn ref_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![ref]) } | ||
815 | pub fn mut_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![mut]) } | ||
816 | pub fn at_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![@]) } | ||
817 | pub fn pat(&self) -> Option<Pat> { support::child(&self.syntax) } | ||
818 | } | ||
819 | |||
820 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
821 | pub struct PlaceholderPat { | ||
822 | pub(crate) syntax: SyntaxNode, | ||
823 | } | ||
824 | impl PlaceholderPat { | ||
825 | pub fn underscore_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![_]) } | ||
826 | } | ||
827 | |||
828 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
829 | pub struct DotDotPat { | ||
830 | pub(crate) syntax: SyntaxNode, | ||
831 | } | ||
832 | impl DotDotPat { | ||
833 | pub fn dotdot_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![..]) } | ||
834 | } | ||
835 | |||
836 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
837 | pub struct PathPat { | ||
838 | pub(crate) syntax: SyntaxNode, | ||
839 | } | ||
840 | impl PathPat { | ||
841 | pub fn path(&self) -> Option<Path> { support::child(&self.syntax) } | ||
842 | } | ||
843 | |||
844 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
845 | pub struct SlicePat { | ||
846 | pub(crate) syntax: SyntaxNode, | ||
847 | } | ||
848 | impl SlicePat { | ||
849 | pub fn l_brack_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['[']) } | ||
850 | pub fn args(&self) -> AstChildren<Pat> { support::children(&self.syntax) } | ||
851 | pub fn r_brack_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![']']) } | ||
852 | } | ||
853 | |||
854 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
855 | pub struct RangePat { | ||
856 | pub(crate) syntax: SyntaxNode, | ||
857 | } | ||
858 | impl RangePat {} | ||
859 | |||
860 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
861 | pub struct LiteralPat { | ||
862 | pub(crate) syntax: SyntaxNode, | ||
863 | } | ||
864 | impl LiteralPat { | ||
865 | pub fn literal(&self) -> Option<Literal> { support::child(&self.syntax) } | ||
866 | } | ||
867 | |||
868 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
869 | pub struct MacroPat { | ||
870 | pub(crate) syntax: SyntaxNode, | ||
871 | } | ||
872 | impl MacroPat { | ||
873 | pub fn macro_call(&self) -> Option<MacroCall> { support::child(&self.syntax) } | ||
874 | } | ||
875 | |||
876 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
877 | pub struct RecordPat { | ||
878 | pub(crate) syntax: SyntaxNode, | ||
879 | } | ||
880 | impl RecordPat { | ||
881 | pub fn record_field_pat_list(&self) -> Option<RecordFieldPatList> { | ||
882 | support::child(&self.syntax) | ||
883 | } | ||
884 | pub fn path(&self) -> Option<Path> { support::child(&self.syntax) } | ||
885 | } | ||
886 | |||
887 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
888 | pub struct RecordFieldPatList { | ||
889 | pub(crate) syntax: SyntaxNode, | ||
890 | } | ||
891 | impl RecordFieldPatList { | ||
892 | pub fn l_curly_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['{']) } | ||
893 | pub fn pats(&self) -> AstChildren<RecordInnerPat> { support::children(&self.syntax) } | ||
894 | pub fn record_field_pats(&self) -> AstChildren<RecordFieldPat> { | ||
895 | support::children(&self.syntax) | ||
896 | } | ||
897 | pub fn bind_pats(&self) -> AstChildren<BindPat> { support::children(&self.syntax) } | ||
898 | pub fn dotdot_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![..]) } | ||
899 | pub fn r_curly_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['}']) } | ||
900 | } | ||
901 | |||
902 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
903 | pub struct RecordFieldPat { | ||
904 | pub(crate) syntax: SyntaxNode, | ||
905 | } | ||
906 | impl ast::AttrsOwner for RecordFieldPat {} | ||
907 | impl RecordFieldPat { | ||
908 | pub fn name_ref(&self) -> Option<NameRef> { support::child(&self.syntax) } | ||
909 | pub fn colon_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![:]) } | ||
910 | pub fn pat(&self) -> Option<Pat> { support::child(&self.syntax) } | ||
911 | } | ||
912 | |||
913 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
914 | pub struct TupleStructPat { | ||
915 | pub(crate) syntax: SyntaxNode, | ||
916 | } | ||
917 | impl TupleStructPat { | ||
918 | pub fn path(&self) -> Option<Path> { support::child(&self.syntax) } | ||
919 | pub fn l_paren_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['(']) } | ||
920 | pub fn args(&self) -> AstChildren<Pat> { support::children(&self.syntax) } | ||
921 | pub fn r_paren_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![')']) } | ||
922 | } | ||
923 | |||
924 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
925 | pub struct TuplePat { | ||
926 | pub(crate) syntax: SyntaxNode, | ||
927 | } | ||
928 | impl TuplePat { | ||
929 | pub fn l_paren_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['(']) } | ||
930 | pub fn args(&self) -> AstChildren<Pat> { support::children(&self.syntax) } | ||
931 | pub fn r_paren_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![')']) } | ||
932 | } | ||
933 | |||
934 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
935 | pub struct Visibility { | ||
936 | pub(crate) syntax: SyntaxNode, | ||
937 | } | ||
938 | impl Visibility { | ||
939 | pub fn pub_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![pub]) } | ||
940 | pub fn super_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![super]) } | ||
941 | pub fn self_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![self]) } | ||
942 | pub fn crate_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![crate]) } | ||
943 | } | ||
944 | |||
945 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
946 | pub struct Name { | ||
947 | pub(crate) syntax: SyntaxNode, | ||
948 | } | ||
949 | impl Name { | ||
950 | pub fn ident_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![ident]) } | ||
951 | } | ||
952 | |||
953 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
954 | pub struct NameRef { | ||
955 | pub(crate) syntax: SyntaxNode, | ||
956 | } | ||
957 | impl NameRef {} | ||
958 | |||
959 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
960 | pub struct MacroCall { | ||
961 | pub(crate) syntax: SyntaxNode, | ||
962 | } | ||
963 | impl ast::NameOwner for MacroCall {} | ||
964 | impl ast::AttrsOwner for MacroCall {} | ||
965 | impl ast::DocCommentsOwner for MacroCall {} | ||
966 | impl MacroCall { | ||
967 | pub fn path(&self) -> Option<Path> { support::child(&self.syntax) } | ||
968 | pub fn excl_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![!]) } | ||
969 | pub fn token_tree(&self) -> Option<TokenTree> { support::child(&self.syntax) } | ||
970 | pub fn semicolon_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![;]) } | ||
971 | } | ||
972 | |||
973 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
974 | pub struct Attr { | ||
975 | pub(crate) syntax: SyntaxNode, | ||
976 | } | ||
977 | impl Attr { | ||
978 | pub fn pound_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![#]) } | ||
979 | pub fn excl_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![!]) } | ||
980 | pub fn l_brack_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['[']) } | ||
981 | pub fn path(&self) -> Option<Path> { support::child(&self.syntax) } | ||
982 | pub fn eq_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![=]) } | ||
983 | pub fn input(&self) -> Option<AttrInput> { support::child(&self.syntax) } | ||
984 | pub fn r_brack_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![']']) } | ||
985 | } | ||
986 | |||
987 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
988 | pub struct TokenTree { | ||
989 | pub(crate) syntax: SyntaxNode, | ||
990 | } | ||
991 | impl TokenTree {} | ||
992 | |||
993 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
994 | pub struct TypeParamList { | ||
995 | pub(crate) syntax: SyntaxNode, | ||
996 | } | ||
997 | impl TypeParamList { | ||
998 | pub fn l_angle_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![<]) } | ||
999 | pub fn generic_params(&self) -> AstChildren<GenericParam> { support::children(&self.syntax) } | ||
1000 | pub fn type_params(&self) -> AstChildren<TypeParam> { support::children(&self.syntax) } | ||
1001 | pub fn lifetime_params(&self) -> AstChildren<LifetimeParam> { support::children(&self.syntax) } | ||
1002 | pub fn const_params(&self) -> AstChildren<ConstParam> { support::children(&self.syntax) } | ||
1003 | pub fn r_angle_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![>]) } | ||
1004 | } | ||
1005 | |||
1006 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1007 | pub struct TypeParam { | ||
1008 | pub(crate) syntax: SyntaxNode, | ||
1009 | } | ||
1010 | impl ast::NameOwner for TypeParam {} | ||
1011 | impl ast::AttrsOwner for TypeParam {} | ||
1012 | impl ast::TypeBoundsOwner for TypeParam {} | ||
1013 | impl TypeParam { | ||
1014 | pub fn eq_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![=]) } | ||
1015 | pub fn default_type(&self) -> Option<TypeRef> { support::child(&self.syntax) } | ||
1016 | } | ||
1017 | |||
1018 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1019 | pub struct ConstParam { | ||
1020 | pub(crate) syntax: SyntaxNode, | ||
1021 | } | ||
1022 | impl ast::NameOwner for ConstParam {} | ||
1023 | impl ast::AttrsOwner for ConstParam {} | ||
1024 | impl ast::TypeAscriptionOwner for ConstParam {} | ||
1025 | impl ConstParam { | ||
1026 | pub fn eq_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![=]) } | ||
1027 | pub fn default_val(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
1028 | } | ||
1029 | |||
1030 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1031 | pub struct LifetimeParam { | ||
1032 | pub(crate) syntax: SyntaxNode, | ||
1033 | } | ||
1034 | impl ast::AttrsOwner for LifetimeParam {} | ||
1035 | impl LifetimeParam { | ||
1036 | pub fn lifetime_token(&self) -> Option<SyntaxToken> { | ||
1037 | support::token(&self.syntax, T![lifetime]) | ||
1038 | } | ||
1039 | } | ||
1040 | |||
1041 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1042 | pub struct TypeBound { | ||
1043 | pub(crate) syntax: SyntaxNode, | ||
1044 | } | ||
1045 | impl TypeBound { | ||
1046 | pub fn lifetime_token(&self) -> Option<SyntaxToken> { | ||
1047 | support::token(&self.syntax, T![lifetime]) | ||
1048 | } | ||
1049 | pub fn const_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![const]) } | ||
1050 | pub fn type_ref(&self) -> Option<TypeRef> { support::child(&self.syntax) } | ||
1051 | } | ||
1052 | |||
1053 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1054 | pub struct TypeBoundList { | ||
1055 | pub(crate) syntax: SyntaxNode, | ||
1056 | } | ||
1057 | impl TypeBoundList { | ||
1058 | pub fn bounds(&self) -> AstChildren<TypeBound> { support::children(&self.syntax) } | ||
1059 | } | ||
1060 | |||
1061 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1062 | pub struct WherePred { | ||
1063 | pub(crate) syntax: SyntaxNode, | ||
1064 | } | ||
1065 | impl ast::TypeBoundsOwner for WherePred {} | ||
1066 | impl WherePred { | ||
1067 | pub fn lifetime_token(&self) -> Option<SyntaxToken> { | ||
1068 | support::token(&self.syntax, T![lifetime]) | ||
1069 | } | ||
1070 | pub fn type_ref(&self) -> Option<TypeRef> { support::child(&self.syntax) } | ||
1071 | } | ||
1072 | |||
1073 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1074 | pub struct WhereClause { | ||
1075 | pub(crate) syntax: SyntaxNode, | ||
1076 | } | ||
1077 | impl WhereClause { | ||
1078 | pub fn where_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![where]) } | ||
1079 | pub fn predicates(&self) -> AstChildren<WherePred> { support::children(&self.syntax) } | ||
1080 | } | ||
1081 | |||
1082 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1083 | pub struct Abi { | ||
1084 | pub(crate) syntax: SyntaxNode, | ||
1085 | } | ||
1086 | impl Abi {} | ||
1087 | |||
1088 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1089 | pub struct ExprStmt { | ||
1090 | pub(crate) syntax: SyntaxNode, | ||
1091 | } | ||
1092 | impl ast::AttrsOwner for ExprStmt {} | ||
1093 | impl ExprStmt { | ||
1094 | pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
1095 | pub fn semicolon_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![;]) } | ||
1096 | } | ||
1097 | |||
1098 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1099 | pub struct LetStmt { | ||
1100 | pub(crate) syntax: SyntaxNode, | ||
1101 | } | ||
1102 | impl ast::AttrsOwner for LetStmt {} | ||
1103 | impl ast::TypeAscriptionOwner for LetStmt {} | ||
1104 | impl LetStmt { | ||
1105 | pub fn let_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![let]) } | ||
1106 | pub fn pat(&self) -> Option<Pat> { support::child(&self.syntax) } | ||
1107 | pub fn eq_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![=]) } | ||
1108 | pub fn initializer(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
1109 | pub fn semicolon_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![;]) } | ||
1110 | } | ||
1111 | |||
1112 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1113 | pub struct Condition { | ||
1114 | pub(crate) syntax: SyntaxNode, | ||
1115 | } | ||
1116 | impl Condition { | ||
1117 | pub fn let_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![let]) } | ||
1118 | pub fn pat(&self) -> Option<Pat> { support::child(&self.syntax) } | ||
1119 | pub fn eq_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![=]) } | ||
1120 | pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
1121 | } | ||
1122 | |||
1123 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1124 | pub struct Block { | ||
1125 | pub(crate) syntax: SyntaxNode, | ||
1126 | } | ||
1127 | impl ast::AttrsOwner for Block {} | ||
1128 | impl ast::ModuleItemOwner for Block {} | ||
1129 | impl Block { | ||
1130 | pub fn l_curly_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['{']) } | ||
1131 | pub fn statements(&self) -> AstChildren<Stmt> { support::children(&self.syntax) } | ||
1132 | pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
1133 | pub fn r_curly_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['}']) } | ||
1134 | } | ||
1135 | |||
1136 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1137 | pub struct ParamList { | ||
1138 | pub(crate) syntax: SyntaxNode, | ||
1139 | } | ||
1140 | impl ParamList { | ||
1141 | pub fn l_paren_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['(']) } | ||
1142 | pub fn self_param(&self) -> Option<SelfParam> { support::child(&self.syntax) } | ||
1143 | pub fn params(&self) -> AstChildren<Param> { support::children(&self.syntax) } | ||
1144 | pub fn r_paren_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![')']) } | ||
1145 | } | ||
1146 | |||
1147 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1148 | pub struct SelfParam { | ||
1149 | pub(crate) syntax: SyntaxNode, | ||
1150 | } | ||
1151 | impl ast::TypeAscriptionOwner for SelfParam {} | ||
1152 | impl ast::AttrsOwner for SelfParam {} | ||
1153 | impl SelfParam { | ||
1154 | pub fn amp_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![&]) } | ||
1155 | pub fn mut_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![mut]) } | ||
1156 | pub fn lifetime_token(&self) -> Option<SyntaxToken> { | ||
1157 | support::token(&self.syntax, T![lifetime]) | ||
1158 | } | ||
1159 | pub fn self_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![self]) } | ||
1160 | } | ||
1161 | |||
1162 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1163 | pub struct Param { | ||
1164 | pub(crate) syntax: SyntaxNode, | ||
1165 | } | ||
1166 | impl ast::TypeAscriptionOwner for Param {} | ||
1167 | impl ast::AttrsOwner for Param {} | ||
1168 | impl Param { | ||
1169 | pub fn pat(&self) -> Option<Pat> { support::child(&self.syntax) } | ||
1170 | pub fn dotdotdot_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![...]) } | ||
1171 | } | ||
1172 | |||
1173 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1174 | pub struct UseItem { | ||
1175 | pub(crate) syntax: SyntaxNode, | ||
1176 | } | ||
1177 | impl ast::AttrsOwner for UseItem {} | ||
1178 | impl ast::VisibilityOwner for UseItem {} | ||
1179 | impl UseItem { | ||
1180 | pub fn use_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![use]) } | ||
1181 | pub fn use_tree(&self) -> Option<UseTree> { support::child(&self.syntax) } | ||
1182 | } | ||
1183 | |||
1184 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1185 | pub struct UseTree { | ||
1186 | pub(crate) syntax: SyntaxNode, | ||
1187 | } | ||
1188 | impl UseTree { | ||
1189 | pub fn path(&self) -> Option<Path> { support::child(&self.syntax) } | ||
1190 | pub fn star_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![*]) } | ||
1191 | pub fn use_tree_list(&self) -> Option<UseTreeList> { support::child(&self.syntax) } | ||
1192 | pub fn alias(&self) -> Option<Alias> { support::child(&self.syntax) } | ||
1193 | } | ||
1194 | |||
1195 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1196 | pub struct Alias { | ||
1197 | pub(crate) syntax: SyntaxNode, | ||
1198 | } | ||
1199 | impl ast::NameOwner for Alias {} | ||
1200 | impl Alias { | ||
1201 | pub fn as_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![as]) } | ||
1202 | } | ||
1203 | |||
1204 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1205 | pub struct UseTreeList { | ||
1206 | pub(crate) syntax: SyntaxNode, | ||
1207 | } | ||
1208 | impl UseTreeList { | ||
1209 | pub fn l_curly_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['{']) } | ||
1210 | pub fn use_trees(&self) -> AstChildren<UseTree> { support::children(&self.syntax) } | ||
1211 | pub fn r_curly_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['}']) } | ||
1212 | } | ||
1213 | |||
1214 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1215 | pub struct ExternCrateItem { | ||
1216 | pub(crate) syntax: SyntaxNode, | ||
1217 | } | ||
1218 | impl ast::AttrsOwner for ExternCrateItem {} | ||
1219 | impl ast::VisibilityOwner for ExternCrateItem {} | ||
1220 | impl ExternCrateItem { | ||
1221 | pub fn extern_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![extern]) } | ||
1222 | pub fn crate_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![crate]) } | ||
1223 | pub fn name_ref(&self) -> Option<NameRef> { support::child(&self.syntax) } | ||
1224 | pub fn alias(&self) -> Option<Alias> { support::child(&self.syntax) } | ||
1225 | } | ||
1226 | |||
1227 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1228 | pub struct ArgList { | ||
1229 | pub(crate) syntax: SyntaxNode, | ||
1230 | } | ||
1231 | impl ArgList { | ||
1232 | pub fn l_paren_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['(']) } | ||
1233 | pub fn args(&self) -> AstChildren<Expr> { support::children(&self.syntax) } | ||
1234 | pub fn r_paren_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![')']) } | ||
1235 | } | ||
1236 | |||
1237 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1238 | pub struct Path { | ||
1239 | pub(crate) syntax: SyntaxNode, | ||
1240 | } | ||
1241 | impl Path { | ||
1242 | pub fn segment(&self) -> Option<PathSegment> { support::child(&self.syntax) } | ||
1243 | pub fn qualifier(&self) -> Option<Path> { support::child(&self.syntax) } | ||
1244 | } | ||
1245 | |||
1246 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1247 | pub struct PathSegment { | ||
1248 | pub(crate) syntax: SyntaxNode, | ||
1249 | } | ||
1250 | impl PathSegment { | ||
1251 | pub fn coloncolon_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![::]) } | ||
1252 | pub fn l_angle_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![<]) } | ||
1253 | pub fn name_ref(&self) -> Option<NameRef> { support::child(&self.syntax) } | ||
1254 | pub fn type_arg_list(&self) -> Option<TypeArgList> { support::child(&self.syntax) } | ||
1255 | pub fn param_list(&self) -> Option<ParamList> { support::child(&self.syntax) } | ||
1256 | pub fn ret_type(&self) -> Option<RetType> { support::child(&self.syntax) } | ||
1257 | pub fn path_type(&self) -> Option<PathType> { support::child(&self.syntax) } | ||
1258 | pub fn r_angle_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![>]) } | ||
1259 | } | ||
1260 | |||
1261 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1262 | pub struct TypeArgList { | ||
1263 | pub(crate) syntax: SyntaxNode, | ||
1264 | } | ||
1265 | impl TypeArgList { | ||
1266 | pub fn coloncolon_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![::]) } | ||
1267 | pub fn l_angle_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![<]) } | ||
1268 | pub fn generic_args(&self) -> AstChildren<GenericArg> { support::children(&self.syntax) } | ||
1269 | pub fn type_args(&self) -> AstChildren<TypeArg> { support::children(&self.syntax) } | ||
1270 | pub fn lifetime_args(&self) -> AstChildren<LifetimeArg> { support::children(&self.syntax) } | ||
1271 | pub fn assoc_type_args(&self) -> AstChildren<AssocTypeArg> { support::children(&self.syntax) } | ||
1272 | pub fn const_args(&self) -> AstChildren<ConstArg> { support::children(&self.syntax) } | ||
1273 | pub fn r_angle_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![>]) } | ||
1274 | } | ||
1275 | |||
1276 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1277 | pub struct TypeArg { | ||
1278 | pub(crate) syntax: SyntaxNode, | ||
1279 | } | ||
1280 | impl TypeArg { | ||
1281 | pub fn type_ref(&self) -> Option<TypeRef> { support::child(&self.syntax) } | ||
1282 | } | ||
1283 | |||
1284 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1285 | pub struct AssocTypeArg { | ||
1286 | pub(crate) syntax: SyntaxNode, | ||
1287 | } | ||
1288 | impl ast::TypeBoundsOwner for AssocTypeArg {} | ||
1289 | impl AssocTypeArg { | ||
1290 | pub fn name_ref(&self) -> Option<NameRef> { support::child(&self.syntax) } | ||
1291 | pub fn eq_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![=]) } | ||
1292 | pub fn type_ref(&self) -> Option<TypeRef> { support::child(&self.syntax) } | ||
1293 | } | ||
1294 | |||
1295 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1296 | pub struct LifetimeArg { | ||
1297 | pub(crate) syntax: SyntaxNode, | ||
1298 | } | ||
1299 | impl LifetimeArg { | ||
1300 | pub fn lifetime_token(&self) -> Option<SyntaxToken> { | ||
1301 | support::token(&self.syntax, T![lifetime]) | ||
1302 | } | ||
1303 | } | ||
1304 | |||
1305 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1306 | pub struct ConstArg { | ||
1307 | pub(crate) syntax: SyntaxNode, | ||
1308 | } | ||
1309 | impl ConstArg { | ||
1310 | pub fn literal(&self) -> Option<Literal> { support::child(&self.syntax) } | ||
1311 | pub fn eq_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![=]) } | ||
1312 | pub fn block_expr(&self) -> Option<BlockExpr> { support::child(&self.syntax) } | ||
1313 | } | ||
1314 | |||
1315 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1316 | pub struct MacroItems { | ||
1317 | pub(crate) syntax: SyntaxNode, | ||
1318 | } | ||
1319 | impl ast::ModuleItemOwner for MacroItems {} | ||
1320 | impl MacroItems {} | ||
1321 | |||
1322 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1323 | pub struct MacroStmts { | ||
1324 | pub(crate) syntax: SyntaxNode, | ||
1325 | } | ||
1326 | impl MacroStmts { | ||
1327 | pub fn statements(&self) -> AstChildren<Stmt> { support::children(&self.syntax) } | ||
1328 | pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
1329 | } | ||
1330 | |||
1331 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1332 | pub struct ExternItemList { | ||
1333 | pub(crate) syntax: SyntaxNode, | ||
1334 | } | ||
1335 | impl ast::ModuleItemOwner for ExternItemList {} | ||
1336 | impl ExternItemList { | ||
1337 | pub fn l_curly_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['{']) } | ||
1338 | pub fn extern_items(&self) -> AstChildren<ExternItem> { support::children(&self.syntax) } | ||
1339 | pub fn r_curly_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['}']) } | ||
1340 | } | ||
1341 | |||
1342 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1343 | pub struct ExternBlock { | ||
1344 | pub(crate) syntax: SyntaxNode, | ||
1345 | } | ||
1346 | impl ExternBlock { | ||
1347 | pub fn abi(&self) -> Option<Abi> { support::child(&self.syntax) } | ||
1348 | pub fn extern_item_list(&self) -> Option<ExternItemList> { support::child(&self.syntax) } | ||
1349 | } | ||
1350 | |||
1351 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1352 | pub struct MetaItem { | ||
1353 | pub(crate) syntax: SyntaxNode, | ||
1354 | } | ||
1355 | impl MetaItem { | ||
1356 | pub fn path(&self) -> Option<Path> { support::child(&self.syntax) } | ||
1357 | pub fn eq_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![=]) } | ||
1358 | pub fn attr_input(&self) -> Option<AttrInput> { support::child(&self.syntax) } | ||
1359 | pub fn nested_meta_items(&self) -> AstChildren<MetaItem> { support::children(&self.syntax) } | ||
1360 | } | ||
1361 | |||
1362 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1363 | pub struct MacroDef { | ||
1364 | pub(crate) syntax: SyntaxNode, | ||
1365 | } | ||
1366 | impl MacroDef { | ||
1367 | pub fn name(&self) -> Option<Name> { support::child(&self.syntax) } | ||
1368 | pub fn token_tree(&self) -> Option<TokenTree> { support::child(&self.syntax) } | ||
1369 | } | ||
1370 | |||
1371 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1372 | pub enum NominalDef { | ||
1373 | StructDef(StructDef), | ||
1374 | EnumDef(EnumDef), | ||
1375 | UnionDef(UnionDef), | ||
1376 | } | ||
1377 | impl ast::NameOwner for NominalDef {} | ||
1378 | impl ast::TypeParamsOwner for NominalDef {} | ||
1379 | impl ast::AttrsOwner for NominalDef {} | ||
1380 | |||
1381 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1382 | pub enum GenericParam { | ||
1383 | LifetimeParam(LifetimeParam), | ||
1384 | TypeParam(TypeParam), | ||
1385 | ConstParam(ConstParam), | ||
1386 | } | ||
1387 | |||
1388 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1389 | pub enum GenericArg { | ||
1390 | LifetimeArg(LifetimeArg), | ||
1391 | TypeArg(TypeArg), | ||
1392 | ConstArg(ConstArg), | ||
1393 | AssocTypeArg(AssocTypeArg), | ||
1394 | } | ||
1395 | |||
1396 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1397 | pub enum TypeRef { | ||
1398 | ParenType(ParenType), | ||
1399 | TupleType(TupleType), | ||
1400 | NeverType(NeverType), | ||
1401 | PathType(PathType), | ||
1402 | PointerType(PointerType), | ||
1403 | ArrayType(ArrayType), | ||
1404 | SliceType(SliceType), | ||
1405 | ReferenceType(ReferenceType), | ||
1406 | PlaceholderType(PlaceholderType), | ||
1407 | FnPointerType(FnPointerType), | ||
1408 | ForType(ForType), | ||
1409 | ImplTraitType(ImplTraitType), | ||
1410 | DynTraitType(DynTraitType), | ||
1411 | } | ||
1412 | |||
1413 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1414 | pub enum ModuleItem { | ||
1415 | StructDef(StructDef), | ||
1416 | UnionDef(UnionDef), | ||
1417 | EnumDef(EnumDef), | ||
1418 | FnDef(FnDef), | ||
1419 | TraitDef(TraitDef), | ||
1420 | TypeAliasDef(TypeAliasDef), | ||
1421 | ImplDef(ImplDef), | ||
1422 | UseItem(UseItem), | ||
1423 | ExternCrateItem(ExternCrateItem), | ||
1424 | ConstDef(ConstDef), | ||
1425 | StaticDef(StaticDef), | ||
1426 | Module(Module), | ||
1427 | MacroCall(MacroCall), | ||
1428 | ExternBlock(ExternBlock), | ||
1429 | } | ||
1430 | impl ast::NameOwner for ModuleItem {} | ||
1431 | impl ast::AttrsOwner for ModuleItem {} | ||
1432 | impl ast::VisibilityOwner for ModuleItem {} | ||
1433 | |||
1434 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1435 | pub enum ImplItem { | ||
1436 | FnDef(FnDef), | ||
1437 | TypeAliasDef(TypeAliasDef), | ||
1438 | ConstDef(ConstDef), | ||
1439 | } | ||
1440 | impl ast::NameOwner for ImplItem {} | ||
1441 | impl ast::AttrsOwner for ImplItem {} | ||
1442 | |||
1443 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1444 | pub enum ExternItem { | ||
1445 | FnDef(FnDef), | ||
1446 | StaticDef(StaticDef), | ||
1447 | } | ||
1448 | impl ast::NameOwner for ExternItem {} | ||
1449 | impl ast::AttrsOwner for ExternItem {} | ||
1450 | impl ast::VisibilityOwner for ExternItem {} | ||
1451 | |||
1452 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1453 | pub enum Expr { | ||
1454 | TupleExpr(TupleExpr), | ||
1455 | ArrayExpr(ArrayExpr), | ||
1456 | ParenExpr(ParenExpr), | ||
1457 | PathExpr(PathExpr), | ||
1458 | LambdaExpr(LambdaExpr), | ||
1459 | IfExpr(IfExpr), | ||
1460 | LoopExpr(LoopExpr), | ||
1461 | ForExpr(ForExpr), | ||
1462 | WhileExpr(WhileExpr), | ||
1463 | ContinueExpr(ContinueExpr), | ||
1464 | BreakExpr(BreakExpr), | ||
1465 | Label(Label), | ||
1466 | BlockExpr(BlockExpr), | ||
1467 | ReturnExpr(ReturnExpr), | ||
1468 | MatchExpr(MatchExpr), | ||
1469 | RecordLit(RecordLit), | ||
1470 | CallExpr(CallExpr), | ||
1471 | IndexExpr(IndexExpr), | ||
1472 | MethodCallExpr(MethodCallExpr), | ||
1473 | FieldExpr(FieldExpr), | ||
1474 | AwaitExpr(AwaitExpr), | ||
1475 | TryExpr(TryExpr), | ||
1476 | TryBlockExpr(TryBlockExpr), | ||
1477 | CastExpr(CastExpr), | ||
1478 | RefExpr(RefExpr), | ||
1479 | PrefixExpr(PrefixExpr), | ||
1480 | RangeExpr(RangeExpr), | ||
1481 | BinExpr(BinExpr), | ||
1482 | Literal(Literal), | ||
1483 | MacroCall(MacroCall), | ||
1484 | BoxExpr(BoxExpr), | ||
1485 | } | ||
1486 | impl ast::AttrsOwner for Expr {} | ||
1487 | |||
1488 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1489 | pub enum Pat { | ||
1490 | OrPat(OrPat), | ||
1491 | ParenPat(ParenPat), | ||
1492 | RefPat(RefPat), | ||
1493 | BoxPat(BoxPat), | ||
1494 | BindPat(BindPat), | ||
1495 | PlaceholderPat(PlaceholderPat), | ||
1496 | DotDotPat(DotDotPat), | ||
1497 | PathPat(PathPat), | ||
1498 | RecordPat(RecordPat), | ||
1499 | TupleStructPat(TupleStructPat), | ||
1500 | TuplePat(TuplePat), | ||
1501 | SlicePat(SlicePat), | ||
1502 | RangePat(RangePat), | ||
1503 | LiteralPat(LiteralPat), | ||
1504 | MacroPat(MacroPat), | ||
1505 | } | ||
1506 | |||
1507 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1508 | pub enum RecordInnerPat { | ||
1509 | RecordFieldPat(RecordFieldPat), | ||
1510 | BindPat(BindPat), | ||
1511 | } | ||
1512 | |||
1513 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1514 | pub enum AttrInput { | ||
1515 | Literal(Literal), | ||
1516 | TokenTree(TokenTree), | ||
1517 | } | ||
1518 | |||
1519 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1520 | pub enum Stmt { | ||
1521 | LetStmt(LetStmt), | ||
1522 | ExprStmt(ExprStmt), | ||
1523 | } | ||
1524 | |||
1525 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1526 | pub enum FieldDefList { | ||
1527 | RecordFieldDefList(RecordFieldDefList), | ||
1528 | TupleFieldDefList(TupleFieldDefList), | ||
1529 | } | ||
1530 | impl AstNode for SourceFile { | ||
1531 | fn can_cast(kind: SyntaxKind) -> bool { kind == SOURCE_FILE } | ||
487 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 1532 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
488 | if Self::can_cast(syntax.kind()) { | 1533 | if Self::can_cast(syntax.kind()) { |
489 | Some(Self { syntax }) | 1534 | Some(Self { syntax }) |
@@ -493,18 +1538,30 @@ impl AstNode for ParenType { | |||
493 | } | 1538 | } |
494 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 1539 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
495 | } | 1540 | } |
496 | impl ParenType { | 1541 | impl AstNode for FnDef { |
497 | pub fn l_paren_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['(']) } | 1542 | fn can_cast(kind: SyntaxKind) -> bool { kind == FN_DEF } |
498 | pub fn type_ref(&self) -> Option<TypeRef> { support::child(&self.syntax) } | 1543 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
499 | pub fn r_paren_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![')']) } | 1544 | if Self::can_cast(syntax.kind()) { |
1545 | Some(Self { syntax }) | ||
1546 | } else { | ||
1547 | None | ||
1548 | } | ||
1549 | } | ||
1550 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | ||
500 | } | 1551 | } |
501 | 1552 | impl AstNode for RetType { | |
502 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | 1553 | fn can_cast(kind: SyntaxKind) -> bool { kind == RET_TYPE } |
503 | pub struct TupleType { | 1554 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
504 | pub(crate) syntax: SyntaxNode, | 1555 | if Self::can_cast(syntax.kind()) { |
1556 | Some(Self { syntax }) | ||
1557 | } else { | ||
1558 | None | ||
1559 | } | ||
1560 | } | ||
1561 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | ||
505 | } | 1562 | } |
506 | impl AstNode for TupleType { | 1563 | impl AstNode for StructDef { |
507 | fn can_cast(kind: SyntaxKind) -> bool { kind == TUPLE_TYPE } | 1564 | fn can_cast(kind: SyntaxKind) -> bool { kind == STRUCT_DEF } |
508 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 1565 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
509 | if Self::can_cast(syntax.kind()) { | 1566 | if Self::can_cast(syntax.kind()) { |
510 | Some(Self { syntax }) | 1567 | Some(Self { syntax }) |
@@ -514,18 +1571,30 @@ impl AstNode for TupleType { | |||
514 | } | 1571 | } |
515 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 1572 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
516 | } | 1573 | } |
517 | impl TupleType { | 1574 | impl AstNode for UnionDef { |
518 | pub fn l_paren_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['(']) } | 1575 | fn can_cast(kind: SyntaxKind) -> bool { kind == UNION_DEF } |
519 | pub fn fields(&self) -> AstChildren<TypeRef> { support::children(&self.syntax) } | 1576 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
520 | pub fn r_paren_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![')']) } | 1577 | if Self::can_cast(syntax.kind()) { |
1578 | Some(Self { syntax }) | ||
1579 | } else { | ||
1580 | None | ||
1581 | } | ||
1582 | } | ||
1583 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | ||
521 | } | 1584 | } |
522 | 1585 | impl AstNode for RecordFieldDefList { | |
523 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | 1586 | fn can_cast(kind: SyntaxKind) -> bool { kind == RECORD_FIELD_DEF_LIST } |
524 | pub struct NeverType { | 1587 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
525 | pub(crate) syntax: SyntaxNode, | 1588 | if Self::can_cast(syntax.kind()) { |
1589 | Some(Self { syntax }) | ||
1590 | } else { | ||
1591 | None | ||
1592 | } | ||
1593 | } | ||
1594 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | ||
526 | } | 1595 | } |
527 | impl AstNode for NeverType { | 1596 | impl AstNode for RecordFieldDef { |
528 | fn can_cast(kind: SyntaxKind) -> bool { kind == NEVER_TYPE } | 1597 | fn can_cast(kind: SyntaxKind) -> bool { kind == RECORD_FIELD_DEF } |
529 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 1598 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
530 | if Self::can_cast(syntax.kind()) { | 1599 | if Self::can_cast(syntax.kind()) { |
531 | Some(Self { syntax }) | 1600 | Some(Self { syntax }) |
@@ -535,16 +1604,30 @@ impl AstNode for NeverType { | |||
535 | } | 1604 | } |
536 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 1605 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
537 | } | 1606 | } |
538 | impl NeverType { | 1607 | impl AstNode for TupleFieldDefList { |
539 | pub fn excl_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![!]) } | 1608 | fn can_cast(kind: SyntaxKind) -> bool { kind == TUPLE_FIELD_DEF_LIST } |
1609 | fn cast(syntax: SyntaxNode) -> Option<Self> { | ||
1610 | if Self::can_cast(syntax.kind()) { | ||
1611 | Some(Self { syntax }) | ||
1612 | } else { | ||
1613 | None | ||
1614 | } | ||
1615 | } | ||
1616 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | ||
540 | } | 1617 | } |
541 | 1618 | impl AstNode for TupleFieldDef { | |
542 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | 1619 | fn can_cast(kind: SyntaxKind) -> bool { kind == TUPLE_FIELD_DEF } |
543 | pub struct PathType { | 1620 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
544 | pub(crate) syntax: SyntaxNode, | 1621 | if Self::can_cast(syntax.kind()) { |
1622 | Some(Self { syntax }) | ||
1623 | } else { | ||
1624 | None | ||
1625 | } | ||
1626 | } | ||
1627 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | ||
545 | } | 1628 | } |
546 | impl AstNode for PathType { | 1629 | impl AstNode for EnumDef { |
547 | fn can_cast(kind: SyntaxKind) -> bool { kind == PATH_TYPE } | 1630 | fn can_cast(kind: SyntaxKind) -> bool { kind == ENUM_DEF } |
548 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 1631 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
549 | if Self::can_cast(syntax.kind()) { | 1632 | if Self::can_cast(syntax.kind()) { |
550 | Some(Self { syntax }) | 1633 | Some(Self { syntax }) |
@@ -554,16 +1637,30 @@ impl AstNode for PathType { | |||
554 | } | 1637 | } |
555 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 1638 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
556 | } | 1639 | } |
557 | impl PathType { | 1640 | impl AstNode for EnumVariantList { |
558 | pub fn path(&self) -> Option<Path> { support::child(&self.syntax) } | 1641 | fn can_cast(kind: SyntaxKind) -> bool { kind == ENUM_VARIANT_LIST } |
1642 | fn cast(syntax: SyntaxNode) -> Option<Self> { | ||
1643 | if Self::can_cast(syntax.kind()) { | ||
1644 | Some(Self { syntax }) | ||
1645 | } else { | ||
1646 | None | ||
1647 | } | ||
1648 | } | ||
1649 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | ||
559 | } | 1650 | } |
560 | 1651 | impl AstNode for EnumVariant { | |
561 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | 1652 | fn can_cast(kind: SyntaxKind) -> bool { kind == ENUM_VARIANT } |
562 | pub struct PointerType { | 1653 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
563 | pub(crate) syntax: SyntaxNode, | 1654 | if Self::can_cast(syntax.kind()) { |
1655 | Some(Self { syntax }) | ||
1656 | } else { | ||
1657 | None | ||
1658 | } | ||
1659 | } | ||
1660 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | ||
564 | } | 1661 | } |
565 | impl AstNode for PointerType { | 1662 | impl AstNode for TraitDef { |
566 | fn can_cast(kind: SyntaxKind) -> bool { kind == POINTER_TYPE } | 1663 | fn can_cast(kind: SyntaxKind) -> bool { kind == TRAIT_DEF } |
567 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 1664 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
568 | if Self::can_cast(syntax.kind()) { | 1665 | if Self::can_cast(syntax.kind()) { |
569 | Some(Self { syntax }) | 1666 | Some(Self { syntax }) |
@@ -573,19 +1670,30 @@ impl AstNode for PointerType { | |||
573 | } | 1670 | } |
574 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 1671 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
575 | } | 1672 | } |
576 | impl PointerType { | 1673 | impl AstNode for Module { |
577 | pub fn star_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![*]) } | 1674 | fn can_cast(kind: SyntaxKind) -> bool { kind == MODULE } |
578 | pub fn const_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![const]) } | 1675 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
579 | pub fn mut_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![mut]) } | 1676 | if Self::can_cast(syntax.kind()) { |
580 | pub fn type_ref(&self) -> Option<TypeRef> { support::child(&self.syntax) } | 1677 | Some(Self { syntax }) |
1678 | } else { | ||
1679 | None | ||
1680 | } | ||
1681 | } | ||
1682 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | ||
581 | } | 1683 | } |
582 | 1684 | impl AstNode for ItemList { | |
583 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | 1685 | fn can_cast(kind: SyntaxKind) -> bool { kind == ITEM_LIST } |
584 | pub struct ArrayType { | 1686 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
585 | pub(crate) syntax: SyntaxNode, | 1687 | if Self::can_cast(syntax.kind()) { |
1688 | Some(Self { syntax }) | ||
1689 | } else { | ||
1690 | None | ||
1691 | } | ||
1692 | } | ||
1693 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | ||
586 | } | 1694 | } |
587 | impl AstNode for ArrayType { | 1695 | impl AstNode for ConstDef { |
588 | fn can_cast(kind: SyntaxKind) -> bool { kind == ARRAY_TYPE } | 1696 | fn can_cast(kind: SyntaxKind) -> bool { kind == CONST_DEF } |
589 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 1697 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
590 | if Self::can_cast(syntax.kind()) { | 1698 | if Self::can_cast(syntax.kind()) { |
591 | Some(Self { syntax }) | 1699 | Some(Self { syntax }) |
@@ -595,20 +1703,30 @@ impl AstNode for ArrayType { | |||
595 | } | 1703 | } |
596 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 1704 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
597 | } | 1705 | } |
598 | impl ArrayType { | 1706 | impl AstNode for StaticDef { |
599 | pub fn l_brack_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['[']) } | 1707 | fn can_cast(kind: SyntaxKind) -> bool { kind == STATIC_DEF } |
600 | pub fn type_ref(&self) -> Option<TypeRef> { support::child(&self.syntax) } | 1708 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
601 | pub fn semicolon_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![;]) } | 1709 | if Self::can_cast(syntax.kind()) { |
602 | pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) } | 1710 | Some(Self { syntax }) |
603 | pub fn r_brack_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![']']) } | 1711 | } else { |
1712 | None | ||
1713 | } | ||
1714 | } | ||
1715 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | ||
604 | } | 1716 | } |
605 | 1717 | impl AstNode for TypeAliasDef { | |
606 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | 1718 | fn can_cast(kind: SyntaxKind) -> bool { kind == TYPE_ALIAS_DEF } |
607 | pub struct SliceType { | 1719 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
608 | pub(crate) syntax: SyntaxNode, | 1720 | if Self::can_cast(syntax.kind()) { |
1721 | Some(Self { syntax }) | ||
1722 | } else { | ||
1723 | None | ||
1724 | } | ||
1725 | } | ||
1726 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | ||
609 | } | 1727 | } |
610 | impl AstNode for SliceType { | 1728 | impl AstNode for ImplDef { |
611 | fn can_cast(kind: SyntaxKind) -> bool { kind == SLICE_TYPE } | 1729 | fn can_cast(kind: SyntaxKind) -> bool { kind == IMPL_DEF } |
612 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 1730 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
613 | if Self::can_cast(syntax.kind()) { | 1731 | if Self::can_cast(syntax.kind()) { |
614 | Some(Self { syntax }) | 1732 | Some(Self { syntax }) |
@@ -618,18 +1736,30 @@ impl AstNode for SliceType { | |||
618 | } | 1736 | } |
619 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 1737 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
620 | } | 1738 | } |
621 | impl SliceType { | 1739 | impl AstNode for ParenType { |
622 | pub fn l_brack_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['[']) } | 1740 | fn can_cast(kind: SyntaxKind) -> bool { kind == PAREN_TYPE } |
623 | pub fn type_ref(&self) -> Option<TypeRef> { support::child(&self.syntax) } | 1741 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
624 | pub fn r_brack_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![']']) } | 1742 | if Self::can_cast(syntax.kind()) { |
1743 | Some(Self { syntax }) | ||
1744 | } else { | ||
1745 | None | ||
1746 | } | ||
1747 | } | ||
1748 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | ||
625 | } | 1749 | } |
626 | 1750 | impl AstNode for TupleType { | |
627 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | 1751 | fn can_cast(kind: SyntaxKind) -> bool { kind == TUPLE_TYPE } |
628 | pub struct ReferenceType { | 1752 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
629 | pub(crate) syntax: SyntaxNode, | 1753 | if Self::can_cast(syntax.kind()) { |
1754 | Some(Self { syntax }) | ||
1755 | } else { | ||
1756 | None | ||
1757 | } | ||
1758 | } | ||
1759 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | ||
630 | } | 1760 | } |
631 | impl AstNode for ReferenceType { | 1761 | impl AstNode for NeverType { |
632 | fn can_cast(kind: SyntaxKind) -> bool { kind == REFERENCE_TYPE } | 1762 | fn can_cast(kind: SyntaxKind) -> bool { kind == NEVER_TYPE } |
633 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 1763 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
634 | if Self::can_cast(syntax.kind()) { | 1764 | if Self::can_cast(syntax.kind()) { |
635 | Some(Self { syntax }) | 1765 | Some(Self { syntax }) |
@@ -639,21 +1769,30 @@ impl AstNode for ReferenceType { | |||
639 | } | 1769 | } |
640 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 1770 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
641 | } | 1771 | } |
642 | impl ReferenceType { | 1772 | impl AstNode for PathType { |
643 | pub fn amp_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![&]) } | 1773 | fn can_cast(kind: SyntaxKind) -> bool { kind == PATH_TYPE } |
644 | pub fn lifetime_token(&self) -> Option<SyntaxToken> { | 1774 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
645 | support::token(&self.syntax, T![lifetime]) | 1775 | if Self::can_cast(syntax.kind()) { |
1776 | Some(Self { syntax }) | ||
1777 | } else { | ||
1778 | None | ||
1779 | } | ||
646 | } | 1780 | } |
647 | pub fn mut_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![mut]) } | 1781 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
648 | pub fn type_ref(&self) -> Option<TypeRef> { support::child(&self.syntax) } | ||
649 | } | 1782 | } |
650 | 1783 | impl AstNode for PointerType { | |
651 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | 1784 | fn can_cast(kind: SyntaxKind) -> bool { kind == POINTER_TYPE } |
652 | pub struct PlaceholderType { | 1785 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
653 | pub(crate) syntax: SyntaxNode, | 1786 | if Self::can_cast(syntax.kind()) { |
1787 | Some(Self { syntax }) | ||
1788 | } else { | ||
1789 | None | ||
1790 | } | ||
1791 | } | ||
1792 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | ||
654 | } | 1793 | } |
655 | impl AstNode for PlaceholderType { | 1794 | impl AstNode for ArrayType { |
656 | fn can_cast(kind: SyntaxKind) -> bool { kind == PLACEHOLDER_TYPE } | 1795 | fn can_cast(kind: SyntaxKind) -> bool { kind == ARRAY_TYPE } |
657 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 1796 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
658 | if Self::can_cast(syntax.kind()) { | 1797 | if Self::can_cast(syntax.kind()) { |
659 | Some(Self { syntax }) | 1798 | Some(Self { syntax }) |
@@ -663,13 +1802,38 @@ impl AstNode for PlaceholderType { | |||
663 | } | 1802 | } |
664 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 1803 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
665 | } | 1804 | } |
666 | impl PlaceholderType { | 1805 | impl AstNode for SliceType { |
667 | pub fn underscore_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![_]) } | 1806 | fn can_cast(kind: SyntaxKind) -> bool { kind == SLICE_TYPE } |
1807 | fn cast(syntax: SyntaxNode) -> Option<Self> { | ||
1808 | if Self::can_cast(syntax.kind()) { | ||
1809 | Some(Self { syntax }) | ||
1810 | } else { | ||
1811 | None | ||
1812 | } | ||
1813 | } | ||
1814 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | ||
668 | } | 1815 | } |
669 | 1816 | impl AstNode for ReferenceType { | |
670 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | 1817 | fn can_cast(kind: SyntaxKind) -> bool { kind == REFERENCE_TYPE } |
671 | pub struct FnPointerType { | 1818 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
672 | pub(crate) syntax: SyntaxNode, | 1819 | if Self::can_cast(syntax.kind()) { |
1820 | Some(Self { syntax }) | ||
1821 | } else { | ||
1822 | None | ||
1823 | } | ||
1824 | } | ||
1825 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | ||
1826 | } | ||
1827 | impl AstNode for PlaceholderType { | ||
1828 | fn can_cast(kind: SyntaxKind) -> bool { kind == PLACEHOLDER_TYPE } | ||
1829 | fn cast(syntax: SyntaxNode) -> Option<Self> { | ||
1830 | if Self::can_cast(syntax.kind()) { | ||
1831 | Some(Self { syntax }) | ||
1832 | } else { | ||
1833 | None | ||
1834 | } | ||
1835 | } | ||
1836 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | ||
673 | } | 1837 | } |
674 | impl AstNode for FnPointerType { | 1838 | impl AstNode for FnPointerType { |
675 | fn can_cast(kind: SyntaxKind) -> bool { kind == FN_POINTER_TYPE } | 1839 | fn can_cast(kind: SyntaxKind) -> bool { kind == FN_POINTER_TYPE } |
@@ -682,18 +1846,6 @@ impl AstNode for FnPointerType { | |||
682 | } | 1846 | } |
683 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 1847 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
684 | } | 1848 | } |
685 | impl FnPointerType { | ||
686 | pub fn abi(&self) -> Option<Abi> { support::child(&self.syntax) } | ||
687 | pub fn unsafe_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![unsafe]) } | ||
688 | pub fn fn_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![fn]) } | ||
689 | pub fn param_list(&self) -> Option<ParamList> { support::child(&self.syntax) } | ||
690 | pub fn ret_type(&self) -> Option<RetType> { support::child(&self.syntax) } | ||
691 | } | ||
692 | |||
693 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
694 | pub struct ForType { | ||
695 | pub(crate) syntax: SyntaxNode, | ||
696 | } | ||
697 | impl AstNode for ForType { | 1849 | impl AstNode for ForType { |
698 | fn can_cast(kind: SyntaxKind) -> bool { kind == FOR_TYPE } | 1850 | fn can_cast(kind: SyntaxKind) -> bool { kind == FOR_TYPE } |
699 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 1851 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -705,16 +1857,6 @@ impl AstNode for ForType { | |||
705 | } | 1857 | } |
706 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 1858 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
707 | } | 1859 | } |
708 | impl ForType { | ||
709 | pub fn for_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![for]) } | ||
710 | pub fn type_param_list(&self) -> Option<TypeParamList> { support::child(&self.syntax) } | ||
711 | pub fn type_ref(&self) -> Option<TypeRef> { support::child(&self.syntax) } | ||
712 | } | ||
713 | |||
714 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
715 | pub struct ImplTraitType { | ||
716 | pub(crate) syntax: SyntaxNode, | ||
717 | } | ||
718 | impl AstNode for ImplTraitType { | 1860 | impl AstNode for ImplTraitType { |
719 | fn can_cast(kind: SyntaxKind) -> bool { kind == IMPL_TRAIT_TYPE } | 1861 | fn can_cast(kind: SyntaxKind) -> bool { kind == IMPL_TRAIT_TYPE } |
720 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 1862 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -726,15 +1868,6 @@ impl AstNode for ImplTraitType { | |||
726 | } | 1868 | } |
727 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 1869 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
728 | } | 1870 | } |
729 | impl ast::TypeBoundsOwner for ImplTraitType {} | ||
730 | impl ImplTraitType { | ||
731 | pub fn impl_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![impl]) } | ||
732 | } | ||
733 | |||
734 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
735 | pub struct DynTraitType { | ||
736 | pub(crate) syntax: SyntaxNode, | ||
737 | } | ||
738 | impl AstNode for DynTraitType { | 1871 | impl AstNode for DynTraitType { |
739 | fn can_cast(kind: SyntaxKind) -> bool { kind == DYN_TRAIT_TYPE } | 1872 | fn can_cast(kind: SyntaxKind) -> bool { kind == DYN_TRAIT_TYPE } |
740 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 1873 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -746,15 +1879,6 @@ impl AstNode for DynTraitType { | |||
746 | } | 1879 | } |
747 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 1880 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
748 | } | 1881 | } |
749 | impl ast::TypeBoundsOwner for DynTraitType {} | ||
750 | impl DynTraitType { | ||
751 | pub fn dyn_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![dyn]) } | ||
752 | } | ||
753 | |||
754 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
755 | pub struct TupleExpr { | ||
756 | pub(crate) syntax: SyntaxNode, | ||
757 | } | ||
758 | impl AstNode for TupleExpr { | 1882 | impl AstNode for TupleExpr { |
759 | fn can_cast(kind: SyntaxKind) -> bool { kind == TUPLE_EXPR } | 1883 | fn can_cast(kind: SyntaxKind) -> bool { kind == TUPLE_EXPR } |
760 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 1884 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -766,17 +1890,6 @@ impl AstNode for TupleExpr { | |||
766 | } | 1890 | } |
767 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 1891 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
768 | } | 1892 | } |
769 | impl ast::AttrsOwner for TupleExpr {} | ||
770 | impl TupleExpr { | ||
771 | pub fn l_paren_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['(']) } | ||
772 | pub fn exprs(&self) -> AstChildren<Expr> { support::children(&self.syntax) } | ||
773 | pub fn r_paren_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![')']) } | ||
774 | } | ||
775 | |||
776 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
777 | pub struct ArrayExpr { | ||
778 | pub(crate) syntax: SyntaxNode, | ||
779 | } | ||
780 | impl AstNode for ArrayExpr { | 1893 | impl AstNode for ArrayExpr { |
781 | fn can_cast(kind: SyntaxKind) -> bool { kind == ARRAY_EXPR } | 1894 | fn can_cast(kind: SyntaxKind) -> bool { kind == ARRAY_EXPR } |
782 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 1895 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -788,18 +1901,6 @@ impl AstNode for ArrayExpr { | |||
788 | } | 1901 | } |
789 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 1902 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
790 | } | 1903 | } |
791 | impl ast::AttrsOwner for ArrayExpr {} | ||
792 | impl ArrayExpr { | ||
793 | pub fn l_brack_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['[']) } | ||
794 | pub fn exprs(&self) -> AstChildren<Expr> { support::children(&self.syntax) } | ||
795 | pub fn semicolon_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![;]) } | ||
796 | pub fn r_brack_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![']']) } | ||
797 | } | ||
798 | |||
799 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
800 | pub struct ParenExpr { | ||
801 | pub(crate) syntax: SyntaxNode, | ||
802 | } | ||
803 | impl AstNode for ParenExpr { | 1904 | impl AstNode for ParenExpr { |
804 | fn can_cast(kind: SyntaxKind) -> bool { kind == PAREN_EXPR } | 1905 | fn can_cast(kind: SyntaxKind) -> bool { kind == PAREN_EXPR } |
805 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 1906 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -811,17 +1912,6 @@ impl AstNode for ParenExpr { | |||
811 | } | 1912 | } |
812 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 1913 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
813 | } | 1914 | } |
814 | impl ast::AttrsOwner for ParenExpr {} | ||
815 | impl ParenExpr { | ||
816 | pub fn l_paren_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['(']) } | ||
817 | pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
818 | pub fn r_paren_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![')']) } | ||
819 | } | ||
820 | |||
821 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
822 | pub struct PathExpr { | ||
823 | pub(crate) syntax: SyntaxNode, | ||
824 | } | ||
825 | impl AstNode for PathExpr { | 1915 | impl AstNode for PathExpr { |
826 | fn can_cast(kind: SyntaxKind) -> bool { kind == PATH_EXPR } | 1916 | fn can_cast(kind: SyntaxKind) -> bool { kind == PATH_EXPR } |
827 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 1917 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -833,14 +1923,6 @@ impl AstNode for PathExpr { | |||
833 | } | 1923 | } |
834 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 1924 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
835 | } | 1925 | } |
836 | impl PathExpr { | ||
837 | pub fn path(&self) -> Option<Path> { support::child(&self.syntax) } | ||
838 | } | ||
839 | |||
840 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
841 | pub struct LambdaExpr { | ||
842 | pub(crate) syntax: SyntaxNode, | ||
843 | } | ||
844 | impl AstNode for LambdaExpr { | 1926 | impl AstNode for LambdaExpr { |
845 | fn can_cast(kind: SyntaxKind) -> bool { kind == LAMBDA_EXPR } | 1927 | fn can_cast(kind: SyntaxKind) -> bool { kind == LAMBDA_EXPR } |
846 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 1928 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -852,20 +1934,6 @@ impl AstNode for LambdaExpr { | |||
852 | } | 1934 | } |
853 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 1935 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
854 | } | 1936 | } |
855 | impl ast::AttrsOwner for LambdaExpr {} | ||
856 | impl LambdaExpr { | ||
857 | pub fn static_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![static]) } | ||
858 | pub fn async_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![async]) } | ||
859 | pub fn move_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![move]) } | ||
860 | pub fn param_list(&self) -> Option<ParamList> { support::child(&self.syntax) } | ||
861 | pub fn ret_type(&self) -> Option<RetType> { support::child(&self.syntax) } | ||
862 | pub fn body(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
863 | } | ||
864 | |||
865 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
866 | pub struct IfExpr { | ||
867 | pub(crate) syntax: SyntaxNode, | ||
868 | } | ||
869 | impl AstNode for IfExpr { | 1937 | impl AstNode for IfExpr { |
870 | fn can_cast(kind: SyntaxKind) -> bool { kind == IF_EXPR } | 1938 | fn can_cast(kind: SyntaxKind) -> bool { kind == IF_EXPR } |
871 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 1939 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -877,16 +1945,6 @@ impl AstNode for IfExpr { | |||
877 | } | 1945 | } |
878 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 1946 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
879 | } | 1947 | } |
880 | impl ast::AttrsOwner for IfExpr {} | ||
881 | impl IfExpr { | ||
882 | pub fn if_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![if]) } | ||
883 | pub fn condition(&self) -> Option<Condition> { support::child(&self.syntax) } | ||
884 | } | ||
885 | |||
886 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
887 | pub struct LoopExpr { | ||
888 | pub(crate) syntax: SyntaxNode, | ||
889 | } | ||
890 | impl AstNode for LoopExpr { | 1948 | impl AstNode for LoopExpr { |
891 | fn can_cast(kind: SyntaxKind) -> bool { kind == LOOP_EXPR } | 1949 | fn can_cast(kind: SyntaxKind) -> bool { kind == LOOP_EXPR } |
892 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 1950 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -898,16 +1956,6 @@ impl AstNode for LoopExpr { | |||
898 | } | 1956 | } |
899 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 1957 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
900 | } | 1958 | } |
901 | impl ast::AttrsOwner for LoopExpr {} | ||
902 | impl ast::LoopBodyOwner for LoopExpr {} | ||
903 | impl LoopExpr { | ||
904 | pub fn loop_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![loop]) } | ||
905 | } | ||
906 | |||
907 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
908 | pub struct TryBlockExpr { | ||
909 | pub(crate) syntax: SyntaxNode, | ||
910 | } | ||
911 | impl AstNode for TryBlockExpr { | 1959 | impl AstNode for TryBlockExpr { |
912 | fn can_cast(kind: SyntaxKind) -> bool { kind == TRY_BLOCK_EXPR } | 1960 | fn can_cast(kind: SyntaxKind) -> bool { kind == TRY_BLOCK_EXPR } |
913 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 1961 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -919,16 +1967,6 @@ impl AstNode for TryBlockExpr { | |||
919 | } | 1967 | } |
920 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 1968 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
921 | } | 1969 | } |
922 | impl ast::AttrsOwner for TryBlockExpr {} | ||
923 | impl TryBlockExpr { | ||
924 | pub fn try_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![try]) } | ||
925 | pub fn body(&self) -> Option<BlockExpr> { support::child(&self.syntax) } | ||
926 | } | ||
927 | |||
928 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
929 | pub struct ForExpr { | ||
930 | pub(crate) syntax: SyntaxNode, | ||
931 | } | ||
932 | impl AstNode for ForExpr { | 1970 | impl AstNode for ForExpr { |
933 | fn can_cast(kind: SyntaxKind) -> bool { kind == FOR_EXPR } | 1971 | fn can_cast(kind: SyntaxKind) -> bool { kind == FOR_EXPR } |
934 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 1972 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -940,19 +1978,6 @@ impl AstNode for ForExpr { | |||
940 | } | 1978 | } |
941 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 1979 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
942 | } | 1980 | } |
943 | impl ast::AttrsOwner for ForExpr {} | ||
944 | impl ast::LoopBodyOwner for ForExpr {} | ||
945 | impl ForExpr { | ||
946 | pub fn for_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![for]) } | ||
947 | pub fn pat(&self) -> Option<Pat> { support::child(&self.syntax) } | ||
948 | pub fn in_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![in]) } | ||
949 | pub fn iterable(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
950 | } | ||
951 | |||
952 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
953 | pub struct WhileExpr { | ||
954 | pub(crate) syntax: SyntaxNode, | ||
955 | } | ||
956 | impl AstNode for WhileExpr { | 1981 | impl AstNode for WhileExpr { |
957 | fn can_cast(kind: SyntaxKind) -> bool { kind == WHILE_EXPR } | 1982 | fn can_cast(kind: SyntaxKind) -> bool { kind == WHILE_EXPR } |
958 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 1983 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -964,17 +1989,6 @@ impl AstNode for WhileExpr { | |||
964 | } | 1989 | } |
965 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 1990 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
966 | } | 1991 | } |
967 | impl ast::AttrsOwner for WhileExpr {} | ||
968 | impl ast::LoopBodyOwner for WhileExpr {} | ||
969 | impl WhileExpr { | ||
970 | pub fn while_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![while]) } | ||
971 | pub fn condition(&self) -> Option<Condition> { support::child(&self.syntax) } | ||
972 | } | ||
973 | |||
974 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
975 | pub struct ContinueExpr { | ||
976 | pub(crate) syntax: SyntaxNode, | ||
977 | } | ||
978 | impl AstNode for ContinueExpr { | 1992 | impl AstNode for ContinueExpr { |
979 | fn can_cast(kind: SyntaxKind) -> bool { kind == CONTINUE_EXPR } | 1993 | fn can_cast(kind: SyntaxKind) -> bool { kind == CONTINUE_EXPR } |
980 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 1994 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -986,20 +2000,6 @@ impl AstNode for ContinueExpr { | |||
986 | } | 2000 | } |
987 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2001 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
988 | } | 2002 | } |
989 | impl ast::AttrsOwner for ContinueExpr {} | ||
990 | impl ContinueExpr { | ||
991 | pub fn continue_token(&self) -> Option<SyntaxToken> { | ||
992 | support::token(&self.syntax, T![continue]) | ||
993 | } | ||
994 | pub fn lifetime_token(&self) -> Option<SyntaxToken> { | ||
995 | support::token(&self.syntax, T![lifetime]) | ||
996 | } | ||
997 | } | ||
998 | |||
999 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1000 | pub struct BreakExpr { | ||
1001 | pub(crate) syntax: SyntaxNode, | ||
1002 | } | ||
1003 | impl AstNode for BreakExpr { | 2003 | impl AstNode for BreakExpr { |
1004 | fn can_cast(kind: SyntaxKind) -> bool { kind == BREAK_EXPR } | 2004 | fn can_cast(kind: SyntaxKind) -> bool { kind == BREAK_EXPR } |
1005 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2005 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -1011,19 +2011,6 @@ impl AstNode for BreakExpr { | |||
1011 | } | 2011 | } |
1012 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2012 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1013 | } | 2013 | } |
1014 | impl ast::AttrsOwner for BreakExpr {} | ||
1015 | impl BreakExpr { | ||
1016 | pub fn break_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![break]) } | ||
1017 | pub fn lifetime_token(&self) -> Option<SyntaxToken> { | ||
1018 | support::token(&self.syntax, T![lifetime]) | ||
1019 | } | ||
1020 | pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
1021 | } | ||
1022 | |||
1023 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1024 | pub struct Label { | ||
1025 | pub(crate) syntax: SyntaxNode, | ||
1026 | } | ||
1027 | impl AstNode for Label { | 2014 | impl AstNode for Label { |
1028 | fn can_cast(kind: SyntaxKind) -> bool { kind == LABEL } | 2015 | fn can_cast(kind: SyntaxKind) -> bool { kind == LABEL } |
1029 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2016 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -1035,16 +2022,6 @@ impl AstNode for Label { | |||
1035 | } | 2022 | } |
1036 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2023 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1037 | } | 2024 | } |
1038 | impl Label { | ||
1039 | pub fn lifetime_token(&self) -> Option<SyntaxToken> { | ||
1040 | support::token(&self.syntax, T![lifetime]) | ||
1041 | } | ||
1042 | } | ||
1043 | |||
1044 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1045 | pub struct BlockExpr { | ||
1046 | pub(crate) syntax: SyntaxNode, | ||
1047 | } | ||
1048 | impl AstNode for BlockExpr { | 2025 | impl AstNode for BlockExpr { |
1049 | fn can_cast(kind: SyntaxKind) -> bool { kind == BLOCK_EXPR } | 2026 | fn can_cast(kind: SyntaxKind) -> bool { kind == BLOCK_EXPR } |
1050 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2027 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -1056,17 +2033,6 @@ impl AstNode for BlockExpr { | |||
1056 | } | 2033 | } |
1057 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2034 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1058 | } | 2035 | } |
1059 | impl ast::AttrsOwner for BlockExpr {} | ||
1060 | impl BlockExpr { | ||
1061 | pub fn label(&self) -> Option<Label> { support::child(&self.syntax) } | ||
1062 | pub fn unsafe_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![unsafe]) } | ||
1063 | pub fn block(&self) -> Option<Block> { support::child(&self.syntax) } | ||
1064 | } | ||
1065 | |||
1066 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1067 | pub struct ReturnExpr { | ||
1068 | pub(crate) syntax: SyntaxNode, | ||
1069 | } | ||
1070 | impl AstNode for ReturnExpr { | 2036 | impl AstNode for ReturnExpr { |
1071 | fn can_cast(kind: SyntaxKind) -> bool { kind == RETURN_EXPR } | 2037 | fn can_cast(kind: SyntaxKind) -> bool { kind == RETURN_EXPR } |
1072 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2038 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -1078,15 +2044,6 @@ impl AstNode for ReturnExpr { | |||
1078 | } | 2044 | } |
1079 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2045 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1080 | } | 2046 | } |
1081 | impl ast::AttrsOwner for ReturnExpr {} | ||
1082 | impl ReturnExpr { | ||
1083 | pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
1084 | } | ||
1085 | |||
1086 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1087 | pub struct CallExpr { | ||
1088 | pub(crate) syntax: SyntaxNode, | ||
1089 | } | ||
1090 | impl AstNode for CallExpr { | 2047 | impl AstNode for CallExpr { |
1091 | fn can_cast(kind: SyntaxKind) -> bool { kind == CALL_EXPR } | 2048 | fn can_cast(kind: SyntaxKind) -> bool { kind == CALL_EXPR } |
1092 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2049 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -1098,15 +2055,6 @@ impl AstNode for CallExpr { | |||
1098 | } | 2055 | } |
1099 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2056 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1100 | } | 2057 | } |
1101 | impl ast::ArgListOwner for CallExpr {} | ||
1102 | impl CallExpr { | ||
1103 | pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
1104 | } | ||
1105 | |||
1106 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1107 | pub struct MethodCallExpr { | ||
1108 | pub(crate) syntax: SyntaxNode, | ||
1109 | } | ||
1110 | impl AstNode for MethodCallExpr { | 2058 | impl AstNode for MethodCallExpr { |
1111 | fn can_cast(kind: SyntaxKind) -> bool { kind == METHOD_CALL_EXPR } | 2059 | fn can_cast(kind: SyntaxKind) -> bool { kind == METHOD_CALL_EXPR } |
1112 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2060 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -1118,19 +2066,6 @@ impl AstNode for MethodCallExpr { | |||
1118 | } | 2066 | } |
1119 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2067 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1120 | } | 2068 | } |
1121 | impl ast::AttrsOwner for MethodCallExpr {} | ||
1122 | impl ast::ArgListOwner for MethodCallExpr {} | ||
1123 | impl MethodCallExpr { | ||
1124 | pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
1125 | pub fn dot_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![.]) } | ||
1126 | pub fn name_ref(&self) -> Option<NameRef> { support::child(&self.syntax) } | ||
1127 | pub fn type_arg_list(&self) -> Option<TypeArgList> { support::child(&self.syntax) } | ||
1128 | } | ||
1129 | |||
1130 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1131 | pub struct IndexExpr { | ||
1132 | pub(crate) syntax: SyntaxNode, | ||
1133 | } | ||
1134 | impl AstNode for IndexExpr { | 2069 | impl AstNode for IndexExpr { |
1135 | fn can_cast(kind: SyntaxKind) -> bool { kind == INDEX_EXPR } | 2070 | fn can_cast(kind: SyntaxKind) -> bool { kind == INDEX_EXPR } |
1136 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2071 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -1142,16 +2077,6 @@ impl AstNode for IndexExpr { | |||
1142 | } | 2077 | } |
1143 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2078 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1144 | } | 2079 | } |
1145 | impl ast::AttrsOwner for IndexExpr {} | ||
1146 | impl IndexExpr { | ||
1147 | pub fn l_brack_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['[']) } | ||
1148 | pub fn r_brack_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![']']) } | ||
1149 | } | ||
1150 | |||
1151 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1152 | pub struct FieldExpr { | ||
1153 | pub(crate) syntax: SyntaxNode, | ||
1154 | } | ||
1155 | impl AstNode for FieldExpr { | 2080 | impl AstNode for FieldExpr { |
1156 | fn can_cast(kind: SyntaxKind) -> bool { kind == FIELD_EXPR } | 2081 | fn can_cast(kind: SyntaxKind) -> bool { kind == FIELD_EXPR } |
1157 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2082 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -1163,17 +2088,6 @@ impl AstNode for FieldExpr { | |||
1163 | } | 2088 | } |
1164 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2089 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1165 | } | 2090 | } |
1166 | impl ast::AttrsOwner for FieldExpr {} | ||
1167 | impl FieldExpr { | ||
1168 | pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
1169 | pub fn dot_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![.]) } | ||
1170 | pub fn name_ref(&self) -> Option<NameRef> { support::child(&self.syntax) } | ||
1171 | } | ||
1172 | |||
1173 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1174 | pub struct AwaitExpr { | ||
1175 | pub(crate) syntax: SyntaxNode, | ||
1176 | } | ||
1177 | impl AstNode for AwaitExpr { | 2091 | impl AstNode for AwaitExpr { |
1178 | fn can_cast(kind: SyntaxKind) -> bool { kind == AWAIT_EXPR } | 2092 | fn can_cast(kind: SyntaxKind) -> bool { kind == AWAIT_EXPR } |
1179 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2093 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -1185,17 +2099,6 @@ impl AstNode for AwaitExpr { | |||
1185 | } | 2099 | } |
1186 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2100 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1187 | } | 2101 | } |
1188 | impl ast::AttrsOwner for AwaitExpr {} | ||
1189 | impl AwaitExpr { | ||
1190 | pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
1191 | pub fn dot_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![.]) } | ||
1192 | pub fn await_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![await]) } | ||
1193 | } | ||
1194 | |||
1195 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1196 | pub struct TryExpr { | ||
1197 | pub(crate) syntax: SyntaxNode, | ||
1198 | } | ||
1199 | impl AstNode for TryExpr { | 2102 | impl AstNode for TryExpr { |
1200 | fn can_cast(kind: SyntaxKind) -> bool { kind == TRY_EXPR } | 2103 | fn can_cast(kind: SyntaxKind) -> bool { kind == TRY_EXPR } |
1201 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2104 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -1207,16 +2110,6 @@ impl AstNode for TryExpr { | |||
1207 | } | 2110 | } |
1208 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2111 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1209 | } | 2112 | } |
1210 | impl ast::AttrsOwner for TryExpr {} | ||
1211 | impl TryExpr { | ||
1212 | pub fn try_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![try]) } | ||
1213 | pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
1214 | } | ||
1215 | |||
1216 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1217 | pub struct CastExpr { | ||
1218 | pub(crate) syntax: SyntaxNode, | ||
1219 | } | ||
1220 | impl AstNode for CastExpr { | 2113 | impl AstNode for CastExpr { |
1221 | fn can_cast(kind: SyntaxKind) -> bool { kind == CAST_EXPR } | 2114 | fn can_cast(kind: SyntaxKind) -> bool { kind == CAST_EXPR } |
1222 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2115 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -1228,17 +2121,6 @@ impl AstNode for CastExpr { | |||
1228 | } | 2121 | } |
1229 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2122 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1230 | } | 2123 | } |
1231 | impl ast::AttrsOwner for CastExpr {} | ||
1232 | impl CastExpr { | ||
1233 | pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
1234 | pub fn as_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![as]) } | ||
1235 | pub fn type_ref(&self) -> Option<TypeRef> { support::child(&self.syntax) } | ||
1236 | } | ||
1237 | |||
1238 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1239 | pub struct RefExpr { | ||
1240 | pub(crate) syntax: SyntaxNode, | ||
1241 | } | ||
1242 | impl AstNode for RefExpr { | 2124 | impl AstNode for RefExpr { |
1243 | fn can_cast(kind: SyntaxKind) -> bool { kind == REF_EXPR } | 2125 | fn can_cast(kind: SyntaxKind) -> bool { kind == REF_EXPR } |
1244 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2126 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -1250,18 +2132,6 @@ impl AstNode for RefExpr { | |||
1250 | } | 2132 | } |
1251 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2133 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1252 | } | 2134 | } |
1253 | impl ast::AttrsOwner for RefExpr {} | ||
1254 | impl RefExpr { | ||
1255 | pub fn amp_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![&]) } | ||
1256 | pub fn raw_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![raw]) } | ||
1257 | pub fn mut_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![mut]) } | ||
1258 | pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
1259 | } | ||
1260 | |||
1261 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1262 | pub struct PrefixExpr { | ||
1263 | pub(crate) syntax: SyntaxNode, | ||
1264 | } | ||
1265 | impl AstNode for PrefixExpr { | 2135 | impl AstNode for PrefixExpr { |
1266 | fn can_cast(kind: SyntaxKind) -> bool { kind == PREFIX_EXPR } | 2136 | fn can_cast(kind: SyntaxKind) -> bool { kind == PREFIX_EXPR } |
1267 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2137 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -1273,15 +2143,6 @@ impl AstNode for PrefixExpr { | |||
1273 | } | 2143 | } |
1274 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2144 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1275 | } | 2145 | } |
1276 | impl ast::AttrsOwner for PrefixExpr {} | ||
1277 | impl PrefixExpr { | ||
1278 | pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
1279 | } | ||
1280 | |||
1281 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1282 | pub struct BoxExpr { | ||
1283 | pub(crate) syntax: SyntaxNode, | ||
1284 | } | ||
1285 | impl AstNode for BoxExpr { | 2146 | impl AstNode for BoxExpr { |
1286 | fn can_cast(kind: SyntaxKind) -> bool { kind == BOX_EXPR } | 2147 | fn can_cast(kind: SyntaxKind) -> bool { kind == BOX_EXPR } |
1287 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2148 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -1293,16 +2154,6 @@ impl AstNode for BoxExpr { | |||
1293 | } | 2154 | } |
1294 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2155 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1295 | } | 2156 | } |
1296 | impl ast::AttrsOwner for BoxExpr {} | ||
1297 | impl BoxExpr { | ||
1298 | pub fn box_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![box]) } | ||
1299 | pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
1300 | } | ||
1301 | |||
1302 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1303 | pub struct RangeExpr { | ||
1304 | pub(crate) syntax: SyntaxNode, | ||
1305 | } | ||
1306 | impl AstNode for RangeExpr { | 2157 | impl AstNode for RangeExpr { |
1307 | fn can_cast(kind: SyntaxKind) -> bool { kind == RANGE_EXPR } | 2158 | fn can_cast(kind: SyntaxKind) -> bool { kind == RANGE_EXPR } |
1308 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2159 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -1314,13 +2165,6 @@ impl AstNode for RangeExpr { | |||
1314 | } | 2165 | } |
1315 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2166 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1316 | } | 2167 | } |
1317 | impl ast::AttrsOwner for RangeExpr {} | ||
1318 | impl RangeExpr {} | ||
1319 | |||
1320 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1321 | pub struct BinExpr { | ||
1322 | pub(crate) syntax: SyntaxNode, | ||
1323 | } | ||
1324 | impl AstNode for BinExpr { | 2168 | impl AstNode for BinExpr { |
1325 | fn can_cast(kind: SyntaxKind) -> bool { kind == BIN_EXPR } | 2169 | fn can_cast(kind: SyntaxKind) -> bool { kind == BIN_EXPR } |
1326 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2170 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -1332,13 +2176,6 @@ impl AstNode for BinExpr { | |||
1332 | } | 2176 | } |
1333 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2177 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1334 | } | 2178 | } |
1335 | impl ast::AttrsOwner for BinExpr {} | ||
1336 | impl BinExpr {} | ||
1337 | |||
1338 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1339 | pub struct Literal { | ||
1340 | pub(crate) syntax: SyntaxNode, | ||
1341 | } | ||
1342 | impl AstNode for Literal { | 2179 | impl AstNode for Literal { |
1343 | fn can_cast(kind: SyntaxKind) -> bool { kind == LITERAL } | 2180 | fn can_cast(kind: SyntaxKind) -> bool { kind == LITERAL } |
1344 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2181 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -1350,12 +2187,6 @@ impl AstNode for Literal { | |||
1350 | } | 2187 | } |
1351 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2188 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1352 | } | 2189 | } |
1353 | impl Literal {} | ||
1354 | |||
1355 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1356 | pub struct MatchExpr { | ||
1357 | pub(crate) syntax: SyntaxNode, | ||
1358 | } | ||
1359 | impl AstNode for MatchExpr { | 2190 | impl AstNode for MatchExpr { |
1360 | fn can_cast(kind: SyntaxKind) -> bool { kind == MATCH_EXPR } | 2191 | fn can_cast(kind: SyntaxKind) -> bool { kind == MATCH_EXPR } |
1361 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2192 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -1367,17 +2198,6 @@ impl AstNode for MatchExpr { | |||
1367 | } | 2198 | } |
1368 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2199 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1369 | } | 2200 | } |
1370 | impl ast::AttrsOwner for MatchExpr {} | ||
1371 | impl MatchExpr { | ||
1372 | pub fn match_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![match]) } | ||
1373 | pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
1374 | pub fn match_arm_list(&self) -> Option<MatchArmList> { support::child(&self.syntax) } | ||
1375 | } | ||
1376 | |||
1377 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1378 | pub struct MatchArmList { | ||
1379 | pub(crate) syntax: SyntaxNode, | ||
1380 | } | ||
1381 | impl AstNode for MatchArmList { | 2201 | impl AstNode for MatchArmList { |
1382 | fn can_cast(kind: SyntaxKind) -> bool { kind == MATCH_ARM_LIST } | 2202 | fn can_cast(kind: SyntaxKind) -> bool { kind == MATCH_ARM_LIST } |
1383 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2203 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -1389,17 +2209,6 @@ impl AstNode for MatchArmList { | |||
1389 | } | 2209 | } |
1390 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2210 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1391 | } | 2211 | } |
1392 | impl ast::AttrsOwner for MatchArmList {} | ||
1393 | impl MatchArmList { | ||
1394 | pub fn l_curly_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['{']) } | ||
1395 | pub fn arms(&self) -> AstChildren<MatchArm> { support::children(&self.syntax) } | ||
1396 | pub fn r_curly_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['}']) } | ||
1397 | } | ||
1398 | |||
1399 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1400 | pub struct MatchArm { | ||
1401 | pub(crate) syntax: SyntaxNode, | ||
1402 | } | ||
1403 | impl AstNode for MatchArm { | 2212 | impl AstNode for MatchArm { |
1404 | fn can_cast(kind: SyntaxKind) -> bool { kind == MATCH_ARM } | 2213 | fn can_cast(kind: SyntaxKind) -> bool { kind == MATCH_ARM } |
1405 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2214 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -1411,18 +2220,6 @@ impl AstNode for MatchArm { | |||
1411 | } | 2220 | } |
1412 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2221 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1413 | } | 2222 | } |
1414 | impl ast::AttrsOwner for MatchArm {} | ||
1415 | impl MatchArm { | ||
1416 | pub fn pat(&self) -> Option<Pat> { support::child(&self.syntax) } | ||
1417 | pub fn guard(&self) -> Option<MatchGuard> { support::child(&self.syntax) } | ||
1418 | pub fn fat_arrow_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![=>]) } | ||
1419 | pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
1420 | } | ||
1421 | |||
1422 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1423 | pub struct MatchGuard { | ||
1424 | pub(crate) syntax: SyntaxNode, | ||
1425 | } | ||
1426 | impl AstNode for MatchGuard { | 2223 | impl AstNode for MatchGuard { |
1427 | fn can_cast(kind: SyntaxKind) -> bool { kind == MATCH_GUARD } | 2224 | fn can_cast(kind: SyntaxKind) -> bool { kind == MATCH_GUARD } |
1428 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2225 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -1434,15 +2231,6 @@ impl AstNode for MatchGuard { | |||
1434 | } | 2231 | } |
1435 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2232 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1436 | } | 2233 | } |
1437 | impl MatchGuard { | ||
1438 | pub fn if_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![if]) } | ||
1439 | pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
1440 | } | ||
1441 | |||
1442 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1443 | pub struct RecordLit { | ||
1444 | pub(crate) syntax: SyntaxNode, | ||
1445 | } | ||
1446 | impl AstNode for RecordLit { | 2234 | impl AstNode for RecordLit { |
1447 | fn can_cast(kind: SyntaxKind) -> bool { kind == RECORD_LIT } | 2235 | fn can_cast(kind: SyntaxKind) -> bool { kind == RECORD_LIT } |
1448 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2236 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -1454,15 +2242,6 @@ impl AstNode for RecordLit { | |||
1454 | } | 2242 | } |
1455 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2243 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1456 | } | 2244 | } |
1457 | impl RecordLit { | ||
1458 | pub fn path(&self) -> Option<Path> { support::child(&self.syntax) } | ||
1459 | pub fn record_field_list(&self) -> Option<RecordFieldList> { support::child(&self.syntax) } | ||
1460 | } | ||
1461 | |||
1462 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1463 | pub struct RecordFieldList { | ||
1464 | pub(crate) syntax: SyntaxNode, | ||
1465 | } | ||
1466 | impl AstNode for RecordFieldList { | 2245 | impl AstNode for RecordFieldList { |
1467 | fn can_cast(kind: SyntaxKind) -> bool { kind == RECORD_FIELD_LIST } | 2246 | fn can_cast(kind: SyntaxKind) -> bool { kind == RECORD_FIELD_LIST } |
1468 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2247 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -1474,18 +2253,6 @@ impl AstNode for RecordFieldList { | |||
1474 | } | 2253 | } |
1475 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2254 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1476 | } | 2255 | } |
1477 | impl RecordFieldList { | ||
1478 | pub fn l_curly_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['{']) } | ||
1479 | pub fn fields(&self) -> AstChildren<RecordField> { support::children(&self.syntax) } | ||
1480 | pub fn dotdot_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![..]) } | ||
1481 | pub fn spread(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
1482 | pub fn r_curly_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['}']) } | ||
1483 | } | ||
1484 | |||
1485 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1486 | pub struct RecordField { | ||
1487 | pub(crate) syntax: SyntaxNode, | ||
1488 | } | ||
1489 | impl AstNode for RecordField { | 2256 | impl AstNode for RecordField { |
1490 | fn can_cast(kind: SyntaxKind) -> bool { kind == RECORD_FIELD } | 2257 | fn can_cast(kind: SyntaxKind) -> bool { kind == RECORD_FIELD } |
1491 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2258 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -1497,17 +2264,6 @@ impl AstNode for RecordField { | |||
1497 | } | 2264 | } |
1498 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2265 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1499 | } | 2266 | } |
1500 | impl ast::AttrsOwner for RecordField {} | ||
1501 | impl RecordField { | ||
1502 | pub fn name_ref(&self) -> Option<NameRef> { support::child(&self.syntax) } | ||
1503 | pub fn colon_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![:]) } | ||
1504 | pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
1505 | } | ||
1506 | |||
1507 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1508 | pub struct OrPat { | ||
1509 | pub(crate) syntax: SyntaxNode, | ||
1510 | } | ||
1511 | impl AstNode for OrPat { | 2267 | impl AstNode for OrPat { |
1512 | fn can_cast(kind: SyntaxKind) -> bool { kind == OR_PAT } | 2268 | fn can_cast(kind: SyntaxKind) -> bool { kind == OR_PAT } |
1513 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2269 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -1519,14 +2275,6 @@ impl AstNode for OrPat { | |||
1519 | } | 2275 | } |
1520 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2276 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1521 | } | 2277 | } |
1522 | impl OrPat { | ||
1523 | pub fn pats(&self) -> AstChildren<Pat> { support::children(&self.syntax) } | ||
1524 | } | ||
1525 | |||
1526 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1527 | pub struct ParenPat { | ||
1528 | pub(crate) syntax: SyntaxNode, | ||
1529 | } | ||
1530 | impl AstNode for ParenPat { | 2278 | impl AstNode for ParenPat { |
1531 | fn can_cast(kind: SyntaxKind) -> bool { kind == PAREN_PAT } | 2279 | fn can_cast(kind: SyntaxKind) -> bool { kind == PAREN_PAT } |
1532 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2280 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -1538,16 +2286,6 @@ impl AstNode for ParenPat { | |||
1538 | } | 2286 | } |
1539 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2287 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1540 | } | 2288 | } |
1541 | impl ParenPat { | ||
1542 | pub fn l_paren_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['(']) } | ||
1543 | pub fn pat(&self) -> Option<Pat> { support::child(&self.syntax) } | ||
1544 | pub fn r_paren_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![')']) } | ||
1545 | } | ||
1546 | |||
1547 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1548 | pub struct RefPat { | ||
1549 | pub(crate) syntax: SyntaxNode, | ||
1550 | } | ||
1551 | impl AstNode for RefPat { | 2289 | impl AstNode for RefPat { |
1552 | fn can_cast(kind: SyntaxKind) -> bool { kind == REF_PAT } | 2290 | fn can_cast(kind: SyntaxKind) -> bool { kind == REF_PAT } |
1553 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2291 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -1559,16 +2297,6 @@ impl AstNode for RefPat { | |||
1559 | } | 2297 | } |
1560 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2298 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1561 | } | 2299 | } |
1562 | impl RefPat { | ||
1563 | pub fn amp_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![&]) } | ||
1564 | pub fn mut_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![mut]) } | ||
1565 | pub fn pat(&self) -> Option<Pat> { support::child(&self.syntax) } | ||
1566 | } | ||
1567 | |||
1568 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1569 | pub struct BoxPat { | ||
1570 | pub(crate) syntax: SyntaxNode, | ||
1571 | } | ||
1572 | impl AstNode for BoxPat { | 2300 | impl AstNode for BoxPat { |
1573 | fn can_cast(kind: SyntaxKind) -> bool { kind == BOX_PAT } | 2301 | fn can_cast(kind: SyntaxKind) -> bool { kind == BOX_PAT } |
1574 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2302 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -1580,15 +2308,6 @@ impl AstNode for BoxPat { | |||
1580 | } | 2308 | } |
1581 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2309 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1582 | } | 2310 | } |
1583 | impl BoxPat { | ||
1584 | pub fn box_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![box]) } | ||
1585 | pub fn pat(&self) -> Option<Pat> { support::child(&self.syntax) } | ||
1586 | } | ||
1587 | |||
1588 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1589 | pub struct BindPat { | ||
1590 | pub(crate) syntax: SyntaxNode, | ||
1591 | } | ||
1592 | impl AstNode for BindPat { | 2311 | impl AstNode for BindPat { |
1593 | fn can_cast(kind: SyntaxKind) -> bool { kind == BIND_PAT } | 2312 | fn can_cast(kind: SyntaxKind) -> bool { kind == BIND_PAT } |
1594 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2313 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -1600,19 +2319,6 @@ impl AstNode for BindPat { | |||
1600 | } | 2319 | } |
1601 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2320 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1602 | } | 2321 | } |
1603 | impl ast::AttrsOwner for BindPat {} | ||
1604 | impl ast::NameOwner for BindPat {} | ||
1605 | impl BindPat { | ||
1606 | pub fn ref_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![ref]) } | ||
1607 | pub fn mut_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![mut]) } | ||
1608 | pub fn at_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![@]) } | ||
1609 | pub fn pat(&self) -> Option<Pat> { support::child(&self.syntax) } | ||
1610 | } | ||
1611 | |||
1612 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1613 | pub struct PlaceholderPat { | ||
1614 | pub(crate) syntax: SyntaxNode, | ||
1615 | } | ||
1616 | impl AstNode for PlaceholderPat { | 2322 | impl AstNode for PlaceholderPat { |
1617 | fn can_cast(kind: SyntaxKind) -> bool { kind == PLACEHOLDER_PAT } | 2323 | fn can_cast(kind: SyntaxKind) -> bool { kind == PLACEHOLDER_PAT } |
1618 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2324 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -1624,14 +2330,6 @@ impl AstNode for PlaceholderPat { | |||
1624 | } | 2330 | } |
1625 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2331 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1626 | } | 2332 | } |
1627 | impl PlaceholderPat { | ||
1628 | pub fn underscore_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![_]) } | ||
1629 | } | ||
1630 | |||
1631 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1632 | pub struct DotDotPat { | ||
1633 | pub(crate) syntax: SyntaxNode, | ||
1634 | } | ||
1635 | impl AstNode for DotDotPat { | 2333 | impl AstNode for DotDotPat { |
1636 | fn can_cast(kind: SyntaxKind) -> bool { kind == DOT_DOT_PAT } | 2334 | fn can_cast(kind: SyntaxKind) -> bool { kind == DOT_DOT_PAT } |
1637 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2335 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -1643,14 +2341,6 @@ impl AstNode for DotDotPat { | |||
1643 | } | 2341 | } |
1644 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2342 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1645 | } | 2343 | } |
1646 | impl DotDotPat { | ||
1647 | pub fn dotdot_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![..]) } | ||
1648 | } | ||
1649 | |||
1650 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1651 | pub struct PathPat { | ||
1652 | pub(crate) syntax: SyntaxNode, | ||
1653 | } | ||
1654 | impl AstNode for PathPat { | 2344 | impl AstNode for PathPat { |
1655 | fn can_cast(kind: SyntaxKind) -> bool { kind == PATH_PAT } | 2345 | fn can_cast(kind: SyntaxKind) -> bool { kind == PATH_PAT } |
1656 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2346 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -1662,14 +2352,6 @@ impl AstNode for PathPat { | |||
1662 | } | 2352 | } |
1663 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2353 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1664 | } | 2354 | } |
1665 | impl PathPat { | ||
1666 | pub fn path(&self) -> Option<Path> { support::child(&self.syntax) } | ||
1667 | } | ||
1668 | |||
1669 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1670 | pub struct SlicePat { | ||
1671 | pub(crate) syntax: SyntaxNode, | ||
1672 | } | ||
1673 | impl AstNode for SlicePat { | 2355 | impl AstNode for SlicePat { |
1674 | fn can_cast(kind: SyntaxKind) -> bool { kind == SLICE_PAT } | 2356 | fn can_cast(kind: SyntaxKind) -> bool { kind == SLICE_PAT } |
1675 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2357 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -1681,16 +2363,6 @@ impl AstNode for SlicePat { | |||
1681 | } | 2363 | } |
1682 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2364 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1683 | } | 2365 | } |
1684 | impl SlicePat { | ||
1685 | pub fn l_brack_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['[']) } | ||
1686 | pub fn args(&self) -> AstChildren<Pat> { support::children(&self.syntax) } | ||
1687 | pub fn r_brack_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![']']) } | ||
1688 | } | ||
1689 | |||
1690 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1691 | pub struct RangePat { | ||
1692 | pub(crate) syntax: SyntaxNode, | ||
1693 | } | ||
1694 | impl AstNode for RangePat { | 2366 | impl AstNode for RangePat { |
1695 | fn can_cast(kind: SyntaxKind) -> bool { kind == RANGE_PAT } | 2367 | fn can_cast(kind: SyntaxKind) -> bool { kind == RANGE_PAT } |
1696 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2368 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -1702,12 +2374,6 @@ impl AstNode for RangePat { | |||
1702 | } | 2374 | } |
1703 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2375 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1704 | } | 2376 | } |
1705 | impl RangePat {} | ||
1706 | |||
1707 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1708 | pub struct LiteralPat { | ||
1709 | pub(crate) syntax: SyntaxNode, | ||
1710 | } | ||
1711 | impl AstNode for LiteralPat { | 2377 | impl AstNode for LiteralPat { |
1712 | fn can_cast(kind: SyntaxKind) -> bool { kind == LITERAL_PAT } | 2378 | fn can_cast(kind: SyntaxKind) -> bool { kind == LITERAL_PAT } |
1713 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2379 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -1719,14 +2385,6 @@ impl AstNode for LiteralPat { | |||
1719 | } | 2385 | } |
1720 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2386 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1721 | } | 2387 | } |
1722 | impl LiteralPat { | ||
1723 | pub fn literal(&self) -> Option<Literal> { support::child(&self.syntax) } | ||
1724 | } | ||
1725 | |||
1726 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1727 | pub struct MacroPat { | ||
1728 | pub(crate) syntax: SyntaxNode, | ||
1729 | } | ||
1730 | impl AstNode for MacroPat { | 2388 | impl AstNode for MacroPat { |
1731 | fn can_cast(kind: SyntaxKind) -> bool { kind == MACRO_PAT } | 2389 | fn can_cast(kind: SyntaxKind) -> bool { kind == MACRO_PAT } |
1732 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2390 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -1738,14 +2396,6 @@ impl AstNode for MacroPat { | |||
1738 | } | 2396 | } |
1739 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2397 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1740 | } | 2398 | } |
1741 | impl MacroPat { | ||
1742 | pub fn macro_call(&self) -> Option<MacroCall> { support::child(&self.syntax) } | ||
1743 | } | ||
1744 | |||
1745 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1746 | pub struct RecordPat { | ||
1747 | pub(crate) syntax: SyntaxNode, | ||
1748 | } | ||
1749 | impl AstNode for RecordPat { | 2399 | impl AstNode for RecordPat { |
1750 | fn can_cast(kind: SyntaxKind) -> bool { kind == RECORD_PAT } | 2400 | fn can_cast(kind: SyntaxKind) -> bool { kind == RECORD_PAT } |
1751 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2401 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -1757,17 +2407,6 @@ impl AstNode for RecordPat { | |||
1757 | } | 2407 | } |
1758 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2408 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1759 | } | 2409 | } |
1760 | impl RecordPat { | ||
1761 | pub fn record_field_pat_list(&self) -> Option<RecordFieldPatList> { | ||
1762 | support::child(&self.syntax) | ||
1763 | } | ||
1764 | pub fn path(&self) -> Option<Path> { support::child(&self.syntax) } | ||
1765 | } | ||
1766 | |||
1767 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1768 | pub struct RecordFieldPatList { | ||
1769 | pub(crate) syntax: SyntaxNode, | ||
1770 | } | ||
1771 | impl AstNode for RecordFieldPatList { | 2410 | impl AstNode for RecordFieldPatList { |
1772 | fn can_cast(kind: SyntaxKind) -> bool { kind == RECORD_FIELD_PAT_LIST } | 2411 | fn can_cast(kind: SyntaxKind) -> bool { kind == RECORD_FIELD_PAT_LIST } |
1773 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2412 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -1779,21 +2418,6 @@ impl AstNode for RecordFieldPatList { | |||
1779 | } | 2418 | } |
1780 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2419 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1781 | } | 2420 | } |
1782 | impl RecordFieldPatList { | ||
1783 | pub fn l_curly_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['{']) } | ||
1784 | pub fn pats(&self) -> AstChildren<RecordInnerPat> { support::children(&self.syntax) } | ||
1785 | pub fn record_field_pats(&self) -> AstChildren<RecordFieldPat> { | ||
1786 | support::children(&self.syntax) | ||
1787 | } | ||
1788 | pub fn bind_pats(&self) -> AstChildren<BindPat> { support::children(&self.syntax) } | ||
1789 | pub fn dotdot_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![..]) } | ||
1790 | pub fn r_curly_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['}']) } | ||
1791 | } | ||
1792 | |||
1793 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1794 | pub struct RecordFieldPat { | ||
1795 | pub(crate) syntax: SyntaxNode, | ||
1796 | } | ||
1797 | impl AstNode for RecordFieldPat { | 2421 | impl AstNode for RecordFieldPat { |
1798 | fn can_cast(kind: SyntaxKind) -> bool { kind == RECORD_FIELD_PAT } | 2422 | fn can_cast(kind: SyntaxKind) -> bool { kind == RECORD_FIELD_PAT } |
1799 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2423 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -1805,17 +2429,6 @@ impl AstNode for RecordFieldPat { | |||
1805 | } | 2429 | } |
1806 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2430 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1807 | } | 2431 | } |
1808 | impl ast::AttrsOwner for RecordFieldPat {} | ||
1809 | impl RecordFieldPat { | ||
1810 | pub fn name_ref(&self) -> Option<NameRef> { support::child(&self.syntax) } | ||
1811 | pub fn colon_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![:]) } | ||
1812 | pub fn pat(&self) -> Option<Pat> { support::child(&self.syntax) } | ||
1813 | } | ||
1814 | |||
1815 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1816 | pub struct TupleStructPat { | ||
1817 | pub(crate) syntax: SyntaxNode, | ||
1818 | } | ||
1819 | impl AstNode for TupleStructPat { | 2432 | impl AstNode for TupleStructPat { |
1820 | fn can_cast(kind: SyntaxKind) -> bool { kind == TUPLE_STRUCT_PAT } | 2433 | fn can_cast(kind: SyntaxKind) -> bool { kind == TUPLE_STRUCT_PAT } |
1821 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2434 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -1827,17 +2440,6 @@ impl AstNode for TupleStructPat { | |||
1827 | } | 2440 | } |
1828 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2441 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1829 | } | 2442 | } |
1830 | impl TupleStructPat { | ||
1831 | pub fn path(&self) -> Option<Path> { support::child(&self.syntax) } | ||
1832 | pub fn l_paren_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['(']) } | ||
1833 | pub fn args(&self) -> AstChildren<Pat> { support::children(&self.syntax) } | ||
1834 | pub fn r_paren_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![')']) } | ||
1835 | } | ||
1836 | |||
1837 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1838 | pub struct TuplePat { | ||
1839 | pub(crate) syntax: SyntaxNode, | ||
1840 | } | ||
1841 | impl AstNode for TuplePat { | 2443 | impl AstNode for TuplePat { |
1842 | fn can_cast(kind: SyntaxKind) -> bool { kind == TUPLE_PAT } | 2444 | fn can_cast(kind: SyntaxKind) -> bool { kind == TUPLE_PAT } |
1843 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2445 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -1849,16 +2451,6 @@ impl AstNode for TuplePat { | |||
1849 | } | 2451 | } |
1850 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2452 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1851 | } | 2453 | } |
1852 | impl TuplePat { | ||
1853 | pub fn l_paren_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['(']) } | ||
1854 | pub fn args(&self) -> AstChildren<Pat> { support::children(&self.syntax) } | ||
1855 | pub fn r_paren_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![')']) } | ||
1856 | } | ||
1857 | |||
1858 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1859 | pub struct Visibility { | ||
1860 | pub(crate) syntax: SyntaxNode, | ||
1861 | } | ||
1862 | impl AstNode for Visibility { | 2454 | impl AstNode for Visibility { |
1863 | fn can_cast(kind: SyntaxKind) -> bool { kind == VISIBILITY } | 2455 | fn can_cast(kind: SyntaxKind) -> bool { kind == VISIBILITY } |
1864 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2456 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -1870,17 +2462,6 @@ impl AstNode for Visibility { | |||
1870 | } | 2462 | } |
1871 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2463 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1872 | } | 2464 | } |
1873 | impl Visibility { | ||
1874 | pub fn pub_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![pub]) } | ||
1875 | pub fn super_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![super]) } | ||
1876 | pub fn self_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![self]) } | ||
1877 | pub fn crate_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![crate]) } | ||
1878 | } | ||
1879 | |||
1880 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1881 | pub struct Name { | ||
1882 | pub(crate) syntax: SyntaxNode, | ||
1883 | } | ||
1884 | impl AstNode for Name { | 2465 | impl AstNode for Name { |
1885 | fn can_cast(kind: SyntaxKind) -> bool { kind == NAME } | 2466 | fn can_cast(kind: SyntaxKind) -> bool { kind == NAME } |
1886 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2467 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -1892,14 +2473,6 @@ impl AstNode for Name { | |||
1892 | } | 2473 | } |
1893 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2474 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1894 | } | 2475 | } |
1895 | impl Name { | ||
1896 | pub fn ident_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![ident]) } | ||
1897 | } | ||
1898 | |||
1899 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1900 | pub struct NameRef { | ||
1901 | pub(crate) syntax: SyntaxNode, | ||
1902 | } | ||
1903 | impl AstNode for NameRef { | 2476 | impl AstNode for NameRef { |
1904 | fn can_cast(kind: SyntaxKind) -> bool { kind == NAME_REF } | 2477 | fn can_cast(kind: SyntaxKind) -> bool { kind == NAME_REF } |
1905 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2478 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -1911,12 +2484,6 @@ impl AstNode for NameRef { | |||
1911 | } | 2484 | } |
1912 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2485 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1913 | } | 2486 | } |
1914 | impl NameRef {} | ||
1915 | |||
1916 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1917 | pub struct MacroCall { | ||
1918 | pub(crate) syntax: SyntaxNode, | ||
1919 | } | ||
1920 | impl AstNode for MacroCall { | 2487 | impl AstNode for MacroCall { |