aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/expr.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir/src/expr.rs')
-rw-r--r--crates/ra_hir/src/expr.rs12
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};
17use crate::ty::primitive::{UintTy, UncertainIntTy, UncertainFloatTy}; 17use crate::ty::primitive::{UintTy, UncertainIntTy, UncertainFloatTy};
18 18
19pub use self::scope::{ExprScopes, ScopesWithSyntaxMapping, ScopeEntryWithSyntax};
20
21mod scope;
22
19#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] 23#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
20pub struct ExprId(RawId); 24pub struct ExprId(RawId);
21impl_arena_id!(ExprId); 25impl_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)]
216pub struct MatchArm { 220pub 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 {