From ac216880f5d1a3e5727b96d7b22433beec10382b Mon Sep 17 00:00:00 2001 From: Marcus Klaas de Vries Date: Thu, 17 Jan 2019 00:08:10 +0100 Subject: Implement unlabeled struct field pattern inference --- crates/ra_hir/src/expr.rs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'crates/ra_hir/src/expr.rs') diff --git a/crates/ra_hir/src/expr.rs b/crates/ra_hir/src/expr.rs index 893bad9cd..e7235c1a1 100644 --- a/crates/ra_hir/src/expr.rs +++ b/crates/ra_hir/src/expr.rs @@ -332,7 +332,7 @@ impl_arena_id!(PatId); #[derive(Debug, Clone, Eq, PartialEq)] pub struct FieldPat { pub(crate) name: Name, - pub(crate) pat: Option, + pub(crate) pat: PatId, } /// Close relative to rustc's hir::PatKind @@ -393,7 +393,7 @@ impl Pat { total_iter.map(|pat| *pat).for_each(f); } Pat::Struct { args, .. } => { - args.iter().filter_map(|a| a.pat).for_each(f); + args.iter().map(|f| f.pat).for_each(f); } } } @@ -821,9 +821,10 @@ impl ExprCollector { .expect("every struct should have a field list") .field_pats() .into_iter() - .map(|f| FieldPat { - name: Name::new(f.ident), - pat: f.pat.as_ref().map(|p| self.collect_pat(p)), + .map(|f| { + let name = Name::new(f.ident); + let pat = self.collect_pat(&*f.pat); + FieldPat { name, pat } }) .collect(); -- cgit v1.2.3