diff options
Diffstat (limited to 'crates/ra_hir_def/src/body/scope.rs')
-rw-r--r-- | crates/ra_hir_def/src/body/scope.rs | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/crates/ra_hir_def/src/body/scope.rs b/crates/ra_hir_def/src/body/scope.rs index 4d489f692..5b36a7cc1 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 | } |
@@ -321,8 +325,11 @@ mod tests { | |||
321 | let resolved = scopes.resolve_name_in_scope(expr_scope, &name_ref.as_name()).unwrap(); | 325 | let resolved = scopes.resolve_name_in_scope(expr_scope, &name_ref.as_name()).unwrap(); |
322 | let pat_src = source_map.pat_syntax(resolved.pat()).unwrap(); | 326 | let pat_src = source_map.pat_syntax(resolved.pat()).unwrap(); |
323 | 327 | ||
324 | let local_name = pat_src.value.either(|it| it.syntax_node_ptr(), |it| it.syntax_node_ptr()); | 328 | let local_name = pat_src.value.either( |
325 | assert_eq!(local_name.range(), expected_name.syntax().text_range()); | 329 | |it| it.syntax_node_ptr().to_node(file.syntax()), |
330 | |it| it.syntax_node_ptr().to_node(file.syntax()), | ||
331 | ); | ||
332 | assert_eq!(local_name.text_range(), expected_name.syntax().text_range()); | ||
326 | } | 333 | } |
327 | 334 | ||
328 | #[test] | 335 | #[test] |