From 2984da672e0c73d56501c6b6e4d19fd28152b5eb Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Thu, 30 Jul 2020 11:42:51 +0200 Subject: [PATCH 1/3] Split ItemList & AssocItemList --- .../src/handlers/add_missing_impl_members.rs | 3 +- .../ra_assists/src/handlers/generate_new.rs | 2 +- crates/ra_assists/src/handlers/move_bounds.rs | 4 +- crates/ra_assists/src/utils.rs | 3 +- crates/ra_hir_def/src/item_tree/lower.rs | 19 +++-- .../src/completion/complete_fn_param.rs | 38 ++++++---- .../ra_ide/src/completion/complete_keyword.rs | 36 +++++----- crates/ra_ide/src/completion/patterns.rs | 6 +- crates/ra_parser/src/grammar/items/traits.rs | 4 +- crates/ra_parser/src/syntax_kind/generated.rs | 1 + crates/ra_syntax/src/ast/edit.rs | 9 ++- crates/ra_syntax/src/ast/generated/nodes.rs | 71 +++++++++++++------ xtask/src/ast_src.rs | 1 + xtask/src/codegen/rust.ungram | 23 +++--- 14 files changed, 131 insertions(+), 89 deletions(-) diff --git a/crates/ra_assists/src/handlers/add_missing_impl_members.rs b/crates/ra_assists/src/handlers/add_missing_impl_members.rs index f185e61e59..a2d9006e48 100644 --- a/crates/ra_assists/src/handlers/add_missing_impl_members.rs +++ b/crates/ra_assists/src/handlers/add_missing_impl_members.rs @@ -112,7 +112,7 @@ fn add_missing_impl_members_inner( ) -> Option<()> { let _p = ra_prof::profile("add_missing_impl_members_inner"); let impl_def = ctx.find_node_at_offset::()?; - let impl_item_list = impl_def.item_list()?; + let impl_item_list = impl_def.assoc_item_list()?; let trait_ = resolve_target_trait(&ctx.sema, &impl_def)?; @@ -121,6 +121,7 @@ fn add_missing_impl_members_inner( ast::AssocItem::FnDef(def) => def.name(), ast::AssocItem::TypeAliasDef(def) => def.name(), ast::AssocItem::ConstDef(def) => def.name(), + ast::AssocItem::MacroCall(_) => None, } .map(|it| it.text().clone()) }; diff --git a/crates/ra_assists/src/handlers/generate_new.rs b/crates/ra_assists/src/handlers/generate_new.rs index e27def1d8a..25bc171bfb 100644 --- a/crates/ra_assists/src/handlers/generate_new.rs +++ b/crates/ra_assists/src/handlers/generate_new.rs @@ -158,7 +158,7 @@ fn find_struct_impl(ctx: &AssistContext, strukt: &ast::StructDef) -> Option bool { - if let Some(il) = imp.item_list() { + if let Some(il) = imp.assoc_item_list() { for item in il.assoc_items() { if let ast::AssocItem::FnDef(f) = item { if let Some(name) = f.name() { diff --git a/crates/ra_assists/src/handlers/move_bounds.rs b/crates/ra_assists/src/handlers/move_bounds.rs index ba3dafb995..6b73fff44c 100644 --- a/crates/ra_assists/src/handlers/move_bounds.rs +++ b/crates/ra_assists/src/handlers/move_bounds.rs @@ -38,8 +38,8 @@ pub(crate) fn move_bounds_to_where_clause(acc: &mut Assists, ctx: &AssistContext let anchor = match_ast! { match parent { ast::FnDef(it) => it.body()?.syntax().clone().into(), - ast::TraitDef(it) => it.item_list()?.syntax().clone().into(), - ast::ImplDef(it) => it.item_list()?.syntax().clone().into(), + ast::TraitDef(it) => it.assoc_item_list()?.syntax().clone().into(), + ast::ImplDef(it) => it.assoc_item_list()?.syntax().clone().into(), ast::EnumDef(it) => it.variant_list()?.syntax().clone().into(), ast::StructDef(it) => { it.syntax().children_with_tokens() diff --git a/crates/ra_assists/src/utils.rs b/crates/ra_assists/src/utils.rs index 02de902d6e..27c33df232 100644 --- a/crates/ra_assists/src/utils.rs +++ b/crates/ra_assists/src/utils.rs @@ -63,7 +63,7 @@ pub fn get_missing_assoc_items( let mut impl_fns_consts = FxHashSet::default(); let mut impl_type = FxHashSet::default(); - if let Some(item_list) = impl_def.item_list() { + if let Some(item_list) = impl_def.assoc_item_list() { for item in item_list.assoc_items() { match item { ast::AssocItem::FnDef(f) => { @@ -83,6 +83,7 @@ pub fn get_missing_assoc_items( impl_fns_consts.insert(n.syntax().to_string()); } } + ast::AssocItem::MacroCall(_) => (), } } } diff --git a/crates/ra_hir_def/src/item_tree/lower.rs b/crates/ra_hir_def/src/item_tree/lower.rs index eb1da46320..4fc21a642c 100644 --- a/crates/ra_hir_def/src/item_tree/lower.rs +++ b/crates/ra_hir_def/src/item_tree/lower.rs @@ -153,13 +153,12 @@ impl Ctx { self.forced_visibility = forced_vis; } - fn lower_assoc_item(&mut self, item: &ast::Item) -> Option { + fn lower_assoc_item(&mut self, item: &ast::AssocItem) -> Option { match item { - ast::Item::FnDef(ast) => self.lower_function(ast).map(Into::into), - ast::Item::TypeAliasDef(ast) => self.lower_type_alias(ast).map(Into::into), - ast::Item::ConstDef(ast) => Some(self.lower_const(ast).into()), - ast::Item::MacroCall(ast) => self.lower_macro_call(ast).map(Into::into), - _ => None, + ast::AssocItem::FnDef(ast) => self.lower_function(ast).map(Into::into), + ast::AssocItem::TypeAliasDef(ast) => self.lower_type_alias(ast).map(Into::into), + ast::AssocItem::ConstDef(ast) => Some(self.lower_const(ast).into()), + ast::AssocItem::MacroCall(ast) => self.lower_macro_call(ast).map(Into::into), } } @@ -419,9 +418,9 @@ impl Ctx { let generic_params = self.lower_generic_params_and_inner_items(GenericsOwner::Trait(trait_def), trait_def); let auto = trait_def.auto_token().is_some(); - let items = trait_def.item_list().map(|list| { + let items = trait_def.assoc_item_list().map(|list| { self.with_inherited_visibility(visibility, |this| { - list.items() + list.assoc_items() .filter_map(|item| { let attrs = Attrs::new(&item, &this.hygiene); this.collect_inner_items(item.syntax()); @@ -454,9 +453,9 @@ impl Ctx { // We cannot use `assoc_items()` here as that does not include macro calls. let items = impl_def - .item_list() + .assoc_item_list() .into_iter() - .flat_map(|it| it.items()) + .flat_map(|it| it.assoc_items()) .filter_map(|item| { self.collect_inner_items(item.syntax()); let assoc = self.lower_assoc_item(&item)?; diff --git a/crates/ra_ide/src/completion/complete_fn_param.rs b/crates/ra_ide/src/completion/complete_fn_param.rs index 7a53083f54..d4b6112a5a 100644 --- a/crates/ra_ide/src/completion/complete_fn_param.rs +++ b/crates/ra_ide/src/completion/complete_fn_param.rs @@ -18,26 +18,36 @@ pub(super) fn complete_fn_param(acc: &mut Completions, ctx: &CompletionContext) } let mut params = FxHashMap::default(); + let me = ctx.token.ancestors().find_map(ast::FnDef::cast); + let mut process_fn = |func: ast::FnDef| { + if Some(&func) == me.as_ref() { + return; + } + func.param_list().into_iter().flat_map(|it| it.params()).for_each(|param| { + let text = param.syntax().text().to_string(); + params.entry(text).or_insert(param); + }) + }; + for node in ctx.token.parent().ancestors() { - let items = match_ast! { + match_ast! { match node { - ast::SourceFile(it) => it.items(), - ast::ItemList(it) => it.items(), + ast::SourceFile(it) => it.items().filter_map(|item| match item { + ast::Item::FnDef(it) => Some(it), + _ => None, + }).for_each(&mut process_fn), + ast::ItemList(it) => it.items().filter_map(|item| match item { + ast::Item::FnDef(it) => Some(it), + _ => None, + }).for_each(&mut process_fn), + ast::AssocItemList(it) => it.assoc_items().filter_map(|item| match item { + ast::AssocItem::FnDef(it) => Some(it), + _ => None, + }).for_each(&mut process_fn), _ => continue, } }; - for item in items { - if let ast::Item::FnDef(func) = item { - if Some(&func) == me.as_ref() { - continue; - } - func.param_list().into_iter().flat_map(|it| it.params()).for_each(|param| { - let text = param.syntax().text().to_string(); - params.entry(text).or_insert(param); - }) - } - } } params diff --git a/crates/ra_ide/src/completion/complete_keyword.rs b/crates/ra_ide/src/completion/complete_keyword.rs index fcdaeef49b..1581b2d5d8 100644 --- a/crates/ra_ide/src/completion/complete_keyword.rs +++ b/crates/ra_ide/src/completion/complete_keyword.rs @@ -66,27 +66,24 @@ pub(super) fn complete_expr_keyword(acc: &mut Completions, ctx: &CompletionConte add_keyword(ctx, acc, "fn", "fn $0() {}") } - if (ctx.has_item_list_or_source_file_parent && !has_trait_or_impl_parent) - || ctx.block_expr_parent - { + if (ctx.has_item_list_or_source_file_parent) || ctx.block_expr_parent { add_keyword(ctx, acc, "trait", "trait $0 {}"); add_keyword(ctx, acc, "impl", "impl $0 {}"); } return; } - if ctx.has_item_list_or_source_file_parent || ctx.block_expr_parent { + if ctx.has_item_list_or_source_file_parent || has_trait_or_impl_parent || ctx.block_expr_parent + { add_keyword(ctx, acc, "fn", "fn $0() {}"); } - if (ctx.has_item_list_or_source_file_parent && !has_trait_or_impl_parent) - || ctx.block_expr_parent - { + if (ctx.has_item_list_or_source_file_parent) || ctx.block_expr_parent { add_keyword(ctx, acc, "use", "use "); add_keyword(ctx, acc, "impl", "impl $0 {}"); add_keyword(ctx, acc, "trait", "trait $0 {}"); } - if ctx.has_item_list_or_source_file_parent && !has_trait_or_impl_parent { + if ctx.has_item_list_or_source_file_parent { add_keyword(ctx, acc, "enum", "enum $0 {}"); add_keyword(ctx, acc, "struct", "struct $0"); add_keyword(ctx, acc, "union", "union $0 {}"); @@ -108,29 +105,28 @@ pub(super) fn complete_expr_keyword(acc: &mut Completions, ctx: &CompletionConte add_keyword(ctx, acc, "else", "else {$0}"); add_keyword(ctx, acc, "else if", "else if $0 {}"); } - if (ctx.has_item_list_or_source_file_parent && !has_trait_or_impl_parent) - || ctx.block_expr_parent - { + if (ctx.has_item_list_or_source_file_parent) || ctx.block_expr_parent { add_keyword(ctx, acc, "mod", "mod $0 {}"); } if ctx.bind_pat_parent || ctx.ref_pat_parent { add_keyword(ctx, acc, "mut", "mut "); } - if ctx.has_item_list_or_source_file_parent || ctx.block_expr_parent { + if ctx.has_item_list_or_source_file_parent || has_trait_or_impl_parent || ctx.block_expr_parent + { add_keyword(ctx, acc, "const", "const "); add_keyword(ctx, acc, "type", "type "); } - if (ctx.has_item_list_or_source_file_parent && !has_trait_or_impl_parent) - || ctx.block_expr_parent - { + if (ctx.has_item_list_or_source_file_parent) || ctx.block_expr_parent { add_keyword(ctx, acc, "static", "static "); }; - if (ctx.has_item_list_or_source_file_parent && !has_trait_or_impl_parent) - || ctx.block_expr_parent - { + if (ctx.has_item_list_or_source_file_parent) || ctx.block_expr_parent { add_keyword(ctx, acc, "extern", "extern "); } - if ctx.has_item_list_or_source_file_parent || ctx.block_expr_parent || ctx.is_match_arm { + if ctx.has_item_list_or_source_file_parent + || has_trait_or_impl_parent + || ctx.block_expr_parent + || ctx.is_match_arm + { add_keyword(ctx, acc, "unsafe", "unsafe "); } if ctx.in_loop_body { @@ -142,7 +138,7 @@ pub(super) fn complete_expr_keyword(acc: &mut Completions, ctx: &CompletionConte add_keyword(ctx, acc, "break", "break"); } } - if ctx.has_item_list_or_source_file_parent && !ctx.has_trait_parent { + if ctx.has_item_list_or_source_file_parent || ctx.has_impl_parent { add_keyword(ctx, acc, "pub", "pub ") } diff --git a/crates/ra_ide/src/completion/patterns.rs b/crates/ra_ide/src/completion/patterns.rs index b2fe13280a..175209d8ac 100644 --- a/crates/ra_ide/src/completion/patterns.rs +++ b/crates/ra_ide/src/completion/patterns.rs @@ -13,7 +13,7 @@ use crate::completion::test_utils::check_pattern_is_applicable; pub(crate) fn has_trait_parent(element: SyntaxElement) -> bool { not_same_range_ancestor(element) - .filter(|it| it.kind() == ITEM_LIST) + .filter(|it| it.kind() == ASSOC_ITEM_LIST) .and_then(|it| it.parent()) .filter(|it| it.kind() == TRAIT_DEF) .is_some() @@ -25,7 +25,7 @@ fn test_has_trait_parent() { pub(crate) fn has_impl_parent(element: SyntaxElement) -> bool { not_same_range_ancestor(element) - .filter(|it| it.kind() == ITEM_LIST) + .filter(|it| it.kind() == ASSOC_ITEM_LIST) .and_then(|it| it.parent()) .filter(|it| it.kind() == IMPL_DEF) .is_some() @@ -73,7 +73,7 @@ pub(crate) fn has_item_list_or_source_file_parent(element: SyntaxElement) -> boo #[test] fn test_has_item_list_or_source_file_parent() { check_pattern_is_applicable(r"i<|>", has_item_list_or_source_file_parent); - check_pattern_is_applicable(r"impl { f<|> }", has_item_list_or_source_file_parent); + check_pattern_is_applicable(r"mod foo { f<|> }", has_item_list_or_source_file_parent); } pub(crate) fn is_match_arm(element: SyntaxElement) -> bool { diff --git a/crates/ra_parser/src/grammar/items/traits.rs b/crates/ra_parser/src/grammar/items/traits.rs index c819e33be9..ef9c8ff5b0 100644 --- a/crates/ra_parser/src/grammar/items/traits.rs +++ b/crates/ra_parser/src/grammar/items/traits.rs @@ -50,7 +50,7 @@ pub(crate) fn trait_item_list(p: &mut Parser) { item_or_macro(p, true, ItemFlavor::Trait); } p.expect(T!['}']); - m.complete(p, ITEM_LIST); + m.complete(p, ASSOC_ITEM_LIST); } // test impl_def @@ -107,7 +107,7 @@ pub(crate) fn impl_item_list(p: &mut Parser) { item_or_macro(p, true, ItemFlavor::Mod); } p.expect(T!['}']); - m.complete(p, ITEM_LIST); + m.complete(p, ASSOC_ITEM_LIST); } // test impl_type_params diff --git a/crates/ra_parser/src/syntax_kind/generated.rs b/crates/ra_parser/src/syntax_kind/generated.rs index 625f0c8229..56dadc6af0 100644 --- a/crates/ra_parser/src/syntax_kind/generated.rs +++ b/crates/ra_parser/src/syntax_kind/generated.rs @@ -213,6 +213,7 @@ pub enum SyntaxKind { TUPLE_FIELD_DEF, ENUM_VARIANT_LIST, ITEM_LIST, + ASSOC_ITEM_LIST, ATTR, META_ITEM, USE_TREE, diff --git a/crates/ra_syntax/src/ast/edit.rs b/crates/ra_syntax/src/ast/edit.rs index abc7a646c2..01a310f66d 100644 --- a/crates/ra_syntax/src/ast/edit.rs +++ b/crates/ra_syntax/src/ast/edit.rs @@ -80,9 +80,12 @@ where } } -impl ast::ItemList { +impl ast::AssocItemList { #[must_use] - pub fn append_items(&self, items: impl IntoIterator) -> ast::ItemList { + pub fn append_items( + &self, + items: impl IntoIterator, + ) -> ast::AssocItemList { let mut res = self.clone(); if !self.syntax().text().contains_char('\n') { res = make_multiline(res); @@ -92,7 +95,7 @@ impl ast::ItemList { } #[must_use] - pub fn append_item(&self, item: ast::AssocItem) -> ast::ItemList { + pub fn append_item(&self, item: ast::AssocItem) -> ast::AssocItemList { let (indent, position) = match self.assoc_items().last() { Some(it) => ( leading_indent(it.syntax()).unwrap_or_default().to_string(), diff --git a/crates/ra_syntax/src/ast/generated/nodes.rs b/crates/ra_syntax/src/ast/generated/nodes.rs index dfda795502..7ccb7ea7fa 100644 --- a/crates/ra_syntax/src/ast/generated/nodes.rs +++ b/crates/ra_syntax/src/ast/generated/nodes.rs @@ -112,7 +112,7 @@ impl ImplDef { pub fn impl_token(&self) -> Option { support::token(&self.syntax, T![impl]) } pub fn excl_token(&self) -> Option { support::token(&self.syntax, T![!]) } pub fn for_token(&self) -> Option { support::token(&self.syntax, T![for]) } - pub fn item_list(&self) -> Option { support::child(&self.syntax) } + pub fn assoc_item_list(&self) -> Option { support::child(&self.syntax) } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct MacroCall { @@ -180,7 +180,7 @@ impl TraitDef { pub fn unsafe_token(&self) -> Option { support::token(&self.syntax, T![unsafe]) } pub fn auto_token(&self) -> Option { support::token(&self.syntax, T![auto]) } pub fn trait_token(&self) -> Option { support::token(&self.syntax, T![trait]) } - pub fn item_list(&self) -> Option { support::child(&self.syntax) } + pub fn assoc_item_list(&self) -> Option { support::child(&self.syntax) } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct TypeAliasDef { @@ -238,11 +238,6 @@ impl Visibility { pub fn r_paren_token(&self) -> Option { support::token(&self.syntax, T![')']) } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] -pub struct Abi { - pub(crate) syntax: SyntaxNode, -} -impl Abi {} -#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct Name { pub(crate) syntax: SyntaxNode, } @@ -250,6 +245,20 @@ impl Name { pub fn ident_token(&self) -> Option { support::token(&self.syntax, T![ident]) } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct ItemList { + pub(crate) syntax: SyntaxNode, +} +impl ast::ModuleItemOwner for ItemList {} +impl ItemList { + pub fn l_curly_token(&self) -> Option { support::token(&self.syntax, T!['{']) } + pub fn r_curly_token(&self) -> Option { support::token(&self.syntax, T!['}']) } +} +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct Abi { + pub(crate) syntax: SyntaxNode, +} +impl Abi {} +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct TypeParamList { pub(crate) syntax: SyntaxNode, } @@ -367,11 +376,10 @@ impl TypeBoundList { pub fn bounds(&self) -> AstChildren { support::children(&self.syntax) } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] -pub struct ItemList { +pub struct AssocItemList { pub(crate) syntax: SyntaxNode, } -impl ast::ModuleItemOwner for ItemList {} -impl ItemList { +impl AssocItemList { pub fn l_curly_token(&self) -> Option { support::token(&self.syntax, T!['{']) } pub fn assoc_items(&self) -> AstChildren { support::children(&self.syntax) } pub fn r_curly_token(&self) -> Option { support::token(&self.syntax, T!['}']) } @@ -1336,10 +1344,10 @@ pub enum AssocItem { FnDef(FnDef), TypeAliasDef(TypeAliasDef), ConstDef(ConstDef), + MacroCall(MacroCall), } impl ast::AttrsOwner for AssocItem {} impl ast::NameOwner for AssocItem {} -impl ast::VisibilityOwner for AssocItem {} #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub enum Pat { OrPat(OrPat), @@ -1574,8 +1582,8 @@ impl AstNode for Visibility { } fn syntax(&self) -> &SyntaxNode { &self.syntax } } -impl AstNode for Abi { - fn can_cast(kind: SyntaxKind) -> bool { kind == ABI } +impl AstNode for Name { + fn can_cast(kind: SyntaxKind) -> bool { kind == NAME } fn cast(syntax: SyntaxNode) -> Option { if Self::can_cast(syntax.kind()) { Some(Self { syntax }) @@ -1585,8 +1593,19 @@ impl AstNode for Abi { } fn syntax(&self) -> &SyntaxNode { &self.syntax } } -impl AstNode for Name { - fn can_cast(kind: SyntaxKind) -> bool { kind == NAME } +impl AstNode for ItemList { + fn can_cast(kind: SyntaxKind) -> bool { kind == ITEM_LIST } + fn cast(syntax: SyntaxNode) -> Option { + if Self::can_cast(syntax.kind()) { + Some(Self { syntax }) + } else { + None + } + } + fn syntax(&self) -> &SyntaxNode { &self.syntax } +} +impl AstNode for Abi { + fn can_cast(kind: SyntaxKind) -> bool { kind == ABI } fn cast(syntax: SyntaxNode) -> Option { if Self::can_cast(syntax.kind()) { Some(Self { syntax }) @@ -1728,8 +1747,8 @@ impl AstNode for TypeBoundList { } fn syntax(&self) -> &SyntaxNode { &self.syntax } } -impl AstNode for ItemList { - fn can_cast(kind: SyntaxKind) -> bool { kind == ITEM_LIST } +impl AstNode for AssocItemList { + fn can_cast(kind: SyntaxKind) -> bool { kind == ASSOC_ITEM_LIST } fn cast(syntax: SyntaxNode) -> Option { if Self::can_cast(syntax.kind()) { Some(Self { syntax }) @@ -3144,10 +3163,13 @@ impl From for AssocItem { impl From for AssocItem { fn from(node: ConstDef) -> AssocItem { AssocItem::ConstDef(node) } } +impl From for AssocItem { + fn from(node: MacroCall) -> AssocItem { AssocItem::MacroCall(node) } +} impl AstNode for AssocItem { fn can_cast(kind: SyntaxKind) -> bool { match kind { - FN_DEF | TYPE_ALIAS_DEF | CONST_DEF => true, + FN_DEF | TYPE_ALIAS_DEF | CONST_DEF | MACRO_CALL => true, _ => false, } } @@ -3156,6 +3178,7 @@ impl AstNode for AssocItem { FN_DEF => AssocItem::FnDef(FnDef { syntax }), TYPE_ALIAS_DEF => AssocItem::TypeAliasDef(TypeAliasDef { syntax }), CONST_DEF => AssocItem::ConstDef(ConstDef { syntax }), + MACRO_CALL => AssocItem::MacroCall(MacroCall { syntax }), _ => return None, }; Some(res) @@ -3165,6 +3188,7 @@ impl AstNode for AssocItem { AssocItem::FnDef(it) => &it.syntax, AssocItem::TypeAliasDef(it) => &it.syntax, AssocItem::ConstDef(it) => &it.syntax, + AssocItem::MacroCall(it) => &it.syntax, } } } @@ -3515,12 +3539,17 @@ impl std::fmt::Display for Visibility { std::fmt::Display::fmt(self.syntax(), f) } } -impl std::fmt::Display for Abi { +impl std::fmt::Display for Name { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { std::fmt::Display::fmt(self.syntax(), f) } } -impl std::fmt::Display for Name { +impl std::fmt::Display for ItemList { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + std::fmt::Display::fmt(self.syntax(), f) + } +} +impl std::fmt::Display for Abi { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { std::fmt::Display::fmt(self.syntax(), f) } @@ -3585,7 +3614,7 @@ impl std::fmt::Display for TypeBoundList { std::fmt::Display::fmt(self.syntax(), f) } } -impl std::fmt::Display for ItemList { +impl std::fmt::Display for AssocItemList { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { std::fmt::Display::fmt(self.syntax(), f) } diff --git a/xtask/src/ast_src.rs b/xtask/src/ast_src.rs index 83449437bb..d2a408e775 100644 --- a/xtask/src/ast_src.rs +++ b/xtask/src/ast_src.rs @@ -186,6 +186,7 @@ pub(crate) const KINDS_SRC: KindsSrc = KindsSrc { "TUPLE_FIELD_DEF", "ENUM_VARIANT_LIST", "ITEM_LIST", + "ASSOC_ITEM_LIST", "ATTR", "META_ITEM", // not an item actually "USE_TREE", diff --git a/xtask/src/codegen/rust.ungram b/xtask/src/codegen/rust.ungram index a93cb38158..d0518ceadf 100644 --- a/xtask/src/codegen/rust.ungram +++ b/xtask/src/codegen/rust.ungram @@ -19,6 +19,13 @@ Item = | UnionDef | UseItem +Module = + Attr* Visibility? 'mod' Name + (ItemList | ';') + +ItemList = + '{' Item* '}' + FnDef = Attr* Visibility? Abi? 'const' 'default' 'async' 'unsafe' 'fn' Name TypeParamList? ParamList RetType? @@ -67,17 +74,10 @@ EnumVariant = TraitDef = Attr* Visibility? 'unsafe'? 'auto'? 'trait' Name TypeParamList (':' TypeBoundList?)? WhereClause - ItemList + AssocItemList -Module = - Attr* Visibility? 'mod' Name - (ItemList | ';') - -ItemList = - '{' - AssocItem* - Item* - '}' +AssocItemList = + '{' AssocItem* '}' ConstDef = Attr* Visibility? 'default'? 'const' Name ':' ascribed_type:TypeRef @@ -94,7 +94,7 @@ TypeAliasDef = ImplDef = Attr* Visibility? 'const'? 'default'? 'unsafe'? 'impl' TypeParamList? '!'? 'for' WhereClause? - ItemList + AssocItemList ParenType = '(' TypeRef ')' @@ -467,6 +467,7 @@ AssocItem = FnDef | TypeAliasDef | ConstDef +| MacroCall ExternItem = FnDef | StaticDef From 081f35fe1b311223866fa5fc7edde2e8048cd901 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Thu, 30 Jul 2020 11:48:19 +0200 Subject: [PATCH 2/3] Update tests --- crates/ra_parser/src/grammar.rs | 4 ++-- .../test_data/parser/err/0018_incomplete_fn.rast | 2 +- .../ra_syntax/test_data/parser/err/0026_imp_recovery.rast | 2 +- .../test_data/parser/err/0037_visibility_in_traits.rast | 2 +- .../test_data/parser/err/0043_default_const.rast | 2 +- .../test_data/parser/inline/err/0004_impl_type.rast | 8 ++++---- .../test_data/parser/inline/err/0014_default_fn_type.rast | 2 +- .../test_data/parser/inline/ok/0001_trait_item_list.rast | 2 +- .../test_data/parser/inline/ok/0006_self_param.rast | 2 +- .../test_data/parser/inline/ok/0016_unsafe_trait.rast | 2 +- .../test_data/parser/inline/ok/0018_arb_self_types.rast | 2 +- .../test_data/parser/inline/ok/0021_impl_item_list.rast | 2 +- .../test_data/parser/inline/ok/0041_trait_item.rast | 4 ++-- .../parser/inline/ok/0047_unsafe_default_impl.rast | 2 +- .../test_data/parser/inline/ok/0050_fn_decl.rast | 2 +- .../test_data/parser/inline/ok/0063_impl_def_neg.rast | 2 +- .../test_data/parser/inline/ok/0079_impl_def.rast | 2 +- .../test_data/parser/inline/ok/0087_unsafe_impl.rast | 2 +- .../test_data/parser/inline/ok/0091_auto_trait.rast | 2 +- .../parser/inline/ok/0094_unsafe_auto_trait.rast | 2 +- .../test_data/parser/inline/ok/0097_default_impl.rast | 2 +- .../parser/inline/ok/0118_impl_inner_attributes.rast | 2 +- .../test_data/parser/inline/ok/0132_default_fn_type.rast | 2 +- .../test_data/parser/inline/ok/0150_impl_type_params.rast | 2 +- .../parser/inline/ok/0163_default_unsafe_fn.rast | 2 +- .../parser/inline/ok/0163_default_unsafe_impl.rast | 2 +- crates/ra_syntax/test_data/parser/ok/0030_traits.rast | 4 ++-- .../test_data/parser/ok/0042_ufcs_call_list.rast | 2 +- .../test_data/parser/ok/0045_block_inner_attrs.rast | 2 +- .../test_data/parser/ok/0051_parameter_attrs.rast | 4 ++-- .../test_data/parser/ok/0063_trait_fn_patterns.rast | 2 +- .../test_data/parser/ok/0064_impl_fn_params.rast | 2 +- .../ra_syntax/test_data/parser/ok/0066_default_const.rast | 2 +- 33 files changed, 40 insertions(+), 40 deletions(-) diff --git a/crates/ra_parser/src/grammar.rs b/crates/ra_parser/src/grammar.rs index de2c98afd9..3350e23b9f 100644 --- a/crates/ra_parser/src/grammar.rs +++ b/crates/ra_parser/src/grammar.rs @@ -149,12 +149,12 @@ pub(crate) fn reparser( USE_TREE_LIST => items::use_tree_list, EXTERN_ITEM_LIST => items::extern_item_list, TOKEN_TREE if first_child? == T!['{'] => items::token_tree, - ITEM_LIST => match parent? { + ASSOC_ITEM_LIST => match parent? { IMPL_DEF => items::impl_item_list, TRAIT_DEF => items::trait_item_list, - MODULE => items::mod_item_list, _ => return None, }, + ITEM_LIST => items::mod_item_list, _ => return None, }; Some(res) diff --git a/crates/ra_syntax/test_data/parser/err/0018_incomplete_fn.rast b/crates/ra_syntax/test_data/parser/err/0018_incomplete_fn.rast index 31cc4e5514..a87e5061a7 100644 --- a/crates/ra_syntax/test_data/parser/err/0018_incomplete_fn.rast +++ b/crates/ra_syntax/test_data/parser/err/0018_incomplete_fn.rast @@ -8,7 +8,7 @@ SOURCE_FILE@0..183 NAME_REF@5..13 IDENT@5..13 "FnScopes" WHITESPACE@13..14 " " - ITEM_LIST@14..182 + ASSOC_ITEM_LIST@14..182 L_CURLY@14..15 "{" WHITESPACE@15..20 "\n " FN_DEF@20..161 diff --git a/crates/ra_syntax/test_data/parser/err/0026_imp_recovery.rast b/crates/ra_syntax/test_data/parser/err/0026_imp_recovery.rast index bf07409fb0..254ff546a7 100644 --- a/crates/ra_syntax/test_data/parser/err/0026_imp_recovery.rast +++ b/crates/ra_syntax/test_data/parser/err/0026_imp_recovery.rast @@ -41,7 +41,7 @@ SOURCE_FILE@0..38 IDENT@32..33 "T" R_ANGLE@33..34 ">" WHITESPACE@34..35 " " - ITEM_LIST@35..37 + ASSOC_ITEM_LIST@35..37 L_CURLY@35..36 "{" R_CURLY@36..37 "}" WHITESPACE@37..38 "\n" diff --git a/crates/ra_syntax/test_data/parser/err/0037_visibility_in_traits.rast b/crates/ra_syntax/test_data/parser/err/0037_visibility_in_traits.rast index e3cda7c432..bc446e3dfc 100644 --- a/crates/ra_syntax/test_data/parser/err/0037_visibility_in_traits.rast +++ b/crates/ra_syntax/test_data/parser/err/0037_visibility_in_traits.rast @@ -14,7 +14,7 @@ SOURCE_FILE@0..118 L_PAREN@11..12 "(" R_PAREN@12..13 ")" WHITESPACE@13..14 " " - ITEM_LIST@14..117 + ASSOC_ITEM_LIST@14..117 L_CURLY@14..15 "{" WHITESPACE@15..20 "\n " FN_DEF@20..31 diff --git a/crates/ra_syntax/test_data/parser/err/0043_default_const.rast b/crates/ra_syntax/test_data/parser/err/0043_default_const.rast index 8eb583ef85..6ca1a48700 100644 --- a/crates/ra_syntax/test_data/parser/err/0043_default_const.rast +++ b/crates/ra_syntax/test_data/parser/err/0043_default_const.rast @@ -5,7 +5,7 @@ SOURCE_FILE@0..39 NAME@6..7 IDENT@6..7 "T" WHITESPACE@7..8 " " - ITEM_LIST@8..38 + ASSOC_ITEM_LIST@8..38 L_CURLY@8..9 "{" WHITESPACE@9..12 "\n " MACRO_CALL@12..19 diff --git a/crates/ra_syntax/test_data/parser/inline/err/0004_impl_type.rast b/crates/ra_syntax/test_data/parser/inline/err/0004_impl_type.rast index fd939be8db..2d0253aa07 100644 --- a/crates/ra_syntax/test_data/parser/inline/err/0004_impl_type.rast +++ b/crates/ra_syntax/test_data/parser/inline/err/0004_impl_type.rast @@ -8,7 +8,7 @@ SOURCE_FILE@0..87 NAME_REF@5..9 IDENT@5..9 "Type" WHITESPACE@9..10 " " - ITEM_LIST@10..12 + ASSOC_ITEM_LIST@10..12 L_CURLY@10..11 "{" R_CURLY@11..12 "}" WHITESPACE@12..13 "\n" @@ -29,7 +29,7 @@ SOURCE_FILE@0..87 NAME_REF@29..30 IDENT@29..30 "T" WHITESPACE@30..31 " " - ITEM_LIST@31..33 + ASSOC_ITEM_LIST@31..33 L_CURLY@31..32 "{" R_CURLY@32..33 "}" WHITESPACE@33..34 "\n" @@ -45,7 +45,7 @@ SOURCE_FILE@0..87 NAME_REF@44..51 IDENT@44..51 "NotType" WHITESPACE@51..52 " " - ITEM_LIST@52..54 + ASSOC_ITEM_LIST@52..54 L_CURLY@52..53 "{" R_CURLY@53..54 "}" WHITESPACE@54..55 "\n" @@ -69,7 +69,7 @@ SOURCE_FILE@0..87 NAME_REF@76..83 IDENT@76..83 "NotType" WHITESPACE@83..84 " " - ITEM_LIST@84..86 + ASSOC_ITEM_LIST@84..86 L_CURLY@84..85 "{" R_CURLY@85..86 "}" WHITESPACE@86..87 "\n" diff --git a/crates/ra_syntax/test_data/parser/inline/err/0014_default_fn_type.rast b/crates/ra_syntax/test_data/parser/inline/err/0014_default_fn_type.rast index b8cd0587da..5501dc5a68 100644 --- a/crates/ra_syntax/test_data/parser/inline/err/0014_default_fn_type.rast +++ b/crates/ra_syntax/test_data/parser/inline/err/0014_default_fn_type.rast @@ -5,7 +5,7 @@ SOURCE_FILE@0..62 NAME@6..7 IDENT@6..7 "T" WHITESPACE@7..8 " " - ITEM_LIST@8..61 + ASSOC_ITEM_LIST@8..61 L_CURLY@8..9 "{" WHITESPACE@9..14 "\n " MACRO_CALL@14..21 diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0001_trait_item_list.rast b/crates/ra_syntax/test_data/parser/inline/ok/0001_trait_item_list.rast index a38b4f5736..f422acddaa 100644 --- a/crates/ra_syntax/test_data/parser/inline/ok/0001_trait_item_list.rast +++ b/crates/ra_syntax/test_data/parser/inline/ok/0001_trait_item_list.rast @@ -8,7 +8,7 @@ SOURCE_FILE@0..83 NAME_REF@5..6 IDENT@5..6 "F" WHITESPACE@6..7 " " - ITEM_LIST@7..82 + ASSOC_ITEM_LIST@7..82 L_CURLY@7..8 "{" WHITESPACE@8..13 "\n " TYPE_ALIAS_DEF@13..27 diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0006_self_param.rast b/crates/ra_syntax/test_data/parser/inline/ok/0006_self_param.rast index 9f4a9e69bc..0cd1dffc9f 100644 --- a/crates/ra_syntax/test_data/parser/inline/ok/0006_self_param.rast +++ b/crates/ra_syntax/test_data/parser/inline/ok/0006_self_param.rast @@ -8,7 +8,7 @@ SOURCE_FILE@0..128 NAME_REF@5..6 IDENT@5..6 "S" WHITESPACE@6..7 " " - ITEM_LIST@7..127 + ASSOC_ITEM_LIST@7..127 L_CURLY@7..8 "{" WHITESPACE@8..13 "\n " FN_DEF@13..26 diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0016_unsafe_trait.rast b/crates/ra_syntax/test_data/parser/inline/ok/0016_unsafe_trait.rast index d59c6006d7..69b82e33c6 100644 --- a/crates/ra_syntax/test_data/parser/inline/ok/0016_unsafe_trait.rast +++ b/crates/ra_syntax/test_data/parser/inline/ok/0016_unsafe_trait.rast @@ -7,7 +7,7 @@ SOURCE_FILE@0..18 NAME@13..14 IDENT@13..14 "T" WHITESPACE@14..15 " " - ITEM_LIST@15..17 + ASSOC_ITEM_LIST@15..17 L_CURLY@15..16 "{" R_CURLY@16..17 "}" WHITESPACE@17..18 "\n" diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0018_arb_self_types.rast b/crates/ra_syntax/test_data/parser/inline/ok/0018_arb_self_types.rast index 15da6fdd6e..79148e953c 100644 --- a/crates/ra_syntax/test_data/parser/inline/ok/0018_arb_self_types.rast +++ b/crates/ra_syntax/test_data/parser/inline/ok/0018_arb_self_types.rast @@ -8,7 +8,7 @@ SOURCE_FILE@0..69 NAME_REF@5..6 IDENT@5..6 "S" WHITESPACE@6..7 " " - ITEM_LIST@7..68 + ASSOC_ITEM_LIST@7..68 L_CURLY@7..8 "{" WHITESPACE@8..13 "\n " FN_DEF@13..33 diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0021_impl_item_list.rast b/crates/ra_syntax/test_data/parser/inline/ok/0021_impl_item_list.rast index c204aeb63e..31b5b6616b 100644 --- a/crates/ra_syntax/test_data/parser/inline/ok/0021_impl_item_list.rast +++ b/crates/ra_syntax/test_data/parser/inline/ok/0021_impl_item_list.rast @@ -8,7 +8,7 @@ SOURCE_FILE@0..89 NAME_REF@5..6 IDENT@5..6 "F" WHITESPACE@6..7 " " - ITEM_LIST@7..88 + ASSOC_ITEM_LIST@7..88 L_CURLY@7..8 "{" WHITESPACE@8..13 "\n " TYPE_ALIAS_DEF@13..26 diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0041_trait_item.rast b/crates/ra_syntax/test_data/parser/inline/ok/0041_trait_item.rast index 1ae7913616..884ab2dbf3 100644 --- a/crates/ra_syntax/test_data/parser/inline/ok/0041_trait_item.rast +++ b/crates/ra_syntax/test_data/parser/inline/ok/0041_trait_item.rast @@ -48,7 +48,7 @@ SOURCE_FILE@0..101 NAME_REF@34..38 IDENT@34..38 "Copy" WHITESPACE@38..39 " " - ITEM_LIST@39..41 + ASSOC_ITEM_LIST@39..41 L_CURLY@39..40 "{" R_CURLY@40..41 "}" WHITESPACE@41..42 "\n" @@ -119,7 +119,7 @@ SOURCE_FILE@0..101 NAME_REF@93..97 IDENT@93..97 "Copy" WHITESPACE@97..98 " " - ITEM_LIST@98..100 + ASSOC_ITEM_LIST@98..100 L_CURLY@98..99 "{" R_CURLY@99..100 "}" WHITESPACE@100..101 "\n" diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0047_unsafe_default_impl.rast b/crates/ra_syntax/test_data/parser/inline/ok/0047_unsafe_default_impl.rast index 52de6023b4..8a6b5a8fcf 100644 --- a/crates/ra_syntax/test_data/parser/inline/ok/0047_unsafe_default_impl.rast +++ b/crates/ra_syntax/test_data/parser/inline/ok/0047_unsafe_default_impl.rast @@ -12,7 +12,7 @@ SOURCE_FILE@0..27 NAME_REF@20..23 IDENT@20..23 "Foo" WHITESPACE@23..24 " " - ITEM_LIST@24..26 + ASSOC_ITEM_LIST@24..26 L_CURLY@24..25 "{" R_CURLY@25..26 "}" WHITESPACE@26..27 "\n" diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0050_fn_decl.rast b/crates/ra_syntax/test_data/parser/inline/ok/0050_fn_decl.rast index 8bf62cda90..5f1429102c 100644 --- a/crates/ra_syntax/test_data/parser/inline/ok/0050_fn_decl.rast +++ b/crates/ra_syntax/test_data/parser/inline/ok/0050_fn_decl.rast @@ -5,7 +5,7 @@ SOURCE_FILE@0..22 NAME@6..7 IDENT@6..7 "T" WHITESPACE@7..8 " " - ITEM_LIST@8..21 + ASSOC_ITEM_LIST@8..21 L_CURLY@8..9 "{" WHITESPACE@9..10 " " FN_DEF@10..19 diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0063_impl_def_neg.rast b/crates/ra_syntax/test_data/parser/inline/ok/0063_impl_def_neg.rast index 24b9a1f461..31178f86e0 100644 --- a/crates/ra_syntax/test_data/parser/inline/ok/0063_impl_def_neg.rast +++ b/crates/ra_syntax/test_data/parser/inline/ok/0063_impl_def_neg.rast @@ -17,7 +17,7 @@ SOURCE_FILE@0..20 NAME_REF@15..16 IDENT@15..16 "X" WHITESPACE@16..17 " " - ITEM_LIST@17..19 + ASSOC_ITEM_LIST@17..19 L_CURLY@17..18 "{" R_CURLY@18..19 "}" WHITESPACE@19..20 "\n" diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0079_impl_def.rast b/crates/ra_syntax/test_data/parser/inline/ok/0079_impl_def.rast index a00ab40f93..26825ef860 100644 --- a/crates/ra_syntax/test_data/parser/inline/ok/0079_impl_def.rast +++ b/crates/ra_syntax/test_data/parser/inline/ok/0079_impl_def.rast @@ -8,7 +8,7 @@ SOURCE_FILE@0..12 NAME_REF@5..8 IDENT@5..8 "Foo" WHITESPACE@8..9 " " - ITEM_LIST@9..11 + ASSOC_ITEM_LIST@9..11 L_CURLY@9..10 "{" R_CURLY@10..11 "}" WHITESPACE@11..12 "\n" diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0087_unsafe_impl.rast b/crates/ra_syntax/test_data/parser/inline/ok/0087_unsafe_impl.rast index 01ed3afca4..e3223cee58 100644 --- a/crates/ra_syntax/test_data/parser/inline/ok/0087_unsafe_impl.rast +++ b/crates/ra_syntax/test_data/parser/inline/ok/0087_unsafe_impl.rast @@ -10,7 +10,7 @@ SOURCE_FILE@0..19 NAME_REF@12..15 IDENT@12..15 "Foo" WHITESPACE@15..16 " " - ITEM_LIST@16..18 + ASSOC_ITEM_LIST@16..18 L_CURLY@16..17 "{" R_CURLY@17..18 "}" WHITESPACE@18..19 "\n" diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0091_auto_trait.rast b/crates/ra_syntax/test_data/parser/inline/ok/0091_auto_trait.rast index 800412cef7..7efa4c34dd 100644 --- a/crates/ra_syntax/test_data/parser/inline/ok/0091_auto_trait.rast +++ b/crates/ra_syntax/test_data/parser/inline/ok/0091_auto_trait.rast @@ -7,7 +7,7 @@ SOURCE_FILE@0..16 NAME@11..12 IDENT@11..12 "T" WHITESPACE@12..13 " " - ITEM_LIST@13..15 + ASSOC_ITEM_LIST@13..15 L_CURLY@13..14 "{" R_CURLY@14..15 "}" WHITESPACE@15..16 "\n" diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0094_unsafe_auto_trait.rast b/crates/ra_syntax/test_data/parser/inline/ok/0094_unsafe_auto_trait.rast index 9370f6ae77..fad27be66a 100644 --- a/crates/ra_syntax/test_data/parser/inline/ok/0094_unsafe_auto_trait.rast +++ b/crates/ra_syntax/test_data/parser/inline/ok/0094_unsafe_auto_trait.rast @@ -9,7 +9,7 @@ SOURCE_FILE@0..23 NAME@18..19 IDENT@18..19 "T" WHITESPACE@19..20 " " - ITEM_LIST@20..22 + ASSOC_ITEM_LIST@20..22 L_CURLY@20..21 "{" R_CURLY@21..22 "}" WHITESPACE@22..23 "\n" diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0097_default_impl.rast b/crates/ra_syntax/test_data/parser/inline/ok/0097_default_impl.rast index 80bda4ba7e..8a839a4a6a 100644 --- a/crates/ra_syntax/test_data/parser/inline/ok/0097_default_impl.rast +++ b/crates/ra_syntax/test_data/parser/inline/ok/0097_default_impl.rast @@ -10,7 +10,7 @@ SOURCE_FILE@0..20 NAME_REF@13..16 IDENT@13..16 "Foo" WHITESPACE@16..17 " " - ITEM_LIST@17..19 + ASSOC_ITEM_LIST@17..19 L_CURLY@17..18 "{" R_CURLY@18..19 "}" WHITESPACE@19..20 "\n" diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0118_impl_inner_attributes.rast b/crates/ra_syntax/test_data/parser/inline/ok/0118_impl_inner_attributes.rast index a65a5c85fc..ea54347fc4 100644 --- a/crates/ra_syntax/test_data/parser/inline/ok/0118_impl_inner_attributes.rast +++ b/crates/ra_syntax/test_data/parser/inline/ok/0118_impl_inner_attributes.rast @@ -17,7 +17,7 @@ SOURCE_FILE@0..94 NAME_REF@14..15 IDENT@14..15 "F" WHITESPACE@15..16 " " - ITEM_LIST@16..93 + ASSOC_ITEM_LIST@16..93 L_CURLY@16..17 "{" WHITESPACE@17..23 "\n " COMMENT@23..48 "//! This is a doc com ..." diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0132_default_fn_type.rast b/crates/ra_syntax/test_data/parser/inline/ok/0132_default_fn_type.rast index 00ce5ecf0d..3772cb64ba 100644 --- a/crates/ra_syntax/test_data/parser/inline/ok/0132_default_fn_type.rast +++ b/crates/ra_syntax/test_data/parser/inline/ok/0132_default_fn_type.rast @@ -16,7 +16,7 @@ SOURCE_FILE@0..69 NAME_REF@11..14 IDENT@11..14 "Foo" WHITESPACE@14..15 " " - ITEM_LIST@15..68 + ASSOC_ITEM_LIST@15..68 L_CURLY@15..16 "{" WHITESPACE@16..21 "\n " TYPE_ALIAS_DEF@21..42 diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0150_impl_type_params.rast b/crates/ra_syntax/test_data/parser/inline/ok/0150_impl_type_params.rast index e70c3b710f..77e12cad60 100644 --- a/crates/ra_syntax/test_data/parser/inline/ok/0150_impl_type_params.rast +++ b/crates/ra_syntax/test_data/parser/inline/ok/0150_impl_type_params.rast @@ -32,7 +32,7 @@ SOURCE_FILE@0..29 IDENT@23..24 "N" R_ANGLE@24..25 ">" WHITESPACE@25..26 " " - ITEM_LIST@26..28 + ASSOC_ITEM_LIST@26..28 L_CURLY@26..27 "{" R_CURLY@27..28 "}" WHITESPACE@28..29 "\n" diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0163_default_unsafe_fn.rast b/crates/ra_syntax/test_data/parser/inline/ok/0163_default_unsafe_fn.rast index adb6159f47..c0b8c0300c 100644 --- a/crates/ra_syntax/test_data/parser/inline/ok/0163_default_unsafe_fn.rast +++ b/crates/ra_syntax/test_data/parser/inline/ok/0163_default_unsafe_fn.rast @@ -16,7 +16,7 @@ SOURCE_FILE@0..50 NAME_REF@11..14 IDENT@11..14 "Foo" WHITESPACE@14..15 " " - ITEM_LIST@15..49 + ASSOC_ITEM_LIST@15..49 L_CURLY@15..16 "{" WHITESPACE@16..21 "\n " FN_DEF@21..47 diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0163_default_unsafe_impl.rast b/crates/ra_syntax/test_data/parser/inline/ok/0163_default_unsafe_impl.rast index a9eda56681..e0c338297e 100644 --- a/crates/ra_syntax/test_data/parser/inline/ok/0163_default_unsafe_impl.rast +++ b/crates/ra_syntax/test_data/parser/inline/ok/0163_default_unsafe_impl.rast @@ -12,7 +12,7 @@ SOURCE_FILE@0..27 NAME_REF@20..23 IDENT@20..23 "Foo" WHITESPACE@23..24 " " - ITEM_LIST@24..26 + ASSOC_ITEM_LIST@24..26 L_CURLY@24..25 "{" R_CURLY@25..26 "}" WHITESPACE@26..27 "\n" diff --git a/crates/ra_syntax/test_data/parser/ok/0030_traits.rast b/crates/ra_syntax/test_data/parser/ok/0030_traits.rast index 0aadc11a49..63693de4f7 100644 --- a/crates/ra_syntax/test_data/parser/ok/0030_traits.rast +++ b/crates/ra_syntax/test_data/parser/ok/0030_traits.rast @@ -5,7 +5,7 @@ SOURCE_FILE@0..96 NAME@6..14 IDENT@6..14 "Runnable" WHITESPACE@14..15 " " - ITEM_LIST@15..36 + ASSOC_ITEM_LIST@15..36 L_CURLY@15..16 "{" WHITESPACE@16..21 "\n " FN_DEF@21..34 @@ -26,7 +26,7 @@ SOURCE_FILE@0..96 NAME@44..57 IDENT@44..57 "TraitWithExpr" WHITESPACE@57..58 " " - ITEM_LIST@58..95 + ASSOC_ITEM_LIST@58..95 L_CURLY@58..59 "{" WHITESPACE@59..64 "\n " FN_DEF@64..93 diff --git a/crates/ra_syntax/test_data/parser/ok/0042_ufcs_call_list.rast b/crates/ra_syntax/test_data/parser/ok/0042_ufcs_call_list.rast index 468982b74e..573edc0819 100644 --- a/crates/ra_syntax/test_data/parser/ok/0042_ufcs_call_list.rast +++ b/crates/ra_syntax/test_data/parser/ok/0042_ufcs_call_list.rast @@ -17,7 +17,7 @@ SOURCE_FILE@0..199 NAME_REF@80..83 IDENT@80..83 "Foo" WHITESPACE@83..84 " " - ITEM_LIST@84..141 + ASSOC_ITEM_LIST@84..141 L_CURLY@84..85 "{" WHITESPACE@85..90 "\n " FN_DEF@90..139 diff --git a/crates/ra_syntax/test_data/parser/ok/0045_block_inner_attrs.rast b/crates/ra_syntax/test_data/parser/ok/0045_block_inner_attrs.rast index e8b095251f..69aa0ba4d3 100644 --- a/crates/ra_syntax/test_data/parser/ok/0045_block_inner_attrs.rast +++ b/crates/ra_syntax/test_data/parser/ok/0045_block_inner_attrs.rast @@ -98,7 +98,7 @@ SOURCE_FILE@0..686 NAME_REF@529..537 IDENT@529..537 "Whatever" WHITESPACE@537..538 " " - ITEM_LIST@538..685 + ASSOC_ITEM_LIST@538..685 L_CURLY@538..539 "{" WHITESPACE@539..544 "\n " FN_DEF@544..683 diff --git a/crates/ra_syntax/test_data/parser/ok/0051_parameter_attrs.rast b/crates/ra_syntax/test_data/parser/ok/0051_parameter_attrs.rast index 816740a7cd..919c690de8 100644 --- a/crates/ra_syntax/test_data/parser/ok/0051_parameter_attrs.rast +++ b/crates/ra_syntax/test_data/parser/ok/0051_parameter_attrs.rast @@ -192,7 +192,7 @@ SOURCE_FILE@0..519 NAME@180..183 IDENT@180..183 "Foo" WHITESPACE@183..184 " " - ITEM_LIST@184..236 + ASSOC_ITEM_LIST@184..236 L_CURLY@184..185 "{" WHITESPACE@185..190 "\n " FN_DEF@190..234 @@ -260,7 +260,7 @@ SOURCE_FILE@0..519 NAME_REF@243..244 IDENT@243..244 "S" WHITESPACE@244..245 " " - ITEM_LIST@245..519 + ASSOC_ITEM_LIST@245..519 L_CURLY@245..246 "{" WHITESPACE@246..252 "\n " FN_DEF@252..277 diff --git a/crates/ra_syntax/test_data/parser/ok/0063_trait_fn_patterns.rast b/crates/ra_syntax/test_data/parser/ok/0063_trait_fn_patterns.rast index 886b211d01..40619b46e2 100644 --- a/crates/ra_syntax/test_data/parser/ok/0063_trait_fn_patterns.rast +++ b/crates/ra_syntax/test_data/parser/ok/0063_trait_fn_patterns.rast @@ -5,7 +5,7 @@ SOURCE_FILE@0..170 NAME@6..7 IDENT@6..7 "T" WHITESPACE@7..8 " " - ITEM_LIST@8..169 + ASSOC_ITEM_LIST@8..169 L_CURLY@8..9 "{" WHITESPACE@9..14 "\n " FN_DEF@14..46 diff --git a/crates/ra_syntax/test_data/parser/ok/0064_impl_fn_params.rast b/crates/ra_syntax/test_data/parser/ok/0064_impl_fn_params.rast index a0423806c4..7b026e33b0 100644 --- a/crates/ra_syntax/test_data/parser/ok/0064_impl_fn_params.rast +++ b/crates/ra_syntax/test_data/parser/ok/0064_impl_fn_params.rast @@ -8,7 +8,7 @@ SOURCE_FILE@0..137 NAME_REF@5..6 IDENT@5..6 "U" WHITESPACE@6..7 " " - ITEM_LIST@7..136 + ASSOC_ITEM_LIST@7..136 L_CURLY@7..8 "{" WHITESPACE@8..13 "\n " FN_DEF@13..45 diff --git a/crates/ra_syntax/test_data/parser/ok/0066_default_const.rast b/crates/ra_syntax/test_data/parser/ok/0066_default_const.rast index dab0247ee6..584b2faf10 100644 --- a/crates/ra_syntax/test_data/parser/ok/0066_default_const.rast +++ b/crates/ra_syntax/test_data/parser/ok/0066_default_const.rast @@ -16,7 +16,7 @@ SOURCE_FILE@0..46 NAME_REF@11..14 IDENT@11..14 "Foo" WHITESPACE@14..15 " " - ITEM_LIST@15..45 + ASSOC_ITEM_LIST@15..45 L_CURLY@15..16 "{" WHITESPACE@16..19 "\n " CONST_DEF@19..43 From 7d09e5ed618b9b9d6e00b57b24db0b9c8a8c12d7 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Thu, 30 Jul 2020 11:44:22 +0200 Subject: [PATCH 3/3] Finish Module grammar --- crates/ra_syntax/src/ast/generated/nodes.rs | 1 + xtask/src/codegen/rust.ungram | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/crates/ra_syntax/src/ast/generated/nodes.rs b/crates/ra_syntax/src/ast/generated/nodes.rs index 7ccb7ea7fa..fbf3b457a9 100644 --- a/crates/ra_syntax/src/ast/generated/nodes.rs +++ b/crates/ra_syntax/src/ast/generated/nodes.rs @@ -248,6 +248,7 @@ impl Name { pub struct ItemList { pub(crate) syntax: SyntaxNode, } +impl ast::AttrsOwner for ItemList {} impl ast::ModuleItemOwner for ItemList {} impl ItemList { pub fn l_curly_token(&self) -> Option { support::token(&self.syntax, T!['{']) } diff --git a/xtask/src/codegen/rust.ungram b/xtask/src/codegen/rust.ungram index d0518ceadf..470ac8c8ff 100644 --- a/xtask/src/codegen/rust.ungram +++ b/xtask/src/codegen/rust.ungram @@ -24,7 +24,7 @@ Module = (ItemList | ';') ItemList = - '{' Item* '}' + '{' Attr* Item* '}' FnDef = Attr* Visibility? Abi? 'const' 'default' 'async' 'unsafe' 'fn' Name TypeParamList?