From 8e554ea5faa1158e084462162d5e1932db5c81c2 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sun, 13 Jan 2019 13:34:57 +0300 Subject: support ref-patterns --- crates/ra_hir/src/expr.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (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 67e123e4d..593fe1598 100644 --- a/crates/ra_hir/src/expr.rs +++ b/crates/ra_hir/src/expr.rs @@ -315,15 +315,20 @@ pub enum Pat { path: Option, args: Vec, }, + Ref { + pat: PatId, + mutability: Mutability, + }, } impl Pat { - pub fn walk_child_pats(&self, f: impl FnMut(PatId)) { + pub fn walk_child_pats(&self, mut f: impl FnMut(PatId)) { match self { Pat::Missing | Pat::Bind { .. } => {} Pat::TupleStruct { args, .. } => { args.iter().map(|pat| *pat).for_each(f); } + Pat::Ref { pat, .. } => f(*pat), } } } @@ -684,6 +689,11 @@ impl ExprCollector { let args = p.args().map(|p| self.collect_pat(p)).collect(); self.alloc_pat(Pat::TupleStruct { path, args }, syntax_ptr) } + ast::PatKind::RefPat(p) => { + let pat = self.collect_pat_opt(p.pat()); + let mutability = Mutability::from_mutable(p.is_mut()); + self.alloc_pat(Pat::Ref { pat, mutability }, syntax_ptr) + } _ => { // TODO self.alloc_pat(Pat::Missing, syntax_ptr) -- cgit v1.2.3