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.rs18
1 files changed, 15 insertions, 3 deletions
diff --git a/crates/ra_hir/src/expr.rs b/crates/ra_hir/src/expr.rs
index 503a09f25..6c294bf10 100644
--- a/crates/ra_hir/src/expr.rs
+++ b/crates/ra_hir/src/expr.rs
@@ -72,11 +72,23 @@ impl Body {
72} 72}
73 73
74// needs arbitrary_self_types to be a method... or maybe move to the def? 74// needs arbitrary_self_types to be a method... or maybe move to the def?
75#[allow(dead_code)] 75pub fn resolver_for_expr(
76pub fn resolver_for_expr(body: Arc<Body>, db: &impl HirDatabase, expr_id: ExprId) -> Resolver { 76 body: Arc<Body>,
77 db: &impl HirDatabase,
78 expr_id: ExprId,
79) -> Resolver<'static> {
80 let scopes = db.expr_scopes(body.owner);
81 resolver_for_scope(body, db, scopes.scope_for(expr_id))
82}
83
84pub fn resolver_for_scope(
85 body: Arc<Body>,
86 db: &impl HirDatabase,
87 scope_id: Option<scope::ScopeId>,
88) -> Resolver<'static> {
77 let mut r = body.owner.resolver(db); 89 let mut r = body.owner.resolver(db);
78 let scopes = db.expr_scopes(body.owner); 90 let scopes = db.expr_scopes(body.owner);
79 let scope_chain = scopes.scope_chain_for(expr_id).collect::<Vec<_>>(); 91 let scope_chain = scopes.scope_chain_for(scope_id).collect::<Vec<_>>();
80 for scope in scope_chain.into_iter().rev() { 92 for scope in scope_chain.into_iter().rev() {
81 r = r.push_expr_scope(Arc::clone(&scopes), scope); 93 r = r.push_expr_scope(Arc::clone(&scopes), scope);
82 } 94 }