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.rs20
1 files changed, 7 insertions, 13 deletions
diff --git a/crates/ra_hir/src/expr.rs b/crates/ra_hir/src/expr.rs
index dd2bae9b4..ddf605111 100644
--- a/crates/ra_hir/src/expr.rs
+++ b/crates/ra_hir/src/expr.rs
@@ -22,8 +22,6 @@ pub use hir_def::expr::{
22/// The body of an item (function, const etc.). 22/// The body of an item (function, const etc.).
23#[derive(Debug, Eq, PartialEq)] 23#[derive(Debug, Eq, PartialEq)]
24pub struct Body { 24pub struct Body {
25 /// The def of the item this body belongs to
26 owner: DefWithBody,
27 exprs: Arena<ExprId, Expr>, 25 exprs: Arena<ExprId, Expr>,
28 pats: Arena<PatId, Pat>, 26 pats: Arena<PatId, Pat>,
29 /// The patterns for the function's parameters. While the parameter types are 27 /// The patterns for the function's parameters. While the parameter types are
@@ -86,7 +84,7 @@ impl Body {
86 } 84 }
87 }; 85 };
88 86
89 let (body, source_map) = lower::lower(db, def.resolver(db), file_id, def, params, body); 87 let (body, source_map) = lower::lower(db, def.resolver(db), file_id, params, body);
90 (Arc::new(body), Arc::new(source_map)) 88 (Arc::new(body), Arc::new(source_map))
91 } 89 }
92 90
@@ -102,10 +100,6 @@ impl Body {
102 self.body_expr 100 self.body_expr
103 } 101 }
104 102
105 pub fn owner(&self) -> DefWithBody {
106 self.owner
107 }
108
109 pub fn exprs(&self) -> impl Iterator<Item = (ExprId, &Expr)> { 103 pub fn exprs(&self) -> impl Iterator<Item = (ExprId, &Expr)> {
110 self.exprs.iter() 104 self.exprs.iter()
111 } 105 }
@@ -117,21 +111,21 @@ impl Body {
117 111
118// needs arbitrary_self_types to be a method... or maybe move to the def? 112// needs arbitrary_self_types to be a method... or maybe move to the def?
119pub(crate) fn resolver_for_expr( 113pub(crate) fn resolver_for_expr(
120 body: Arc<Body>,
121 db: &impl HirDatabase, 114 db: &impl HirDatabase,
115 owner: DefWithBody,
122 expr_id: ExprId, 116 expr_id: ExprId,
123) -> Resolver { 117) -> Resolver {
124 let scopes = db.expr_scopes(body.owner); 118 let scopes = db.expr_scopes(owner);
125 resolver_for_scope(body, db, scopes.scope_for(expr_id)) 119 resolver_for_scope(db, owner, scopes.scope_for(expr_id))
126} 120}
127 121
128pub(crate) fn resolver_for_scope( 122pub(crate) fn resolver_for_scope(
129 body: Arc<Body>,
130 db: &impl HirDatabase, 123 db: &impl HirDatabase,
124 owner: DefWithBody,
131 scope_id: Option<scope::ScopeId>, 125 scope_id: Option<scope::ScopeId>,
132) -> Resolver { 126) -> Resolver {
133 let mut r = body.owner.resolver(db); 127 let mut r = owner.resolver(db);
134 let scopes = db.expr_scopes(body.owner); 128 let scopes = db.expr_scopes(owner);
135 let scope_chain = scopes.scope_chain(scope_id).collect::<Vec<_>>(); 129 let scope_chain = scopes.scope_chain(scope_id).collect::<Vec<_>>();
136 for scope in scope_chain.into_iter().rev() { 130 for scope in scope_chain.into_iter().rev() {
137 r = r.push_expr_scope(Arc::clone(&scopes), scope); 131 r = r.push_expr_scope(Arc::clone(&scopes), scope);