diff options
Diffstat (limited to 'crates/ra_hir/src/expr.rs')
-rw-r--r-- | crates/ra_hir/src/expr.rs | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/crates/ra_hir/src/expr.rs b/crates/ra_hir/src/expr.rs index 60d997bbe..37aa24677 100644 --- a/crates/ra_hir/src/expr.rs +++ b/crates/ra_hir/src/expr.rs | |||
@@ -16,6 +16,10 @@ use crate::{ | |||
16 | }; | 16 | }; |
17 | use crate::ty::primitive::{UintTy, UncertainIntTy, UncertainFloatTy}; | 17 | use crate::ty::primitive::{UintTy, UncertainIntTy, UncertainFloatTy}; |
18 | 18 | ||
19 | pub use self::scope::{ExprScopes, ScopesWithSyntaxMapping, ScopeEntryWithSyntax}; | ||
20 | |||
21 | mod scope; | ||
22 | |||
19 | #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] | 23 | #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] |
20 | pub struct ExprId(RawId); | 24 | pub struct ExprId(RawId); |
21 | impl_arena_id!(ExprId); | 25 | impl_arena_id!(ExprId); |
@@ -215,7 +219,7 @@ pub use ra_syntax::ast::BinOp as BinaryOp; | |||
215 | #[derive(Debug, Clone, Eq, PartialEq)] | 219 | #[derive(Debug, Clone, Eq, PartialEq)] |
216 | pub struct MatchArm { | 220 | pub struct MatchArm { |
217 | pub pats: Vec<PatId>, | 221 | pub pats: Vec<PatId>, |
218 | // guard: Option<ExprId>, // TODO | 222 | pub guard: Option<ExprId>, |
219 | pub expr: ExprId, | 223 | pub expr: ExprId, |
220 | } | 224 | } |
221 | 225 | ||
@@ -511,10 +515,12 @@ impl ExprCollector { | |||
511 | MatchArm { | 515 | MatchArm { |
512 | pats: vec![pat], | 516 | pats: vec![pat], |
513 | expr: then_branch, | 517 | expr: then_branch, |
518 | guard: None, | ||
514 | }, | 519 | }, |
515 | MatchArm { | 520 | MatchArm { |
516 | pats: vec![placeholder_pat], | 521 | pats: vec![placeholder_pat], |
517 | expr: else_branch, | 522 | expr: else_branch, |
523 | guard: None, | ||
518 | }, | 524 | }, |
519 | ]; | 525 | ]; |
520 | self.alloc_expr( | 526 | self.alloc_expr( |
@@ -613,6 +619,10 @@ impl ExprCollector { | |||
613 | .map(|arm| MatchArm { | 619 | .map(|arm| MatchArm { |
614 | pats: arm.pats().map(|p| self.collect_pat(p)).collect(), | 620 | pats: arm.pats().map(|p| self.collect_pat(p)).collect(), |
615 | expr: self.collect_expr_opt(arm.expr()), | 621 | expr: self.collect_expr_opt(arm.expr()), |
622 | guard: arm | ||
623 | .guard() | ||
624 | .and_then(|guard| guard.expr()) | ||
625 | .map(|e| self.collect_expr(e)), | ||
616 | }) | 626 | }) |
617 | .collect() | 627 | .collect() |
618 | } else { | 628 | } else { |