From 675e86becfab2615528152487db49bce1b43bd60 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Fri, 31 Jul 2020 21:56:52 +0200 Subject: [PATCH 1/3] Section headers --- xtask/src/codegen/rust.ungram | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/xtask/src/codegen/rust.ungram b/xtask/src/codegen/rust.ungram index 02f5aa73202..b14801f2453 100644 --- a/xtask/src/codegen/rust.ungram +++ b/xtask/src/codegen/rust.ungram @@ -1,3 +1,7 @@ +//*************************// +// Names, Paths and Macros // +//*************************// + Name = 'ident' @@ -50,6 +54,10 @@ MacroStmts = statements:Stmt* Expr? +//*************************// +// Items // +//*************************// + SourceFile = 'shebang'? Attr* @@ -245,6 +253,10 @@ Visibility = Attr = '#' '!'? '[' Path ('=' Literal | TokenTree)? ']' +//****************************// +// Statements and Expressions // +//****************************// + Stmt = ExprStmt | Item @@ -434,6 +446,10 @@ AwaitExpr = BoxExpr = Attr* 'box' Expr +//*************************// +// Types // +//*************************// + Type = ArrayType | DynTraitType @@ -495,6 +511,10 @@ TypeBound = 'lifetime' | '?'? Type +//************************// +// Patterns // +//************************// + Pat = IdentPat | BoxPat From b9c6aa9ec9e491160a6ad7c5ec66151bd67b0ecd Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Fri, 31 Jul 2020 21:58:36 +0200 Subject: [PATCH 2/3] Unify naming of tuple fields --- crates/ra_assists/src/handlers/early_return.rs | 4 ++-- crates/ra_hir_def/src/body/lower.rs | 6 +++--- crates/ra_syntax/src/ast/generated/nodes.rs | 8 ++++---- crates/ra_syntax/src/ast/node_ext.rs | 2 +- xtask/src/codegen/rust.ungram | 8 ++++---- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/crates/ra_assists/src/handlers/early_return.rs b/crates/ra_assists/src/handlers/early_return.rs index 3650289fd64..69852b61161 100644 --- a/crates/ra_assists/src/handlers/early_return.rs +++ b/crates/ra_assists/src/handlers/early_return.rs @@ -51,11 +51,11 @@ pub(crate) fn convert_to_guarded_return(acc: &mut Assists, ctx: &AssistContext) // Check if there is an IfLet that we can handle. let if_let_pat = match cond.pat() { None => None, // No IfLet, supported. - Some(ast::Pat::TupleStructPat(pat)) if pat.args().count() == 1 => { + Some(ast::Pat::TupleStructPat(pat)) if pat.fields().count() == 1 => { let path = pat.path()?; match path.qualifier() { None => { - let bound_ident = pat.args().next().unwrap(); + let bound_ident = pat.fields().next().unwrap(); Some((path, bound_ident)) } Some(_) => return None, diff --git a/crates/ra_hir_def/src/body/lower.rs b/crates/ra_hir_def/src/body/lower.rs index 0d0365370d8..9d6562c38c0 100644 --- a/crates/ra_hir_def/src/body/lower.rs +++ b/crates/ra_hir_def/src/body/lower.rs @@ -496,7 +496,7 @@ fn collect_expr(&mut self, expr: ast::Expr) -> ExprId { self.alloc_expr(Expr::BinaryOp { lhs, rhs, op }, syntax_ptr) } ast::Expr::TupleExpr(e) => { - let exprs = e.exprs().map(|expr| self.collect_expr(expr)).collect(); + let exprs = e.fields().map(|expr| self.collect_expr(expr)).collect(); self.alloc_expr(Expr::Tuple { exprs }, syntax_ptr) } ast::Expr::BoxExpr(e) => { @@ -762,7 +762,7 @@ fn collect_pat(&mut self, pat: ast::Pat) -> PatId { } ast::Pat::TupleStructPat(p) => { let path = p.path().and_then(|path| self.expander.parse_path(path)); - let (args, ellipsis) = self.collect_tuple_pat(p.args()); + let (args, ellipsis) = self.collect_tuple_pat(p.fields()); Pat::TupleStruct { path, args, ellipsis } } ast::Pat::RefPat(p) => { @@ -780,7 +780,7 @@ fn collect_pat(&mut self, pat: ast::Pat) -> PatId { } ast::Pat::ParenPat(p) => return self.collect_pat_opt(p.pat()), ast::Pat::TuplePat(p) => { - let (args, ellipsis) = self.collect_tuple_pat(p.args()); + let (args, ellipsis) = self.collect_tuple_pat(p.fields()); Pat::Tuple { args, ellipsis } } ast::Pat::WildcardPat(_) => Pat::Wild, diff --git a/crates/ra_syntax/src/ast/generated/nodes.rs b/crates/ra_syntax/src/ast/generated/nodes.rs index 6cb637b1d14..5f51c7536a5 100644 --- a/crates/ra_syntax/src/ast/generated/nodes.rs +++ b/crates/ra_syntax/src/ast/generated/nodes.rs @@ -893,7 +893,7 @@ pub struct TupleExpr { impl ast::AttrsOwner for TupleExpr {} impl TupleExpr { pub fn l_paren_token(&self) -> Option { support::token(&self.syntax, T!['(']) } - pub fn exprs(&self) -> AstChildren { support::children(&self.syntax) } + pub fn fields(&self) -> AstChildren { support::children(&self.syntax) } pub fn r_paren_token(&self) -> Option { support::token(&self.syntax, T![')']) } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] @@ -1210,7 +1210,7 @@ pub struct SlicePat { } impl SlicePat { pub fn l_brack_token(&self) -> Option { support::token(&self.syntax, T!['[']) } - pub fn args(&self) -> AstChildren { support::children(&self.syntax) } + pub fn pats(&self) -> AstChildren { support::children(&self.syntax) } pub fn r_brack_token(&self) -> Option { support::token(&self.syntax, T![']']) } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] @@ -1219,7 +1219,7 @@ pub struct TuplePat { } impl TuplePat { pub fn l_paren_token(&self) -> Option { support::token(&self.syntax, T!['(']) } - pub fn args(&self) -> AstChildren { support::children(&self.syntax) } + pub fn fields(&self) -> AstChildren { support::children(&self.syntax) } pub fn r_paren_token(&self) -> Option { support::token(&self.syntax, T![')']) } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] @@ -1229,7 +1229,7 @@ pub struct TupleStructPat { impl TupleStructPat { pub fn path(&self) -> Option { support::child(&self.syntax) } pub fn l_paren_token(&self) -> Option { support::token(&self.syntax, T!['(']) } - pub fn args(&self) -> AstChildren { support::children(&self.syntax) } + pub fn fields(&self) -> AstChildren { support::children(&self.syntax) } pub fn r_paren_token(&self) -> Option { support::token(&self.syntax, T![')']) } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] diff --git a/crates/ra_syntax/src/ast/node_ext.rs b/crates/ra_syntax/src/ast/node_ext.rs index 2ffb83819d8..733e978772c 100644 --- a/crates/ra_syntax/src/ast/node_ext.rs +++ b/crates/ra_syntax/src/ast/node_ext.rs @@ -290,7 +290,7 @@ pub struct SlicePatComponents { impl ast::SlicePat { pub fn components(&self) -> SlicePatComponents { - let mut args = self.args().peekable(); + let mut args = self.pats().peekable(); let prefix = args .peeking_take_while(|p| match p { ast::Pat::RestPat(_) => false, diff --git a/xtask/src/codegen/rust.ungram b/xtask/src/codegen/rust.ungram index b14801f2453..aca23890c6d 100644 --- a/xtask/src/codegen/rust.ungram +++ b/xtask/src/codegen/rust.ungram @@ -359,7 +359,7 @@ IndexExpr = Attr* base:Expr '[' index:Expr ']' TupleExpr = - Attr* '(' Attr* (Expr (',' Expr)* ','?)? ')' + Attr* '(' Attr* fields:(Expr (',' Expr)* ','?)? ')' RecordExpr = Path RecordExprFieldList @@ -560,16 +560,16 @@ RecordPatField = Attr* (NameRef ':')? Pat TupleStructPat = - Path '(' args:(Pat (',' Pat)* ','?)? ')' + Path '(' fields:(Pat (',' Pat)* ','?)? ')' TuplePat = - '(' args:(Pat (',' Pat)* ','?)? ')' + '(' fields:(Pat (',' Pat)* ','?)? ')' ParenPat = '(' Pat ')' SlicePat = - '[' args:(Pat (',' Pat)* ','?)? ']' + '[' (Pat (',' Pat)* ','?)? ']' PathPat = Path From 8cf19847ddbcbbe1c1bb634dfc4a61ab75ec941d Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Fri, 31 Jul 2020 21:59:40 +0200 Subject: [PATCH 3/3] Finish rename --- crates/ra_hir_def/src/body/lower.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/ra_hir_def/src/body/lower.rs b/crates/ra_hir_def/src/body/lower.rs index 9d6562c38c0..f5c37edb30a 100644 --- a/crates/ra_hir_def/src/body/lower.rs +++ b/crates/ra_hir_def/src/body/lower.rs @@ -809,7 +809,7 @@ fn collect_pat(&mut self, pat: ast::Pat) -> PatId { ast::Pat::SlicePat(p) => { let SlicePatComponents { prefix, slice, suffix } = p.components(); - // FIXME properly handle `DotDotPat` + // FIXME properly handle `RestPat` Pat::Slice { prefix: prefix.into_iter().map(|p| self.collect_pat(p)).collect(), slice: slice.map(|p| self.collect_pat(p)), @@ -827,9 +827,9 @@ fn collect_pat(&mut self, pat: ast::Pat) -> PatId { } } ast::Pat::RestPat(_) => { - // `DotDotPat` requires special handling and should not be mapped + // `RestPat` requires special handling and should not be mapped // to a Pat. Here we are using `Pat::Missing` as a fallback for - // when `DotDotPat` is mapped to `Pat`, which can easily happen + // when `RestPat` is mapped to `Pat`, which can easily happen // when the source code being analyzed has a malformed pattern // which includes `..` in a place where it isn't valid.