diff options
Diffstat (limited to 'crates/ra_hir/src/expr.rs')
-rw-r--r-- | crates/ra_hir/src/expr.rs | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/crates/ra_hir/src/expr.rs b/crates/ra_hir/src/expr.rs index 4e61d87ff..b30e11abb 100644 --- a/crates/ra_hir/src/expr.rs +++ b/crates/ra_hir/src/expr.rs | |||
@@ -831,18 +831,18 @@ impl ExprCollector { | |||
831 | p.field_pat_list().expect("every struct should have a field list"); | 831 | p.field_pat_list().expect("every struct should have a field list"); |
832 | let mut fields: Vec<_> = field_pat_list | 832 | let mut fields: Vec<_> = field_pat_list |
833 | .bind_pats() | 833 | .bind_pats() |
834 | .map(|bind_pat| { | 834 | .filter_map(|bind_pat| { |
835 | let ast_pat = ast::Pat::cast(bind_pat.syntax()).expect("bind pat is a pat"); | 835 | let ast_pat = ast::Pat::cast(bind_pat.syntax()).expect("bind pat is a pat"); |
836 | let pat = self.collect_pat(ast_pat); | 836 | let pat = self.collect_pat(ast_pat); |
837 | let name = bind_pat.name().expect("bind pat has a name").as_name(); | 837 | let name = bind_pat.name()?.as_name(); |
838 | FieldPat { name, pat } | 838 | Some(FieldPat { name, pat }) |
839 | }) | 839 | }) |
840 | .collect(); | 840 | .collect(); |
841 | let iter = field_pat_list.field_pats().map(|f| { | 841 | let iter = field_pat_list.field_pats().filter_map(|f| { |
842 | let ast_pat = f.pat().expect("field pat always contains a pattern"); | 842 | let ast_pat = f.pat()?; |
843 | let pat = self.collect_pat(ast_pat); | 843 | let pat = self.collect_pat(ast_pat); |
844 | let name = f.name().expect("field pats always have a name").as_name(); | 844 | let name = f.name()?.as_name(); |
845 | FieldPat { name, pat } | 845 | Some(FieldPat { name, pat }) |
846 | }); | 846 | }); |
847 | fields.extend(iter); | 847 | fields.extend(iter); |
848 | 848 | ||
@@ -850,6 +850,7 @@ impl ExprCollector { | |||
850 | } | 850 | } |
851 | 851 | ||
852 | // TODO: implement | 852 | // TODO: implement |
853 | ast::PatKind::LiteralPat(_) => Pat::Missing, | ||
853 | ast::PatKind::SlicePat(_) | ast::PatKind::RangePat(_) => Pat::Missing, | 854 | ast::PatKind::SlicePat(_) | ast::PatKind::RangePat(_) => Pat::Missing, |
854 | }; | 855 | }; |
855 | let syntax_ptr = SyntaxNodePtr::new(pat.syntax()); | 856 | let syntax_ptr = SyntaxNodePtr::new(pat.syntax()); |