aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/code_model_api.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir/src/code_model_api.rs')
-rw-r--r--crates/ra_hir/src/code_model_api.rs22
1 files changed, 20 insertions, 2 deletions
diff --git a/crates/ra_hir/src/code_model_api.rs b/crates/ra_hir/src/code_model_api.rs
index 73541a8c3..b8ca04c5c 100644
--- a/crates/ra_hir/src/code_model_api.rs
+++ b/crates/ra_hir/src/code_model_api.rs
@@ -184,9 +184,9 @@ impl Module {
184 self.problems_impl(db) 184 self.problems_impl(db)
185 } 185 }
186 186
187 #[allow(unused_variables)]
188 pub fn resolver(&self, db: &impl HirDatabase) -> Resolver { 187 pub fn resolver(&self, db: &impl HirDatabase) -> Resolver {
189 unimplemented!() 188 let item_map = db.item_map(self.krate);
189 Resolver::default().push_module_scope(item_map, self.module_id)
190 } 190 }
191} 191}
192 192
@@ -480,6 +480,24 @@ impl Function {
480 pub fn generic_params(&self, db: &impl PersistentHirDatabase) -> Arc<GenericParams> { 480 pub fn generic_params(&self, db: &impl PersistentHirDatabase) -> Arc<GenericParams> {
481 db.generic_params((*self).into()) 481 db.generic_params((*self).into())
482 } 482 }
483
484 // TODO move to a more general type for 'body-having' items
485 /// Builds a resolver for code inside this item.
486 pub fn resolver(&self, db: &impl HirDatabase) -> Resolver {
487 // take the outer scope...
488 let r = self
489 .impl_block(db)
490 .map(|ib| ib.resolver(db))
491 .unwrap_or_else(|| self.module(db).resolver(db));
492 // ...and add generic params, if present
493 let p = self.generic_params(db);
494 let r = if !p.params.is_empty() {
495 r.push_generic_params_scope(p)
496 } else {
497 r
498 };
499 r
500 }
483} 501}
484 502
485impl Docs for Function { 503impl Docs for Function {