diff options
author | Aleksey Kladov <[email protected]> | 2020-04-18 21:16:04 +0100 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2020-04-18 21:16:04 +0100 |
commit | b79fd82559642f4fe504c0c382b86d57c666be1d (patch) | |
tree | 4c3f7ae6e5c7569f4759787f44718496e8a6f79a /crates/ra_hir_def | |
parent | fa2ea8f494d8434da705dc0e0f047f3bd7503af9 (diff) |
Correctly infer types in guard expressions
The root cause was that we forgot to add bindings from the arm to the
guard expression
closes #3980
Diffstat (limited to 'crates/ra_hir_def')
-rw-r--r-- | crates/ra_hir_def/src/body/scope.rs | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/crates/ra_hir_def/src/body/scope.rs b/crates/ra_hir_def/src/body/scope.rs index 4d489f692..fe4137176 100644 --- a/crates/ra_hir_def/src/body/scope.rs +++ b/crates/ra_hir_def/src/body/scope.rs | |||
@@ -157,6 +157,10 @@ fn compute_expr_scopes(expr: ExprId, body: &Body, scopes: &mut ExprScopes, scope | |||
157 | for arm in arms { | 157 | for arm in arms { |
158 | let scope = scopes.new_scope(scope); | 158 | let scope = scopes.new_scope(scope); |
159 | scopes.add_bindings(body, scope, arm.pat); | 159 | scopes.add_bindings(body, scope, arm.pat); |
160 | if let Some(guard) = arm.guard { | ||
161 | scopes.set_scope(guard, scope); | ||
162 | compute_expr_scopes(guard, body, scopes, scope); | ||
163 | } | ||
160 | scopes.set_scope(arm.expr, scope); | 164 | scopes.set_scope(arm.expr, scope); |
161 | compute_expr_scopes(arm.expr, body, scopes, scope); | 165 | compute_expr_scopes(arm.expr, body, scopes, scope); |
162 | } | 166 | } |