diff options
40 files changed, 222 insertions, 184 deletions
diff --git a/crates/ra_assists/src/handlers/auto_import.rs b/crates/ra_assists/src/handlers/auto_import.rs index 947be3b9b..01e7b7a44 100644 --- a/crates/ra_assists/src/handlers/auto_import.rs +++ b/crates/ra_assists/src/handlers/auto_import.rs | |||
@@ -92,7 +92,7 @@ impl AutoImportAssets { | |||
92 | 92 | ||
93 | fn for_regular_path(path_under_caret: ast::Path, ctx: &AssistContext) -> Option<Self> { | 93 | fn for_regular_path(path_under_caret: ast::Path, ctx: &AssistContext) -> Option<Self> { |
94 | let syntax_under_caret = path_under_caret.syntax().to_owned(); | 94 | let syntax_under_caret = path_under_caret.syntax().to_owned(); |
95 | if syntax_under_caret.ancestors().find_map(ast::UseItem::cast).is_some() { | 95 | if syntax_under_caret.ancestors().find_map(ast::Use::cast).is_some() { |
96 | return None; | 96 | return None; |
97 | } | 97 | } |
98 | 98 | ||
diff --git a/crates/ra_assists/src/handlers/merge_imports.rs b/crates/ra_assists/src/handlers/merge_imports.rs index 1beccb61c..c775fe25c 100644 --- a/crates/ra_assists/src/handlers/merge_imports.rs +++ b/crates/ra_assists/src/handlers/merge_imports.rs | |||
@@ -28,7 +28,7 @@ pub(crate) fn merge_imports(acc: &mut Assists, ctx: &AssistContext) -> Option<() | |||
28 | let mut rewriter = SyntaxRewriter::default(); | 28 | let mut rewriter = SyntaxRewriter::default(); |
29 | let mut offset = ctx.offset(); | 29 | let mut offset = ctx.offset(); |
30 | 30 | ||
31 | if let Some(use_item) = tree.syntax().parent().and_then(ast::UseItem::cast) { | 31 | if let Some(use_item) = tree.syntax().parent().and_then(ast::Use::cast) { |
32 | let (merged, to_delete) = next_prev() | 32 | let (merged, to_delete) = next_prev() |
33 | .filter_map(|dir| neighbor(&use_item, dir)) | 33 | .filter_map(|dir| neighbor(&use_item, dir)) |
34 | .filter_map(|it| Some((it.clone(), it.use_tree()?))) | 34 | .filter_map(|it| Some((it.clone(), it.use_tree()?))) |
diff --git a/crates/ra_assists/src/handlers/replace_qualified_name_with_use.rs b/crates/ra_assists/src/handlers/replace_qualified_name_with_use.rs index 3d51faa54..53496ede1 100644 --- a/crates/ra_assists/src/handlers/replace_qualified_name_with_use.rs +++ b/crates/ra_assists/src/handlers/replace_qualified_name_with_use.rs | |||
@@ -25,7 +25,7 @@ pub(crate) fn replace_qualified_name_with_use( | |||
25 | ) -> Option<()> { | 25 | ) -> Option<()> { |
26 | let path: ast::Path = ctx.find_node_at_offset()?; | 26 | let path: ast::Path = ctx.find_node_at_offset()?; |
27 | // We don't want to mess with use statements | 27 | // We don't want to mess with use statements |
28 | if path.syntax().ancestors().find_map(ast::UseItem::cast).is_some() { | 28 | if path.syntax().ancestors().find_map(ast::Use::cast).is_some() { |
29 | return None; | 29 | return None; |
30 | } | 30 | } |
31 | 31 | ||
@@ -85,7 +85,7 @@ fn shorten_paths(rewriter: &mut SyntaxRewriter<'static>, node: SyntaxNode, path: | |||
85 | match child { | 85 | match child { |
86 | // Don't modify `use` items, as this can break the `use` item when injecting a new | 86 | // Don't modify `use` items, as this can break the `use` item when injecting a new |
87 | // import into the use tree. | 87 | // import into the use tree. |
88 | ast::UseItem(_it) => continue, | 88 | ast::Use(_it) => continue, |
89 | // Don't descend into submodules, they don't have the same `use` items in scope. | 89 | // Don't descend into submodules, they don't have the same `use` items in scope. |
90 | ast::Module(_it) => continue, | 90 | ast::Module(_it) => continue, |
91 | 91 | ||
diff --git a/crates/ra_assists/src/utils/insert_use.rs b/crates/ra_assists/src/utils/insert_use.rs index c05027eff..617afe2e9 100644 --- a/crates/ra_assists/src/utils/insert_use.rs +++ b/crates/ra_assists/src/utils/insert_use.rs | |||
@@ -225,7 +225,7 @@ fn walk_use_tree_for_best_action( | |||
225 | current_use_tree | 225 | current_use_tree |
226 | .syntax() | 226 | .syntax() |
227 | .ancestors() | 227 | .ancestors() |
228 | .find_map(ast::UseItem::cast) | 228 | .find_map(ast::Use::cast) |
229 | .map(|it| it.syntax().clone()), | 229 | .map(|it| it.syntax().clone()), |
230 | true, | 230 | true, |
231 | ); | 231 | ); |
@@ -254,7 +254,7 @@ fn walk_use_tree_for_best_action( | |||
254 | current_use_tree | 254 | current_use_tree |
255 | .syntax() | 255 | .syntax() |
256 | .ancestors() | 256 | .ancestors() |
257 | .find_map(ast::UseItem::cast) | 257 | .find_map(ast::Use::cast) |
258 | .map(|it| it.syntax().clone()), | 258 | .map(|it| it.syntax().clone()), |
259 | true, | 259 | true, |
260 | ), | 260 | ), |
@@ -304,7 +304,7 @@ fn walk_use_tree_for_best_action( | |||
304 | current_use_tree | 304 | current_use_tree |
305 | .syntax() | 305 | .syntax() |
306 | .ancestors() | 306 | .ancestors() |
307 | .find_map(ast::UseItem::cast) | 307 | .find_map(ast::Use::cast) |
308 | .map(|it| it.syntax().clone()), | 308 | .map(|it| it.syntax().clone()), |
309 | true, | 309 | true, |
310 | ); | 310 | ); |
@@ -377,7 +377,7 @@ fn best_action_for_target( | |||
377 | let mut storage = Vec::with_capacity(16); // this should be the only allocation | 377 | let mut storage = Vec::with_capacity(16); // this should be the only allocation |
378 | let best_action = container | 378 | let best_action = container |
379 | .children() | 379 | .children() |
380 | .filter_map(ast::UseItem::cast) | 380 | .filter_map(ast::Use::cast) |
381 | .filter_map(|it| it.use_tree()) | 381 | .filter_map(|it| it.use_tree()) |
382 | .map(|u| walk_use_tree_for_best_action(&mut storage, None, u, target)) | 382 | .map(|u| walk_use_tree_for_best_action(&mut storage, None, u, target)) |
383 | .fold(None, |best, a| match best { | 383 | .fold(None, |best, a| match best { |
diff --git a/crates/ra_hir_def/src/body/lower.rs b/crates/ra_hir_def/src/body/lower.rs index bfd574c5d..5c57d8bde 100644 --- a/crates/ra_hir_def/src/body/lower.rs +++ b/crates/ra_hir_def/src/body/lower.rs | |||
@@ -670,7 +670,7 @@ impl ExprCollector<'_> { | |||
670 | } | 670 | } |
671 | ast::Item::ExternBlock(_) => return None, // FIXME: collect from extern blocks | 671 | ast::Item::ExternBlock(_) => return None, // FIXME: collect from extern blocks |
672 | ast::Item::ImplDef(_) | 672 | ast::Item::ImplDef(_) |
673 | | ast::Item::UseItem(_) | 673 | | ast::Item::Use(_) |
674 | | ast::Item::ExternCrate(_) | 674 | | ast::Item::ExternCrate(_) |
675 | | ast::Item::Module(_) | 675 | | ast::Item::Module(_) |
676 | | ast::Item::MacroCall(_) => return None, | 676 | | ast::Item::MacroCall(_) => return None, |
diff --git a/crates/ra_hir_def/src/item_tree.rs b/crates/ra_hir_def/src/item_tree.rs index 4db7b2793..0bab9c6d8 100644 --- a/crates/ra_hir_def/src/item_tree.rs +++ b/crates/ra_hir_def/src/item_tree.rs | |||
@@ -411,7 +411,7 @@ macro_rules! mod_items { | |||
411 | } | 411 | } |
412 | 412 | ||
413 | mod_items! { | 413 | mod_items! { |
414 | Import in imports -> ast::UseItem, | 414 | Import in imports -> ast::Use, |
415 | ExternCrate in extern_crates -> ast::ExternCrate, | 415 | ExternCrate in extern_crates -> ast::ExternCrate, |
416 | Function in functions -> ast::FnDef, | 416 | Function in functions -> ast::FnDef, |
417 | Struct in structs -> ast::StructDef, | 417 | Struct in structs -> ast::StructDef, |
@@ -482,7 +482,7 @@ pub struct Import { | |||
482 | pub is_prelude: bool, | 482 | pub is_prelude: bool, |
483 | /// AST ID of the `use` or `extern crate` item this import was derived from. Note that many | 483 | /// AST ID of the `use` or `extern crate` item this import was derived from. Note that many |
484 | /// `Import`s can map to the same `use` item. | 484 | /// `Import`s can map to the same `use` item. |
485 | pub ast_id: FileAstId<ast::UseItem>, | 485 | pub ast_id: FileAstId<ast::Use>, |
486 | } | 486 | } |
487 | 487 | ||
488 | #[derive(Debug, Clone, Eq, PartialEq)] | 488 | #[derive(Debug, Clone, Eq, PartialEq)] |
diff --git a/crates/ra_hir_def/src/item_tree/lower.rs b/crates/ra_hir_def/src/item_tree/lower.rs index 8a36de311..8bd0362dc 100644 --- a/crates/ra_hir_def/src/item_tree/lower.rs +++ b/crates/ra_hir_def/src/item_tree/lower.rs | |||
@@ -95,7 +95,7 @@ impl Ctx { | |||
95 | ast::Item::TraitDef(_) | ast::Item::ImplDef(_) | ast::Item::ExternBlock(_) => {} | 95 | ast::Item::TraitDef(_) | ast::Item::ImplDef(_) | ast::Item::ExternBlock(_) => {} |
96 | 96 | ||
97 | // These don't have inner items. | 97 | // These don't have inner items. |
98 | ast::Item::Module(_) | ast::Item::ExternCrate(_) | ast::Item::UseItem(_) => {} | 98 | ast::Item::Module(_) | ast::Item::ExternCrate(_) | ast::Item::Use(_) => {} |
99 | }; | 99 | }; |
100 | 100 | ||
101 | let attrs = Attrs::new(item, &self.hygiene); | 101 | let attrs = Attrs::new(item, &self.hygiene); |
@@ -110,7 +110,7 @@ impl Ctx { | |||
110 | ast::Item::Module(ast) => self.lower_module(ast).map(Into::into), | 110 | ast::Item::Module(ast) => self.lower_module(ast).map(Into::into), |
111 | ast::Item::TraitDef(ast) => self.lower_trait(ast).map(Into::into), | 111 | ast::Item::TraitDef(ast) => self.lower_trait(ast).map(Into::into), |
112 | ast::Item::ImplDef(ast) => self.lower_impl(ast).map(Into::into), | 112 | ast::Item::ImplDef(ast) => self.lower_impl(ast).map(Into::into), |
113 | ast::Item::UseItem(ast) => Some(ModItems( | 113 | ast::Item::Use(ast) => Some(ModItems( |
114 | self.lower_use(ast).into_iter().map(Into::into).collect::<SmallVec<_>>(), | 114 | self.lower_use(ast).into_iter().map(Into::into).collect::<SmallVec<_>>(), |
115 | )), | 115 | )), |
116 | ast::Item::ExternCrate(ast) => self.lower_extern_crate(ast).map(Into::into), | 116 | ast::Item::ExternCrate(ast) => self.lower_extern_crate(ast).map(Into::into), |
@@ -469,7 +469,7 @@ impl Ctx { | |||
469 | Some(id(self.data().impls.alloc(res))) | 469 | Some(id(self.data().impls.alloc(res))) |
470 | } | 470 | } |
471 | 471 | ||
472 | fn lower_use(&mut self, use_item: &ast::UseItem) -> Vec<FileItemTreeId<Import>> { | 472 | fn lower_use(&mut self, use_item: &ast::Use) -> Vec<FileItemTreeId<Import>> { |
473 | // FIXME: cfg_attr | 473 | // FIXME: cfg_attr |
474 | let is_prelude = use_item.has_atom_attr("prelude_import"); | 474 | let is_prelude = use_item.has_atom_attr("prelude_import"); |
475 | let visibility = self.lower_visibility(use_item); | 475 | let visibility = self.lower_visibility(use_item); |
diff --git a/crates/ra_hir_def/src/item_tree/tests.rs b/crates/ra_hir_def/src/item_tree/tests.rs index 68be1cb40..3f2e29d9e 100644 --- a/crates/ra_hir_def/src/item_tree/tests.rs +++ b/crates/ra_hir_def/src/item_tree/tests.rs | |||
@@ -228,9 +228,9 @@ fn smoke() { | |||
228 | 228 | ||
229 | top-level items: | 229 | top-level items: |
230 | #[Attrs { entries: Some([Attr { path: ModPath { kind: Plain, segments: [Name(Text("attr_on_use"))] }, input: None }]) }] | 230 | #[Attrs { entries: Some([Attr { path: ModPath { kind: Plain, segments: [Name(Text("attr_on_use"))] }, input: None }]) }] |
231 | Import { path: ModPath { kind: Plain, segments: [Name(Text("a"))] }, alias: None, visibility: RawVisibilityId("pub(self)"), is_glob: false, is_prelude: false, ast_id: FileAstId::<ra_syntax::ast::generated::nodes::UseItem>(0) } | 231 | Import { path: ModPath { kind: Plain, segments: [Name(Text("a"))] }, alias: None, visibility: RawVisibilityId("pub(self)"), is_glob: false, is_prelude: false, ast_id: FileAstId::<ra_syntax::ast::generated::nodes::Use>(0) } |
232 | #[Attrs { entries: Some([Attr { path: ModPath { kind: Plain, segments: [Name(Text("attr_on_use"))] }, input: None }]) }] | 232 | #[Attrs { entries: Some([Attr { path: ModPath { kind: Plain, segments: [Name(Text("attr_on_use"))] }, input: None }]) }] |
233 | Import { path: ModPath { kind: Plain, segments: [Name(Text("b"))] }, alias: None, visibility: RawVisibilityId("pub(self)"), is_glob: true, is_prelude: false, ast_id: FileAstId::<ra_syntax::ast::generated::nodes::UseItem>(0) } | 233 | Import { path: ModPath { kind: Plain, segments: [Name(Text("b"))] }, alias: None, visibility: RawVisibilityId("pub(self)"), is_glob: true, is_prelude: false, ast_id: FileAstId::<ra_syntax::ast::generated::nodes::Use>(0) } |
234 | #[Attrs { entries: Some([Attr { path: ModPath { kind: Plain, segments: [Name(Text("ext_crate"))] }, input: None }]) }] | 234 | #[Attrs { entries: Some([Attr { path: ModPath { kind: Plain, segments: [Name(Text("ext_crate"))] }, input: None }]) }] |
235 | ExternCrate { path: ModPath { kind: Plain, segments: [Name(Text("krate"))] }, alias: None, visibility: RawVisibilityId("pub(self)"), is_macro_use: false, ast_id: FileAstId::<ra_syntax::ast::generated::nodes::ExternCrate>(1) } | 235 | ExternCrate { path: ModPath { kind: Plain, segments: [Name(Text("krate"))] }, alias: None, visibility: RawVisibilityId("pub(self)"), is_macro_use: false, ast_id: FileAstId::<ra_syntax::ast::generated::nodes::ExternCrate>(1) } |
236 | #[Attrs { entries: Some([Attr { path: ModPath { kind: Plain, segments: [Name(Text("on_trait"))] }, input: None }]) }] | 236 | #[Attrs { entries: Some([Attr { path: ModPath { kind: Plain, segments: [Name(Text("on_trait"))] }, input: None }]) }] |
diff --git a/crates/ra_hir_def/src/path.rs b/crates/ra_hir_def/src/path.rs index 190d6d98d..68b9f89c3 100644 --- a/crates/ra_hir_def/src/path.rs +++ b/crates/ra_hir_def/src/path.rs | |||
@@ -67,7 +67,7 @@ impl ModPath { | |||
67 | 67 | ||
68 | /// Calls `cb` with all paths, represented by this use item. | 68 | /// Calls `cb` with all paths, represented by this use item. |
69 | pub(crate) fn expand_use_item( | 69 | pub(crate) fn expand_use_item( |
70 | item_src: InFile<ast::UseItem>, | 70 | item_src: InFile<ast::Use>, |
71 | hygiene: &Hygiene, | 71 | hygiene: &Hygiene, |
72 | mut cb: impl FnMut(ModPath, &ast::UseTree, /* is_glob */ bool, Option<ImportAlias>), | 72 | mut cb: impl FnMut(ModPath, &ast::UseTree, /* is_glob */ bool, Option<ImportAlias>), |
73 | ) { | 73 | ) { |
diff --git a/crates/ra_ide/src/completion/completion_context.rs b/crates/ra_ide/src/completion/completion_context.rs index c84d43d77..cc55f6dd6 100644 --- a/crates/ra_ide/src/completion/completion_context.rs +++ b/crates/ra_ide/src/completion/completion_context.rs | |||
@@ -36,7 +36,7 @@ pub(crate) struct CompletionContext<'a> { | |||
36 | pub(super) expected_type: Option<Type>, | 36 | pub(super) expected_type: Option<Type>, |
37 | pub(super) name_ref_syntax: Option<ast::NameRef>, | 37 | pub(super) name_ref_syntax: Option<ast::NameRef>, |
38 | pub(super) function_syntax: Option<ast::FnDef>, | 38 | pub(super) function_syntax: Option<ast::FnDef>, |
39 | pub(super) use_item_syntax: Option<ast::UseItem>, | 39 | pub(super) use_item_syntax: Option<ast::Use>, |
40 | pub(super) record_lit_syntax: Option<ast::RecordLit>, | 40 | pub(super) record_lit_syntax: Option<ast::RecordLit>, |
41 | pub(super) record_pat_syntax: Option<ast::RecordPat>, | 41 | pub(super) record_pat_syntax: Option<ast::RecordPat>, |
42 | pub(super) record_field_syntax: Option<ast::RecordField>, | 42 | pub(super) record_field_syntax: Option<ast::RecordField>, |
@@ -343,7 +343,7 @@ impl<'a> CompletionContext<'a> { | |||
343 | } | 343 | } |
344 | 344 | ||
345 | self.use_item_syntax = | 345 | self.use_item_syntax = |
346 | self.sema.ancestors_with_macros(self.token.parent()).find_map(ast::UseItem::cast); | 346 | self.sema.ancestors_with_macros(self.token.parent()).find_map(ast::Use::cast); |
347 | 347 | ||
348 | self.function_syntax = self | 348 | self.function_syntax = self |
349 | .sema | 349 | .sema |
diff --git a/crates/ra_ide/src/folding_ranges.rs b/crates/ra_ide/src/folding_ranges.rs index 315808890..bad079146 100644 --- a/crates/ra_ide/src/folding_ranges.rs +++ b/crates/ra_ide/src/folding_ranges.rs | |||
@@ -58,7 +58,7 @@ pub(crate) fn folding_ranges(file: &SourceFile) -> Vec<Fold> { | |||
58 | } | 58 | } |
59 | NodeOrToken::Node(node) => { | 59 | NodeOrToken::Node(node) => { |
60 | // Fold groups of imports | 60 | // Fold groups of imports |
61 | if node.kind() == USE_ITEM && !visited_imports.contains(&node) { | 61 | if node.kind() == USE && !visited_imports.contains(&node) { |
62 | if let Some(range) = contiguous_range_for_group(&node, &mut visited_imports) { | 62 | if let Some(range) = contiguous_range_for_group(&node, &mut visited_imports) { |
63 | res.push(Fold { range, kind: FoldKind::Imports }) | 63 | res.push(Fold { range, kind: FoldKind::Imports }) |
64 | } | 64 | } |
@@ -83,7 +83,7 @@ pub(crate) fn folding_ranges(file: &SourceFile) -> Vec<Fold> { | |||
83 | fn fold_kind(kind: SyntaxKind) -> Option<FoldKind> { | 83 | fn fold_kind(kind: SyntaxKind) -> Option<FoldKind> { |
84 | match kind { | 84 | match kind { |
85 | COMMENT => Some(FoldKind::Comment), | 85 | COMMENT => Some(FoldKind::Comment), |
86 | USE_ITEM => Some(FoldKind::Imports), | 86 | USE => Some(FoldKind::Imports), |
87 | ARG_LIST | PARAM_LIST => Some(FoldKind::ArgList), | 87 | ARG_LIST | PARAM_LIST => Some(FoldKind::ArgList), |
88 | RECORD_FIELD_DEF_LIST | 88 | RECORD_FIELD_DEF_LIST |
89 | | RECORD_FIELD_PAT_LIST | 89 | | RECORD_FIELD_PAT_LIST |
diff --git a/crates/ra_parser/src/grammar/items/use_item.rs b/crates/ra_parser/src/grammar/items/use_item.rs index 3a0c7a31a..8e836a77e 100644 --- a/crates/ra_parser/src/grammar/items/use_item.rs +++ b/crates/ra_parser/src/grammar/items/use_item.rs | |||
@@ -7,7 +7,7 @@ pub(super) fn use_item(p: &mut Parser, m: Marker) { | |||
7 | p.bump(T![use]); | 7 | p.bump(T![use]); |
8 | use_tree(p, true); | 8 | use_tree(p, true); |
9 | p.expect(T![;]); | 9 | p.expect(T![;]); |
10 | m.complete(p, USE_ITEM); | 10 | m.complete(p, USE); |
11 | } | 11 | } |
12 | 12 | ||
13 | /// Parse a use 'tree', such as `some::path` in `use some::path;` | 13 | /// Parse a use 'tree', such as `some::path` in `use some::path;` |
diff --git a/crates/ra_parser/src/syntax_kind/generated.rs b/crates/ra_parser/src/syntax_kind/generated.rs index 116b58858..4f35e0baa 100644 --- a/crates/ra_parser/src/syntax_kind/generated.rs +++ b/crates/ra_parser/src/syntax_kind/generated.rs | |||
@@ -130,7 +130,7 @@ pub enum SyntaxKind { | |||
130 | RET_TYPE, | 130 | RET_TYPE, |
131 | EXTERN_CRATE, | 131 | EXTERN_CRATE, |
132 | MODULE, | 132 | MODULE, |
133 | USE_ITEM, | 133 | USE, |
134 | STATIC_DEF, | 134 | STATIC_DEF, |
135 | CONST_DEF, | 135 | CONST_DEF, |
136 | TRAIT_DEF, | 136 | TRAIT_DEF, |
diff --git a/crates/ra_ssr/src/search.rs b/crates/ra_ssr/src/search.rs index 0f512cb62..213dc494f 100644 --- a/crates/ra_ssr/src/search.rs +++ b/crates/ra_ssr/src/search.rs | |||
@@ -237,7 +237,7 @@ fn is_search_permitted(node: &SyntaxNode) -> bool { | |||
237 | // and the code is `use foo::{baz, bar}`, we'll match `bar`, since it resolves to `foo::bar`. | 237 | // and the code is `use foo::{baz, bar}`, we'll match `bar`, since it resolves to `foo::bar`. |
238 | // However we'll then replace just the part we matched `bar`. We probably need to instead remove | 238 | // However we'll then replace just the part we matched `bar`. We probably need to instead remove |
239 | // `bar` and insert a new use declaration. | 239 | // `bar` and insert a new use declaration. |
240 | node.kind() != SyntaxKind::USE_ITEM | 240 | node.kind() != SyntaxKind::USE |
241 | } | 241 | } |
242 | 242 | ||
243 | impl UsageCache { | 243 | impl UsageCache { |
diff --git a/crates/ra_syntax/src/ast/edit.rs b/crates/ra_syntax/src/ast/edit.rs index 2e958fa23..6ebe10ff6 100644 --- a/crates/ra_syntax/src/ast/edit.rs +++ b/crates/ra_syntax/src/ast/edit.rs | |||
@@ -262,9 +262,9 @@ impl ast::PathSegment { | |||
262 | } | 262 | } |
263 | } | 263 | } |
264 | 264 | ||
265 | impl ast::UseItem { | 265 | impl ast::Use { |
266 | #[must_use] | 266 | #[must_use] |
267 | pub fn with_use_tree(&self, use_tree: ast::UseTree) -> ast::UseItem { | 267 | pub fn with_use_tree(&self, use_tree: ast::UseTree) -> ast::Use { |
268 | if let Some(old) = self.use_tree() { | 268 | if let Some(old) = self.use_tree() { |
269 | return self.replace_descendant(old, use_tree); | 269 | return self.replace_descendant(old, use_tree); |
270 | } | 270 | } |
diff --git a/crates/ra_syntax/src/ast/generated/nodes.rs b/crates/ra_syntax/src/ast/generated/nodes.rs index 3fd761367..be657699f 100644 --- a/crates/ra_syntax/src/ast/generated/nodes.rs +++ b/crates/ra_syntax/src/ast/generated/nodes.rs | |||
@@ -213,12 +213,12 @@ impl UnionDef { | |||
213 | } | 213 | } |
214 | } | 214 | } |
215 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | 215 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] |
216 | pub struct UseItem { | 216 | pub struct Use { |
217 | pub(crate) syntax: SyntaxNode, | 217 | pub(crate) syntax: SyntaxNode, |
218 | } | 218 | } |
219 | impl ast::AttrsOwner for UseItem {} | 219 | impl ast::AttrsOwner for Use {} |
220 | impl ast::VisibilityOwner for UseItem {} | 220 | impl ast::VisibilityOwner for Use {} |
221 | impl UseItem { | 221 | impl Use { |
222 | pub fn use_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![use]) } | 222 | pub fn use_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![use]) } |
223 | pub fn use_tree(&self) -> Option<UseTree> { support::child(&self.syntax) } | 223 | pub fn use_tree(&self) -> Option<UseTree> { support::child(&self.syntax) } |
224 | pub fn semicolon_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![;]) } | 224 | pub fn semicolon_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![;]) } |
@@ -268,6 +268,36 @@ pub struct Rename { | |||
268 | impl ast::NameOwner for Rename {} | 268 | impl ast::NameOwner for Rename {} |
269 | impl Rename { | 269 | impl Rename { |
270 | pub fn as_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![as]) } | 270 | pub fn as_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![as]) } |
271 | pub fn underscore_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![_]) } | ||
272 | } | ||
273 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
274 | pub struct UseTree { | ||
275 | pub(crate) syntax: SyntaxNode, | ||
276 | } | ||
277 | impl UseTree { | ||
278 | pub fn path(&self) -> Option<Path> { support::child(&self.syntax) } | ||
279 | pub fn coloncolon_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![::]) } | ||
280 | pub fn star_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![*]) } | ||
281 | pub fn use_tree_list(&self) -> Option<UseTreeList> { support::child(&self.syntax) } | ||
282 | pub fn rename(&self) -> Option<Rename> { support::child(&self.syntax) } | ||
283 | } | ||
284 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
285 | pub struct Path { | ||
286 | pub(crate) syntax: SyntaxNode, | ||
287 | } | ||
288 | impl Path { | ||
289 | pub fn qualifier(&self) -> Option<Path> { support::child(&self.syntax) } | ||
290 | pub fn coloncolon_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![::]) } | ||
291 | pub fn segment(&self) -> Option<PathSegment> { support::child(&self.syntax) } | ||
292 | } | ||
293 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
294 | pub struct UseTreeList { | ||
295 | pub(crate) syntax: SyntaxNode, | ||
296 | } | ||
297 | impl UseTreeList { | ||
298 | pub fn l_curly_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['{']) } | ||
299 | pub fn use_trees(&self) -> AstChildren<UseTree> { support::children(&self.syntax) } | ||
300 | pub fn r_curly_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['}']) } | ||
271 | } | 301 | } |
272 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | 302 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] |
273 | pub struct Abi { | 303 | pub struct Abi { |
@@ -433,15 +463,6 @@ impl PathType { | |||
433 | pub fn path(&self) -> Option<Path> { support::child(&self.syntax) } | 463 | pub fn path(&self) -> Option<Path> { support::child(&self.syntax) } |
434 | } | 464 | } |
435 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | 465 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] |
436 | pub struct Path { | ||
437 | pub(crate) syntax: SyntaxNode, | ||
438 | } | ||
439 | impl Path { | ||
440 | pub fn qualifier(&self) -> Option<Path> { support::child(&self.syntax) } | ||
441 | pub fn coloncolon_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![::]) } | ||
442 | pub fn segment(&self) -> Option<PathSegment> { support::child(&self.syntax) } | ||
443 | } | ||
444 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
445 | pub struct PointerType { | 466 | pub struct PointerType { |
446 | pub(crate) syntax: SyntaxNode, | 467 | pub(crate) syntax: SyntaxNode, |
447 | } | 468 | } |
@@ -1178,26 +1199,6 @@ impl Param { | |||
1178 | pub fn dotdotdot_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![...]) } | 1199 | pub fn dotdotdot_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![...]) } |
1179 | } | 1200 | } |
1180 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | 1201 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] |
1181 | pub struct UseTree { | ||
1182 | pub(crate) syntax: SyntaxNode, | ||
1183 | } | ||
1184 | impl UseTree { | ||
1185 | pub fn path(&self) -> Option<Path> { support::child(&self.syntax) } | ||
1186 | pub fn coloncolon_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![::]) } | ||
1187 | pub fn star_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![*]) } | ||
1188 | pub fn use_tree_list(&self) -> Option<UseTreeList> { support::child(&self.syntax) } | ||
1189 | pub fn rename(&self) -> Option<Rename> { support::child(&self.syntax) } | ||
1190 | } | ||
1191 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1192 | pub struct UseTreeList { | ||
1193 | pub(crate) syntax: SyntaxNode, | ||
1194 | } | ||
1195 | impl UseTreeList { | ||
1196 | pub fn l_curly_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['{']) } | ||
1197 | pub fn use_trees(&self) -> AstChildren<UseTree> { support::children(&self.syntax) } | ||
1198 | pub fn r_curly_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['}']) } | ||
1199 | } | ||
1200 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1201 | pub struct PathSegment { | 1202 | pub struct PathSegment { |
1202 | pub(crate) syntax: SyntaxNode, | 1203 | pub(crate) syntax: SyntaxNode, |
1203 | } | 1204 | } |
@@ -1282,7 +1283,7 @@ pub enum Item { | |||
1282 | TraitDef(TraitDef), | 1283 | TraitDef(TraitDef), |
1283 | TypeAliasDef(TypeAliasDef), | 1284 | TypeAliasDef(TypeAliasDef), |
1284 | UnionDef(UnionDef), | 1285 | UnionDef(UnionDef), |
1285 | UseItem(UseItem), | 1286 | Use(Use), |
1286 | } | 1287 | } |
1287 | impl ast::AttrsOwner for Item {} | 1288 | impl ast::AttrsOwner for Item {} |
1288 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | 1289 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] |
@@ -1561,8 +1562,8 @@ impl AstNode for UnionDef { | |||
1561 | } | 1562 | } |
1562 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 1563 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1563 | } | 1564 | } |
1564 | impl AstNode for UseItem { | 1565 | impl AstNode for Use { |
1565 | fn can_cast(kind: SyntaxKind) -> bool { kind == USE_ITEM } | 1566 | fn can_cast(kind: SyntaxKind) -> bool { kind == USE } |
1566 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 1567 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
1567 | if Self::can_cast(syntax.kind()) { | 1568 | if Self::can_cast(syntax.kind()) { |
1568 | Some(Self { syntax }) | 1569 | Some(Self { syntax }) |
@@ -1627,6 +1628,39 @@ impl AstNode for Rename { | |||
1627 | } | 1628 | } |
1628 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 1629 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1629 | } | 1630 | } |
1631 | impl AstNode for UseTree { | ||
1632 | fn can_cast(kind: SyntaxKind) -> bool { kind == USE_TREE } | ||
1633 | fn cast(syntax: SyntaxNode) -> Option<Self> { | ||
1634 | if Self::can_cast(syntax.kind()) { | ||
1635 | Some(Self { syntax }) | ||
1636 | } else { | ||
1637 | None | ||
1638 | } | ||
1639 | } | ||
1640 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | ||
1641 | } | ||
1642 | impl AstNode for Path { | ||
1643 | fn can_cast(kind: SyntaxKind) -> bool { kind == PATH } | ||
1644 | fn cast(syntax: SyntaxNode) -> Option<Self> { | ||
1645 | if Self::can_cast(syntax.kind()) { | ||
1646 | Some(Self { syntax }) | ||
1647 | } else { | ||
1648 | None | ||
1649 | } | ||
1650 | } | ||
1651 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | ||
1652 | } | ||
1653 | impl AstNode for UseTreeList { | ||
1654 | fn can_cast(kind: SyntaxKind) -> bool { kind == USE_TREE_LIST } | ||
1655 | fn cast(syntax: SyntaxNode) -> Option<Self> { | ||
1656 | if Self::can_cast(syntax.kind()) { | ||
1657 | Some(Self { syntax }) | ||
1658 | } else { | ||
1659 | None | ||
1660 | } | ||
1661 | } | ||
1662 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | ||
1663 | } | ||
1630 | impl AstNode for Abi { | 1664 | impl AstNode for Abi { |
1631 | fn can_cast(kind: SyntaxKind) -> bool { kind == ABI } | 1665 | fn can_cast(kind: SyntaxKind) -> bool { kind == ABI } |
1632 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 1666 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -1825,17 +1859,6 @@ impl AstNode for PathType { | |||
1825 | } | 1859 | } |
1826 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 1860 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1827 | } | 1861 | } |
1828 | impl AstNode for Path { | ||
1829 | fn can_cast(kind: SyntaxKind) -> bool { kind == PATH } | ||
1830 | fn cast(syntax: SyntaxNode) -> Option<Self> { | ||
1831 | if Self::can_cast(syntax.kind()) { | ||
1832 | Some(Self { syntax }) | ||
1833 | } else { | ||
1834 | None | ||
1835 | } | ||
1836 | } | ||
1837 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | ||
1838 | } | ||
1839 | impl AstNode for PointerType { | 1862 | impl AstNode for PointerType { |
1840 | fn can_cast(kind: SyntaxKind) -> bool { kind == POINTER_TYPE } | 1863 | fn can_cast(kind: SyntaxKind) -> bool { kind == POINTER_TYPE } |
1841 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 1864 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -2672,28 +2695,6 @@ impl AstNode for Param { | |||
2672 | } | 2695 | } |
2673 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2696 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
2674 | } | 2697 | } |
2675 | impl AstNode for UseTree { | ||
2676 | fn can_cast(kind: SyntaxKind) -> bool { kind == USE_TREE } | ||
2677 | fn cast(syntax: SyntaxNode) -> Option<Self> { | ||
2678 | if Self::can_cast(syntax.kind()) { | ||
2679 | Some(Self { syntax }) | ||
2680 | } else { | ||
2681 | None | ||
2682 | } | ||
2683 | } | ||
2684 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | ||
2685 | } | ||
2686 | impl AstNode for UseTreeList { | ||
2687 | fn can_cast(kind: SyntaxKind) -> bool { kind == USE_TREE_LIST } | ||
2688 | fn cast(syntax: SyntaxNode) -> Option<Self> { | ||
2689 | if Self::can_cast(syntax.kind()) { | ||
2690 | Some(Self { syntax }) | ||
2691 | } else { | ||
2692 | None | ||
2693 | } | ||
2694 | } | ||
2695 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | ||
2696 | } | ||
2697 | impl AstNode for PathSegment { | 2698 | impl AstNode for PathSegment { |
2698 | fn can_cast(kind: SyntaxKind) -> bool { kind == PATH_SEGMENT } | 2699 | fn can_cast(kind: SyntaxKind) -> bool { kind == PATH_SEGMENT } |
2699 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2700 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -2810,15 +2811,16 @@ impl From<TypeAliasDef> for Item { | |||
2810 | impl From<UnionDef> for Item { | 2811 | impl From<UnionDef> for Item { |
2811 | fn from(node: UnionDef) -> Item { Item::UnionDef(node) } | 2812 | fn from(node: UnionDef) -> Item { Item::UnionDef(node) } |
2812 | } | 2813 | } |
2813 | impl From<UseItem> for Item { | 2814 | impl From<Use> for Item { |
2814 | fn from(node: UseItem) -> Item { Item::UseItem(node) } | 2815 | fn from(node: Use) -> Item { Item::Use(node) } |
2815 | } | 2816 | } |
2816 | impl AstNode for Item { | 2817 | impl AstNode for Item { |
2817 | fn can_cast(kind: SyntaxKind) -> bool { | 2818 | fn can_cast(kind: SyntaxKind) -> bool { |
2818 | match kind { | 2819 | match kind { |
2819 | CONST_DEF | ENUM_DEF | EXTERN_BLOCK | EXTERN_CRATE | FN_DEF | IMPL_DEF | MACRO_CALL | 2820 | CONST_DEF | ENUM_DEF | EXTERN_BLOCK | EXTERN_CRATE | FN_DEF | IMPL_DEF | MACRO_CALL |
2820 | | MODULE | STATIC_DEF | STRUCT_DEF | TRAIT_DEF | TYPE_ALIAS_DEF | UNION_DEF | 2821 | | MODULE | STATIC_DEF | STRUCT_DEF | TRAIT_DEF | TYPE_ALIAS_DEF | UNION_DEF | USE => { |
2821 | | USE_ITEM => true, | 2822 | true |
2823 | } | ||
2822 | _ => false, | 2824 | _ => false, |
2823 | } | 2825 | } |
2824 | } | 2826 | } |
@@ -2837,7 +2839,7 @@ impl AstNode for Item { | |||
2837 | TRAIT_DEF => Item::TraitDef(TraitDef { syntax }), | 2839 | TRAIT_DEF => Item::TraitDef(TraitDef { syntax }), |
2838 | TYPE_ALIAS_DEF => Item::TypeAliasDef(TypeAliasDef { syntax }), | 2840 | TYPE_ALIAS_DEF => Item::TypeAliasDef(TypeAliasDef { syntax }), |
2839 | UNION_DEF => Item::UnionDef(UnionDef { syntax }), | 2841 | UNION_DEF => Item::UnionDef(UnionDef { syntax }), |
2840 | USE_ITEM => Item::UseItem(UseItem { syntax }), | 2842 | USE => Item::Use(Use { syntax }), |
2841 | _ => return None, | 2843 | _ => return None, |
2842 | }; | 2844 | }; |
2843 | Some(res) | 2845 | Some(res) |
@@ -2857,7 +2859,7 @@ impl AstNode for Item { | |||
2857 | Item::TraitDef(it) => &it.syntax, | 2859 | Item::TraitDef(it) => &it.syntax, |
2858 | Item::TypeAliasDef(it) => &it.syntax, | 2860 | Item::TypeAliasDef(it) => &it.syntax, |
2859 | Item::UnionDef(it) => &it.syntax, | 2861 | Item::UnionDef(it) => &it.syntax, |
2860 | Item::UseItem(it) => &it.syntax, | 2862 | Item::Use(it) => &it.syntax, |
2861 | } | 2863 | } |
2862 | } | 2864 | } |
2863 | } | 2865 | } |
@@ -3530,7 +3532,7 @@ impl std::fmt::Display for UnionDef { | |||
3530 | std::fmt::Display::fmt(self.syntax(), f) | 3532 | std::fmt::Display::fmt(self.syntax(), f) |
3531 | } | 3533 | } |
3532 | } | 3534 | } |
3533 | impl std::fmt::Display for UseItem { | 3535 | impl std::fmt::Display for Use { |
3534 | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { | 3536 | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { |
3535 | std::fmt::Display::fmt(self.syntax(), f) | 3537 | std::fmt::Display::fmt(self.syntax(), f) |
3536 | } | 3538 | } |
@@ -3560,6 +3562,21 @@ impl std::fmt::Display for Rename { | |||
3560 | std::fmt::Display::fmt(self.syntax(), f) | 3562 | std::fmt::Display::fmt(self.syntax(), f) |
3561 | } | 3563 | } |
3562 | } | 3564 | } |
3565 | impl std::fmt::Display for UseTree { | ||
3566 | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { | ||
3567 | std::fmt::Display::fmt(self.syntax(), f) | ||
3568 | } | ||
3569 | } | ||
3570 | impl std::fmt::Display for Path { | ||
3571 | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { | ||
3572 | std::fmt::Display::fmt(self.syntax(), f) | ||
3573 | } | ||
3574 | } | ||
3575 | impl std::fmt::Display for UseTreeList { | ||
3576 | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { | ||
3577 | std::fmt::Display::fmt(self.syntax(), f) | ||
3578 | } | ||
3579 | } | ||
3563 | impl std::fmt::Display for Abi { | 3580 | impl std::fmt::Display for Abi { |
3564 | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { | 3581 | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { |
3565 | std::fmt::Display::fmt(self.syntax(), f) | 3582 | std::fmt::Display::fmt(self.syntax(), f) |
@@ -3650,11 +3667,6 @@ impl std::fmt::Display for PathType { | |||
3650 | std::fmt::Display::fmt(self.syntax(), f) | 3667 | std::fmt::Display::fmt(self.syntax(), f) |
3651 | } | 3668 | } |
3652 | } | 3669 | } |
3653 | impl std::fmt::Display for Path { | ||
3654 | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { | ||
3655 | std::fmt::Display::fmt(self.syntax(), f) | ||
3656 | } | ||
3657 | } | ||
3658 | impl std::fmt::Display for PointerType { | 3670 | impl std::fmt::Display for PointerType { |
3659 | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { | 3671 | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { |
3660 | std::fmt::Display::fmt(self.syntax(), f) | 3672 | std::fmt::Display::fmt(self.syntax(), f) |
@@ -4035,16 +4047,6 @@ impl std::fmt::Display for Param { | |||
4035 | std::fmt::Display::fmt(self.syntax(), f) | 4047 | std::fmt::Display::fmt(self.syntax(), f) |
4036 | } | 4048 | } |
4037 | } | 4049 | } |
4038 | impl std::fmt::Display for UseTree { | ||
4039 | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { | ||
4040 | std::fmt::Display::fmt(self.syntax(), f) | ||
4041 | } | ||
4042 | } | ||
4043 | impl std::fmt::Display for UseTreeList { | ||
4044 | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { | ||
4045 | std::fmt::Display::fmt(self.syntax(), f) | ||
4046 | } | ||
4047 | } | ||
4048 | impl std::fmt::Display for PathSegment { | 4050 | impl std::fmt::Display for PathSegment { |
4049 | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { | 4051 | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { |
4050 | std::fmt::Display::fmt(self.syntax(), f) | 4052 | std::fmt::Display::fmt(self.syntax(), f) |
diff --git a/crates/ra_syntax/src/ast/make.rs b/crates/ra_syntax/src/ast/make.rs index 2b05ed2d4..0ff69bc2d 100644 --- a/crates/ra_syntax/src/ast/make.rs +++ b/crates/ra_syntax/src/ast/make.rs | |||
@@ -60,7 +60,7 @@ pub fn use_tree_list(use_trees: impl IntoIterator<Item = ast::UseTree>) -> ast:: | |||
60 | ast_from_text(&format!("use {{{}}};", use_trees)) | 60 | ast_from_text(&format!("use {{{}}};", use_trees)) |
61 | } | 61 | } |
62 | 62 | ||
63 | pub fn use_item(use_tree: ast::UseTree) -> ast::UseItem { | 63 | pub fn use_item(use_tree: ast::UseTree) -> ast::Use { |
64 | ast_from_text(&format!("use {};", use_tree)) | 64 | ast_from_text(&format!("use {};", use_tree)) |
65 | } | 65 | } |
66 | 66 | ||
diff --git a/crates/ra_syntax/test_data/parser/err/0002_duplicate_shebang.rast b/crates/ra_syntax/test_data/parser/err/0002_duplicate_shebang.rast index 6717995e9..4cfd1bce4 100644 --- a/crates/ra_syntax/test_data/parser/err/0002_duplicate_shebang.rast +++ b/crates/ra_syntax/test_data/parser/err/0002_duplicate_shebang.rast | |||
@@ -6,7 +6,7 @@ [email protected] | |||
6 | [email protected] "!" | 6 | [email protected] "!" |
7 | [email protected] | 7 | [email protected] |
8 | [email protected] "/" | 8 | [email protected] "/" |
9 | USE_ITEM@24..28 | 9 | [email protected] |
10 | [email protected] "use" | 10 | [email protected] "use" |
11 | [email protected] | 11 | [email protected] |
12 | [email protected] "/" | 12 | [email protected] "/" |
diff --git a/crates/ra_syntax/test_data/parser/err/0004_use_path_bad_segment.rast b/crates/ra_syntax/test_data/parser/err/0004_use_path_bad_segment.rast index b3bcf472a..9a0f4665e 100644 --- a/crates/ra_syntax/test_data/parser/err/0004_use_path_bad_segment.rast +++ b/crates/ra_syntax/test_data/parser/err/0004_use_path_bad_segment.rast | |||
@@ -1,5 +1,5 @@ | |||
1 | [email protected] | 1 | [email protected] |
2 | USE_ITEM@0..12 | 2 | [email protected] |
3 | [email protected] "use" | 3 | [email protected] "use" |
4 | [email protected] " " | 4 | [email protected] " " |
5 | [email protected] | 5 | [email protected] |
diff --git a/crates/ra_syntax/test_data/parser/err/0035_use_recover.rast b/crates/ra_syntax/test_data/parser/err/0035_use_recover.rast index 9588cf3b3..0415085b0 100644 --- a/crates/ra_syntax/test_data/parser/err/0035_use_recover.rast +++ b/crates/ra_syntax/test_data/parser/err/0035_use_recover.rast | |||
@@ -1,5 +1,5 @@ | |||
1 | [email protected] | 1 | [email protected] |
2 | USE_ITEM@0..13 | 2 | [email protected] |
3 | [email protected] "use" | 3 | [email protected] "use" |
4 | [email protected] " " | 4 | [email protected] " " |
5 | [email protected] | 5 | [email protected] |
@@ -14,10 +14,10 @@ [email protected] | |||
14 | [email protected] "bar" | 14 | [email protected] "bar" |
15 | [email protected] ";" | 15 | [email protected] ";" |
16 | [email protected] "\n" | 16 | [email protected] "\n" |
17 | USE_ITEM@14..17 | 17 | [email protected] |
18 | [email protected] "use" | 18 | [email protected] "use" |
19 | [email protected] "\n" | 19 | [email protected] "\n" |
20 | USE_ITEM@18..33 | 20 | [email protected] |
21 | [email protected] "use" | 21 | [email protected] "use" |
22 | [email protected] " " | 22 | [email protected] " " |
23 | [email protected] | 23 | [email protected] |
@@ -31,7 +31,7 @@ [email protected] | |||
31 | [email protected] "baz" | 31 | [email protected] "baz" |
32 | [email protected] ";" | 32 | [email protected] ";" |
33 | [email protected] "\n" | 33 | [email protected] "\n" |
34 | USE_ITEM@34..37 | 34 | [email protected] |
35 | [email protected] "use" | 35 | [email protected] "use" |
36 | [email protected] "\n" | 36 | [email protected] "\n" |
37 | [email protected] | 37 | [email protected] |
diff --git a/crates/ra_syntax/test_data/parser/err/0036_partial_use.rast b/crates/ra_syntax/test_data/parser/err/0036_partial_use.rast index f926b67d2..ef6172f8a 100644 --- a/crates/ra_syntax/test_data/parser/err/0036_partial_use.rast +++ b/crates/ra_syntax/test_data/parser/err/0036_partial_use.rast | |||
@@ -1,5 +1,5 @@ | |||
1 | [email protected] | 1 | [email protected] |
2 | USE_ITEM@0..36 | 2 | [email protected] |
3 | [email protected] "use" | 3 | [email protected] "use" |
4 | [email protected] " " | 4 | [email protected] " " |
5 | [email protected] | 5 | [email protected] |
diff --git a/crates/ra_syntax/test_data/parser/err/0040_illegal_crate_kw_location.rast b/crates/ra_syntax/test_data/parser/err/0040_illegal_crate_kw_location.rast index d2a549273..284c8715b 100644 --- a/crates/ra_syntax/test_data/parser/err/0040_illegal_crate_kw_location.rast +++ b/crates/ra_syntax/test_data/parser/err/0040_illegal_crate_kw_location.rast | |||
@@ -1,5 +1,5 @@ | |||
1 | [email protected] | 1 | [email protected] |
2 | USE_ITEM@0..12 | 2 | [email protected] |
3 | [email protected] "use" | 3 | [email protected] "use" |
4 | [email protected] " " | 4 | [email protected] " " |
5 | [email protected] | 5 | [email protected] |
@@ -9,7 +9,7 @@ [email protected] | |||
9 | [email protected] "crate" | 9 | [email protected] "crate" |
10 | [email protected] ";" | 10 | [email protected] ";" |
11 | [email protected] "\n" | 11 | [email protected] "\n" |
12 | USE_ITEM@13..54 | 12 | [email protected] |
13 | [email protected] "use" | 13 | [email protected] "use" |
14 | [email protected] " " | 14 | [email protected] " " |
15 | [email protected] | 15 | [email protected] |
@@ -52,7 +52,7 @@ [email protected] | |||
52 | [email protected] "}" | 52 | [email protected] "}" |
53 | [email protected] ";" | 53 | [email protected] ";" |
54 | [email protected] "\n" | 54 | [email protected] "\n" |
55 | USE_ITEM@55..72 | 55 | [email protected] |
56 | [email protected] "use" | 56 | [email protected] "use" |
57 | [email protected] " " | 57 | [email protected] " " |
58 | [email protected] | 58 | [email protected] |
@@ -66,7 +66,7 @@ [email protected] | |||
66 | [email protected] "crate" | 66 | [email protected] "crate" |
67 | [email protected] ";" | 67 | [email protected] ";" |
68 | [email protected] "\n" | 68 | [email protected] "\n" |
69 | USE_ITEM@73..97 | 69 | [email protected] |
70 | [email protected] "use" | 70 | [email protected] "use" |
71 | [email protected] " " | 71 | [email protected] " " |
72 | [email protected] | 72 | [email protected] |
diff --git a/crates/ra_syntax/test_data/parser/err/0041_illegal_super_keyword_location.rast b/crates/ra_syntax/test_data/parser/err/0041_illegal_super_keyword_location.rast index d0360c467..2049a9d72 100644 --- a/crates/ra_syntax/test_data/parser/err/0041_illegal_super_keyword_location.rast +++ b/crates/ra_syntax/test_data/parser/err/0041_illegal_super_keyword_location.rast | |||
@@ -1,5 +1,5 @@ | |||
1 | [email protected] | 1 | [email protected] |
2 | USE_ITEM@0..12 | 2 | [email protected] |
3 | [email protected] "use" | 3 | [email protected] "use" |
4 | [email protected] " " | 4 | [email protected] " " |
5 | [email protected] | 5 | [email protected] |
@@ -9,7 +9,7 @@ [email protected] | |||
9 | [email protected] "super" | 9 | [email protected] "super" |
10 | [email protected] ";" | 10 | [email protected] ";" |
11 | [email protected] "\n" | 11 | [email protected] "\n" |
12 | USE_ITEM@13..26 | 12 | [email protected] |
13 | [email protected] "use" | 13 | [email protected] "use" |
14 | [email protected] " " | 14 | [email protected] " " |
15 | [email protected] | 15 | [email protected] |
@@ -23,7 +23,7 @@ [email protected] | |||
23 | [email protected] "super" | 23 | [email protected] "super" |
24 | [email protected] ";" | 24 | [email protected] ";" |
25 | [email protected] "\n" | 25 | [email protected] "\n" |
26 | USE_ITEM@27..47 | 26 | [email protected] |
27 | [email protected] "use" | 27 | [email protected] "use" |
28 | [email protected] " " | 28 | [email protected] " " |
29 | [email protected] | 29 | [email protected] |
@@ -41,7 +41,7 @@ [email protected] | |||
41 | [email protected] "super" | 41 | [email protected] "super" |
42 | [email protected] ";" | 42 | [email protected] ";" |
43 | [email protected] "\n" | 43 | [email protected] "\n" |
44 | USE_ITEM@48..66 | 44 | [email protected] |
45 | [email protected] "use" | 45 | [email protected] "use" |
46 | [email protected] " " | 46 | [email protected] " " |
47 | [email protected] | 47 | [email protected] |
diff --git a/crates/ra_syntax/test_data/parser/err/0042_illegal_self_keyword_location.rast b/crates/ra_syntax/test_data/parser/err/0042_illegal_self_keyword_location.rast index 4f382b06c..deadf56b4 100644 --- a/crates/ra_syntax/test_data/parser/err/0042_illegal_self_keyword_location.rast +++ b/crates/ra_syntax/test_data/parser/err/0042_illegal_self_keyword_location.rast | |||
@@ -1,5 +1,5 @@ | |||
1 | [email protected] | 1 | [email protected] |
2 | USE_ITEM@0..11 | 2 | [email protected] |
3 | [email protected] "use" | 3 | [email protected] "use" |
4 | [email protected] " " | 4 | [email protected] " " |
5 | [email protected] | 5 | [email protected] |
@@ -9,7 +9,7 @@ [email protected] | |||
9 | [email protected] "self" | 9 | [email protected] "self" |
10 | [email protected] ";" | 10 | [email protected] ";" |
11 | [email protected] "\n" | 11 | [email protected] "\n" |
12 | USE_ITEM@12..24 | 12 | [email protected] |
13 | [email protected] "use" | 13 | [email protected] "use" |
14 | [email protected] " " | 14 | [email protected] " " |
15 | [email protected] | 15 | [email protected] |
diff --git a/crates/ra_syntax/test_data/parser/inline/err/0015_empty_segment.rast b/crates/ra_syntax/test_data/parser/inline/err/0015_empty_segment.rast index da8505607..2f59d0606 100644 --- a/crates/ra_syntax/test_data/parser/inline/err/0015_empty_segment.rast +++ b/crates/ra_syntax/test_data/parser/inline/err/0015_empty_segment.rast | |||
@@ -1,5 +1,5 @@ | |||
1 | [email protected] | 1 | [email protected] |
2 | USE_ITEM@0..12 | 2 | [email protected] |
3 | [email protected] "use" | 3 | [email protected] "use" |
4 | [email protected] " " | 4 | [email protected] " " |
5 | [email protected] | 5 | [email protected] |
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0002_use_tree_list.rast b/crates/ra_syntax/test_data/parser/inline/ok/0002_use_tree_list.rast index cf3a90400..1e80dd7e2 100644 --- a/crates/ra_syntax/test_data/parser/inline/ok/0002_use_tree_list.rast +++ b/crates/ra_syntax/test_data/parser/inline/ok/0002_use_tree_list.rast | |||
@@ -1,5 +1,5 @@ | |||
1 | [email protected] | 1 | [email protected] |
2 | USE_ITEM@0..58 | 2 | [email protected] |
3 | [email protected] "use" | 3 | [email protected] "use" |
4 | [email protected] " " | 4 | [email protected] " " |
5 | [email protected] | 5 | [email protected] |
@@ -51,7 +51,7 @@ [email protected] | |||
51 | [email protected] " " | 51 | [email protected] " " |
52 | [email protected] "// Rust 2018 (with a ..." | 52 | [email protected] "// Rust 2018 (with a ..." |
53 | [email protected] "\n" | 53 | [email protected] "\n" |
54 | USE_ITEM@98..121 | 54 | [email protected] |
55 | [email protected] "use" | 55 | [email protected] "use" |
56 | [email protected] " " | 56 | [email protected] " " |
57 | [email protected] | 57 | [email protected] |
@@ -77,7 +77,7 @@ [email protected] | |||
77 | [email protected] " " | 77 | [email protected] " " |
78 | [email protected] "// Rust 2015" | 78 | [email protected] "// Rust 2015" |
79 | [email protected] "\n" | 79 | [email protected] "\n" |
80 | USE_ITEM@135..166 | 80 | [email protected] |
81 | [email protected] "use" | 81 | [email protected] "use" |
82 | [email protected] " " | 82 | [email protected] " " |
83 | [email protected] | 83 | [email protected] |
@@ -104,7 +104,7 @@ [email protected] | |||
104 | [email protected] " " | 104 | [email protected] " " |
105 | [email protected] "// Rust 2015" | 105 | [email protected] "// Rust 2015" |
106 | [email protected] "\n" | 106 | [email protected] "\n" |
107 | USE_ITEM@180..205 | 107 | [email protected] |
108 | [email protected] "use" | 108 | [email protected] "use" |
109 | [email protected] " " | 109 | [email protected] " " |
110 | [email protected] | 110 | [email protected] |
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0020_use_star.rast b/crates/ra_syntax/test_data/parser/inline/ok/0020_use_star.rast index 9e898b7b9..b3623c445 100644 --- a/crates/ra_syntax/test_data/parser/inline/ok/0020_use_star.rast +++ b/crates/ra_syntax/test_data/parser/inline/ok/0020_use_star.rast | |||
@@ -1,12 +1,12 @@ | |||
1 | [email protected] | 1 | [email protected] |
2 | USE_ITEM@0..6 | 2 | [email protected] |
3 | [email protected] "use" | 3 | [email protected] "use" |
4 | [email protected] " " | 4 | [email protected] " " |
5 | [email protected] | 5 | [email protected] |
6 | [email protected] "*" | 6 | [email protected] "*" |
7 | [email protected] ";" | 7 | [email protected] ";" |
8 | [email protected] "\n" | 8 | [email protected] "\n" |
9 | USE_ITEM@7..15 | 9 | [email protected] |
10 | [email protected] "use" | 10 | [email protected] "use" |
11 | [email protected] " " | 11 | [email protected] " " |
12 | [email protected] | 12 | [email protected] |
@@ -14,7 +14,7 @@ [email protected] | |||
14 | [email protected] "*" | 14 | [email protected] "*" |
15 | [email protected] ";" | 15 | [email protected] ";" |
16 | [email protected] "\n" | 16 | [email protected] "\n" |
17 | USE_ITEM@16..36 | 17 | [email protected] |
18 | [email protected] "use" | 18 | [email protected] "use" |
19 | [email protected] " " | 19 | [email protected] " " |
20 | [email protected] | 20 | [email protected] |
@@ -35,7 +35,7 @@ [email protected] | |||
35 | [email protected] "}" | 35 | [email protected] "}" |
36 | [email protected] ";" | 36 | [email protected] ";" |
37 | [email protected] "\n" | 37 | [email protected] "\n" |
38 | USE_ITEM@37..59 | 38 | [email protected] |
39 | [email protected] "use" | 39 | [email protected] "use" |
40 | [email protected] " " | 40 | [email protected] " " |
41 | [email protected] | 41 | [email protected] |
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0043_use_alias.rast b/crates/ra_syntax/test_data/parser/inline/ok/0043_use_alias.rast index 8e9061e1d..60b517230 100644 --- a/crates/ra_syntax/test_data/parser/inline/ok/0043_use_alias.rast +++ b/crates/ra_syntax/test_data/parser/inline/ok/0043_use_alias.rast | |||
@@ -1,5 +1,5 @@ | |||
1 | [email protected] | 1 | [email protected] |
2 | USE_ITEM@0..28 | 2 | [email protected] |
3 | [email protected] "use" | 3 | [email protected] "use" |
4 | [email protected] " " | 4 | [email protected] " " |
5 | [email protected] | 5 | [email protected] |
@@ -20,7 +20,7 @@ [email protected] | |||
20 | [email protected] "some_name" | 20 | [email protected] "some_name" |
21 | [email protected] ";" | 21 | [email protected] ";" |
22 | [email protected] "\n" | 22 | [email protected] "\n" |
23 | USE_ITEM@29..181 | 23 | [email protected] |
24 | [email protected] "use" | 24 | [email protected] "use" |
25 | [email protected] " " | 25 | [email protected] " " |
26 | [email protected] | 26 | [email protected] |
@@ -121,7 +121,7 @@ [email protected] | |||
121 | [email protected] "}" | 121 | [email protected] "}" |
122 | [email protected] ";" | 122 | [email protected] ";" |
123 | [email protected] "\n" | 123 | [email protected] "\n" |
124 | USE_ITEM@182..197 | 124 | [email protected] |
125 | [email protected] "use" | 125 | [email protected] "use" |
126 | [email protected] " " | 126 | [email protected] " " |
127 | [email protected] | 127 | [email protected] |
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0067_crate_path.rast b/crates/ra_syntax/test_data/parser/inline/ok/0067_crate_path.rast index caa76fe8a..702f2e0b0 100644 --- a/crates/ra_syntax/test_data/parser/inline/ok/0067_crate_path.rast +++ b/crates/ra_syntax/test_data/parser/inline/ok/0067_crate_path.rast | |||
@@ -1,5 +1,5 @@ | |||
1 | [email protected] | 1 | [email protected] |
2 | USE_ITEM@0..15 | 2 | [email protected] |
3 | [email protected] "use" | 3 | [email protected] "use" |
4 | [email protected] " " | 4 | [email protected] " " |
5 | [email protected] | 5 | [email protected] |
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0069_use_tree_list_after_path.rast b/crates/ra_syntax/test_data/parser/inline/ok/0069_use_tree_list_after_path.rast index 18cd5271f..c4c5bc51e 100644 --- a/crates/ra_syntax/test_data/parser/inline/ok/0069_use_tree_list_after_path.rast +++ b/crates/ra_syntax/test_data/parser/inline/ok/0069_use_tree_list_after_path.rast | |||
@@ -1,5 +1,5 @@ | |||
1 | [email protected] | 1 | [email protected] |
2 | USE_ITEM@0..18 | 2 | [email protected] |
3 | [email protected] "use" | 3 | [email protected] "use" |
4 | [email protected] " " | 4 | [email protected] " " |
5 | [email protected] | 5 | [email protected] |
@@ -17,7 +17,7 @@ [email protected] | |||
17 | [email protected] "}" | 17 | [email protected] "}" |
18 | [email protected] ";" | 18 | [email protected] ";" |
19 | [email protected] "\n" | 19 | [email protected] "\n" |
20 | USE_ITEM@19..36 | 20 | [email protected] |
21 | [email protected] "use" | 21 | [email protected] "use" |
22 | [email protected] " " | 22 | [email protected] " " |
23 | [email protected] | 23 | [email protected] |
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0110_use_path.rast b/crates/ra_syntax/test_data/parser/inline/ok/0110_use_path.rast index 015a7a7d2..82028096f 100644 --- a/crates/ra_syntax/test_data/parser/inline/ok/0110_use_path.rast +++ b/crates/ra_syntax/test_data/parser/inline/ok/0110_use_path.rast | |||
@@ -1,5 +1,5 @@ | |||
1 | [email protected] | 1 | [email protected] |
2 | USE_ITEM@0..17 | 2 | [email protected] |
3 | [email protected] "use" | 3 | [email protected] "use" |
4 | [email protected] " " | 4 | [email protected] " " |
5 | [email protected] | 5 | [email protected] |
@@ -12,7 +12,7 @@ [email protected] | |||
12 | [email protected] " " | 12 | [email protected] " " |
13 | [email protected] "// Rust 2018 - All fl ..." | 13 | [email protected] "// Rust 2018 - All fl ..." |
14 | [email protected] "\n" | 14 | [email protected] "\n" |
15 | USE_ITEM@46..61 | 15 | [email protected] |
16 | [email protected] "use" | 16 | [email protected] "use" |
17 | [email protected] " " | 17 | [email protected] " " |
18 | [email protected] | 18 | [email protected] |
@@ -24,7 +24,7 @@ [email protected] | |||
24 | [email protected] " " | 24 | [email protected] " " |
25 | [email protected] "// Rust 2018 - Anchor ..." | 25 | [email protected] "// Rust 2018 - Anchor ..." |
26 | [email protected] "\n" | 26 | [email protected] "\n" |
27 | USE_ITEM@92..124 | 27 | [email protected] |
28 | [email protected] "use" | 28 | [email protected] "use" |
29 | [email protected] " " | 29 | [email protected] " " |
30 | [email protected] | 30 | [email protected] |
diff --git a/crates/ra_syntax/test_data/parser/ok/0009_use_item.rast b/crates/ra_syntax/test_data/parser/ok/0009_use_item.rast index 96b8a94fc..6be1cf9fc 100644 --- a/crates/ra_syntax/test_data/parser/ok/0009_use_item.rast +++ b/crates/ra_syntax/test_data/parser/ok/0009_use_item.rast | |||
@@ -1,5 +1,5 @@ | |||
1 | [email protected] | 1 | [email protected] |
2 | USE_ITEM@0..8 | 2 | [email protected] |
3 | [email protected] "use" | 3 | [email protected] "use" |
4 | [email protected] " " | 4 | [email protected] " " |
5 | [email protected] | 5 | [email protected] |
@@ -9,7 +9,7 @@ [email protected] | |||
9 | [email protected] "foo" | 9 | [email protected] "foo" |
10 | [email protected] ";" | 10 | [email protected] ";" |
11 | [email protected] "\n" | 11 | [email protected] "\n" |
12 | USE_ITEM@9..19 | 12 | [email protected] |
13 | [email protected] "use" | 13 | [email protected] "use" |
14 | [email protected] " " | 14 | [email protected] " " |
15 | [email protected] | 15 | [email protected] |
diff --git a/crates/ra_syntax/test_data/parser/ok/0010_use_path_segments.rast b/crates/ra_syntax/test_data/parser/ok/0010_use_path_segments.rast index 07272dc3c..4d49e7933 100644 --- a/crates/ra_syntax/test_data/parser/ok/0010_use_path_segments.rast +++ b/crates/ra_syntax/test_data/parser/ok/0010_use_path_segments.rast | |||
@@ -1,5 +1,5 @@ | |||
1 | [email protected] | 1 | [email protected] |
2 | USE_ITEM@0..20 | 2 | [email protected] |
3 | [email protected] "use" | 3 | [email protected] "use" |
4 | [email protected] " " | 4 | [email protected] " " |
5 | [email protected] | 5 | [email protected] |
@@ -20,7 +20,7 @@ [email protected] | |||
20 | [email protected] "baz" | 20 | [email protected] "baz" |
21 | [email protected] ";" | 21 | [email protected] ";" |
22 | [email protected] "\n" | 22 | [email protected] "\n" |
23 | USE_ITEM@21..39 | 23 | [email protected] |
24 | [email protected] "use" | 24 | [email protected] "use" |
25 | [email protected] " " | 25 | [email protected] " " |
26 | [email protected] | 26 | [email protected] |
diff --git a/crates/ra_syntax/test_data/parser/ok/0013_use_path_self_super.rast b/crates/ra_syntax/test_data/parser/ok/0013_use_path_self_super.rast index 05d9c05ad..66ab13660 100644 --- a/crates/ra_syntax/test_data/parser/ok/0013_use_path_self_super.rast +++ b/crates/ra_syntax/test_data/parser/ok/0013_use_path_self_super.rast | |||
@@ -1,5 +1,5 @@ | |||
1 | [email protected] | 1 | [email protected] |
2 | USE_ITEM@0..14 | 2 | [email protected] |
3 | [email protected] "use" | 3 | [email protected] "use" |
4 | [email protected] " " | 4 | [email protected] " " |
5 | [email protected] | 5 | [email protected] |
@@ -13,7 +13,7 @@ [email protected] | |||
13 | [email protected] "foo" | 13 | [email protected] "foo" |
14 | [email protected] ";" | 14 | [email protected] ";" |
15 | [email protected] "\n" | 15 | [email protected] "\n" |
16 | USE_ITEM@15..37 | 16 | [email protected] |
17 | [email protected] "use" | 17 | [email protected] "use" |
18 | [email protected] " " | 18 | [email protected] " " |
19 | [email protected] | 19 | [email protected] |
diff --git a/crates/ra_syntax/test_data/parser/ok/0014_use_tree.rast b/crates/ra_syntax/test_data/parser/ok/0014_use_tree.rast index 3642c107b..4389d2d4b 100644 --- a/crates/ra_syntax/test_data/parser/ok/0014_use_tree.rast +++ b/crates/ra_syntax/test_data/parser/ok/0014_use_tree.rast | |||
@@ -1,12 +1,12 @@ | |||
1 | [email protected] | 1 | [email protected] |
2 | USE_ITEM@0..6 | 2 | [email protected] |
3 | [email protected] "use" | 3 | [email protected] "use" |
4 | [email protected] " " | 4 | [email protected] " " |
5 | [email protected] | 5 | [email protected] |
6 | [email protected] "*" | 6 | [email protected] "*" |
7 | [email protected] ";" | 7 | [email protected] ";" |
8 | [email protected] "\n" | 8 | [email protected] "\n" |
9 | USE_ITEM@7..15 | 9 | [email protected] |
10 | [email protected] "use" | 10 | [email protected] "use" |
11 | [email protected] " " | 11 | [email protected] " " |
12 | [email protected] | 12 | [email protected] |
@@ -14,7 +14,7 @@ [email protected] | |||
14 | [email protected] "*" | 14 | [email protected] "*" |
15 | [email protected] ";" | 15 | [email protected] ";" |
16 | [email protected] "\n" | 16 | [email protected] "\n" |
17 | USE_ITEM@16..25 | 17 | [email protected] |
18 | [email protected] "use" | 18 | [email protected] "use" |
19 | [email protected] " " | 19 | [email protected] " " |
20 | [email protected] | 20 | [email protected] |
@@ -24,7 +24,7 @@ [email protected] | |||
24 | [email protected] "}" | 24 | [email protected] "}" |
25 | [email protected] ";" | 25 | [email protected] ";" |
26 | [email protected] "\n" | 26 | [email protected] "\n" |
27 | USE_ITEM@26..33 | 27 | [email protected] |
28 | [email protected] "use" | 28 | [email protected] "use" |
29 | [email protected] " " | 29 | [email protected] " " |
30 | [email protected] | 30 | [email protected] |
@@ -33,7 +33,7 @@ [email protected] | |||
33 | [email protected] "}" | 33 | [email protected] "}" |
34 | [email protected] ";" | 34 | [email protected] ";" |
35 | [email protected] "\n" | 35 | [email protected] "\n" |
36 | USE_ITEM@34..45 | 36 | [email protected] |
37 | [email protected] "use" | 37 | [email protected] "use" |
38 | [email protected] " " | 38 | [email protected] " " |
39 | [email protected] | 39 | [email protected] |
@@ -45,7 +45,7 @@ [email protected] | |||
45 | [email protected] "*" | 45 | [email protected] "*" |
46 | [email protected] ";" | 46 | [email protected] ";" |
47 | [email protected] "\n" | 47 | [email protected] "\n" |
48 | USE_ITEM@46..58 | 48 | [email protected] |
49 | [email protected] "use" | 49 | [email protected] "use" |
50 | [email protected] " " | 50 | [email protected] " " |
51 | [email protected] | 51 | [email protected] |
@@ -59,7 +59,7 @@ [email protected] | |||
59 | [email protected] "}" | 59 | [email protected] "}" |
60 | [email protected] ";" | 60 | [email protected] ";" |
61 | [email protected] "\n" | 61 | [email protected] "\n" |
62 | USE_ITEM@59..80 | 62 | [email protected] |
63 | [email protected] "use" | 63 | [email protected] "use" |
64 | [email protected] " " | 64 | [email protected] " " |
65 | [email protected] | 65 | [email protected] |
diff --git a/crates/ra_syntax/test_data/parser/ok/0015_use_tree.rast b/crates/ra_syntax/test_data/parser/ok/0015_use_tree.rast index cdddb4214..d7e93f7eb 100644 --- a/crates/ra_syntax/test_data/parser/ok/0015_use_tree.rast +++ b/crates/ra_syntax/test_data/parser/ok/0015_use_tree.rast | |||
@@ -1,5 +1,5 @@ | |||
1 | [email protected] | 1 | [email protected] |
2 | USE_ITEM@0..15 | 2 | [email protected] |
3 | [email protected] "use" | 3 | [email protected] "use" |
4 | [email protected] " " | 4 | [email protected] " " |
5 | [email protected] | 5 | [email protected] |
@@ -15,7 +15,7 @@ [email protected] | |||
15 | [email protected] "bar" | 15 | [email protected] "bar" |
16 | [email protected] ";" | 16 | [email protected] ";" |
17 | [email protected] "\n" | 17 | [email protected] "\n" |
18 | USE_ITEM@16..54 | 18 | [email protected] |
19 | [email protected] "use" | 19 | [email protected] "use" |
20 | [email protected] " " | 20 | [email protected] " " |
21 | [email protected] | 21 | [email protected] |
diff --git a/crates/ra_syntax/test_data/parser/ok/0035_weird_exprs.rast b/crates/ra_syntax/test_data/parser/ok/0035_weird_exprs.rast index eb59d6e17..bbdf896d1 100644 --- a/crates/ra_syntax/test_data/parser/ok/0035_weird_exprs.rast +++ b/crates/ra_syntax/test_data/parser/ok/0035_weird_exprs.rast | |||
@@ -78,7 +78,7 @@ [email protected] | |||
78 | [email protected] "\"128\"" | 78 | [email protected] "\"128\"" |
79 | [email protected] "]" | 79 | [email protected] "]" |
80 | [email protected] "\n\n" | 80 | [email protected] "\n\n" |
81 | USE_ITEM@407..427 | 81 | [email protected] |
82 | [email protected] "use" | 82 | [email protected] "use" |
83 | [email protected] " " | 83 | [email protected] " " |
84 | [email protected] | 84 | [email protected] |
@@ -98,7 +98,7 @@ [email protected] | |||
98 | [email protected] "Cell" | 98 | [email protected] "Cell" |
99 | [email protected] ";" | 99 | [email protected] ";" |
100 | [email protected] "\n" | 100 | [email protected] "\n" |
101 | USE_ITEM@428..447 | 101 | [email protected] |
102 | [email protected] "use" | 102 | [email protected] "use" |
103 | [email protected] " " | 103 | [email protected] " " |
104 | [email protected] | 104 | [email protected] |
diff --git a/xtask/src/ast_src.rs b/xtask/src/ast_src.rs index 083727c5c..3a58217c4 100644 --- a/xtask/src/ast_src.rs +++ b/xtask/src/ast_src.rs | |||
@@ -100,7 +100,7 @@ pub(crate) const KINDS_SRC: KindsSrc = KindsSrc { | |||
100 | "RET_TYPE", | 100 | "RET_TYPE", |
101 | "EXTERN_CRATE", | 101 | "EXTERN_CRATE", |
102 | "MODULE", | 102 | "MODULE", |
103 | "USE_ITEM", | 103 | "USE", |
104 | "STATIC_DEF", | 104 | "STATIC_DEF", |
105 | "CONST_DEF", | 105 | "CONST_DEF", |
106 | "TRAIT_DEF", | 106 | "TRAIT_DEF", |
diff --git a/xtask/src/codegen/gen_syntax.rs b/xtask/src/codegen/gen_syntax.rs index 9b49712c1..c77fc8a8d 100644 --- a/xtask/src/codegen/gen_syntax.rs +++ b/xtask/src/codegen/gen_syntax.rs | |||
@@ -543,6 +543,10 @@ fn lower_enum(grammar: &Grammar, rule: &Rule) -> Option<Vec<String>> { | |||
543 | } | 543 | } |
544 | 544 | ||
545 | fn lower_rule(acc: &mut Vec<Field>, grammar: &Grammar, rule: &Rule) { | 545 | fn lower_rule(acc: &mut Vec<Field>, grammar: &Grammar, rule: &Rule) { |
546 | if lower_comma_list(acc, grammar, rule) { | ||
547 | return; | ||
548 | } | ||
549 | |||
546 | match rule { | 550 | match rule { |
547 | Rule::Node(node) => { | 551 | Rule::Node(node) => { |
548 | let field = Field::Node { name: grammar[*node].name.clone(), src: FieldSrc::Shorthand }; | 552 | let field = Field::Node { name: grammar[*node].name.clone(), src: FieldSrc::Shorthand }; |
@@ -595,6 +599,37 @@ fn lower_rule(acc: &mut Vec<Field>, grammar: &Grammar, rule: &Rule) { | |||
595 | } | 599 | } |
596 | } | 600 | } |
597 | 601 | ||
602 | // (T (',' T)* ','?)? | ||
603 | fn lower_comma_list(acc: &mut Vec<Field>, grammar: &Grammar, rule: &Rule) -> bool { | ||
604 | let rule = match rule { | ||
605 | Rule::Opt(it) => it, | ||
606 | _ => return false, | ||
607 | }; | ||
608 | let rule = match &**rule { | ||
609 | Rule::Seq(it) => it, | ||
610 | _ => return false, | ||
611 | }; | ||
612 | let (node, repeat, trailing_comma) = match rule.as_slice() { | ||
613 | [Rule::Node(node), Rule::Rep(repeat), Rule::Opt(trailing_comma)] => { | ||
614 | (node, repeat, trailing_comma) | ||
615 | } | ||
616 | _ => return false, | ||
617 | }; | ||
618 | let repeat = match &**repeat { | ||
619 | Rule::Seq(it) => it, | ||
620 | _ => return false, | ||
621 | }; | ||
622 | match repeat.as_slice() { | ||
623 | [comma, Rule::Node(n)] if comma == &**trailing_comma && n == node => (), | ||
624 | _ => return false, | ||
625 | } | ||
626 | let name = grammar[*node].name.clone(); | ||
627 | let label = pluralize(&to_lower_snake_case(&name)); | ||
628 | let field = Field::Node { name: label.clone(), src: FieldSrc::Many(name) }; | ||
629 | acc.push(field); | ||
630 | true | ||
631 | } | ||
632 | |||
598 | fn deduplicate_fields(ast: &mut AstSrc) { | 633 | fn deduplicate_fields(ast: &mut AstSrc) { |
599 | for node in &mut ast.nodes { | 634 | for node in &mut ast.nodes { |
600 | let mut i = 0; | 635 | let mut i = 0; |
diff --git a/xtask/src/codegen/rust.ungram b/xtask/src/codegen/rust.ungram index e6e7c7518..449b0242f 100644 --- a/xtask/src/codegen/rust.ungram +++ b/xtask/src/codegen/rust.ungram | |||
@@ -17,7 +17,7 @@ Item = | |||
17 | | TraitDef | 17 | | TraitDef |
18 | | TypeAliasDef | 18 | | TypeAliasDef |
19 | | UnionDef | 19 | | UnionDef |
20 | | UseItem | 20 | | Use |
21 | 21 | ||
22 | Module = | 22 | Module = |
23 | Attr* Visibility? 'mod' Name | 23 | Attr* Visibility? 'mod' Name |
@@ -29,6 +29,19 @@ ItemList = | |||
29 | ExternCrate = | 29 | ExternCrate = |
30 | Attr* Visibility? 'extern' 'crate' (NameRef | 'self') Rename? ';' | 30 | Attr* Visibility? 'extern' 'crate' (NameRef | 'self') Rename? ';' |
31 | 31 | ||
32 | Rename = | ||
33 | 'as' (Name | '_') | ||
34 | |||
35 | Use = | ||
36 | Attr* Visibility? 'use' UseTree ';' | ||
37 | |||
38 | UseTree = | ||
39 | (Path? '::')? ('*' | UseTreeList ) | ||
40 | | Path Rename? | ||
41 | |||
42 | UseTreeList = | ||
43 | '{' (UseTree (',' UseTree)* ','?)? '}' | ||
44 | |||
32 | FnDef = | 45 | FnDef = |
33 | Attr* Visibility? Abi? 'const' 'default' 'async' 'unsafe' 'fn' Name TypeParamList? | 46 | Attr* Visibility? Abi? 'const' 'default' 'async' 'unsafe' 'fn' Name TypeParamList? |
34 | ParamList RetType? | 47 | ParamList RetType? |
@@ -395,18 +408,6 @@ Param = | |||
395 | Attr* Pat (':' ascribed_type:TypeRef) | 408 | Attr* Pat (':' ascribed_type:TypeRef) |
396 | | '...' | 409 | | '...' |
397 | 410 | ||
398 | UseItem = | ||
399 | Attr* Visibility? 'use' UseTree ';' | ||
400 | |||
401 | UseTree = | ||
402 | Path ('::' ('*' | UseTreeList)) Rename? | ||
403 | |||
404 | UseTreeList = | ||
405 | '{' UseTree* '}' | ||
406 | |||
407 | Rename = | ||
408 | 'as' Name | ||
409 | |||
410 | Path = | 411 | Path = |
411 | (qualifier:Path '::')? segment:PathSegment | 412 | (qualifier:Path '::')? segment:PathSegment |
412 | 413 | ||