diff options
Diffstat (limited to 'crates/ra_hir/src/code_model_api.rs')
-rw-r--r-- | crates/ra_hir/src/code_model_api.rs | 39 |
1 files changed, 32 insertions, 7 deletions
diff --git a/crates/ra_hir/src/code_model_api.rs b/crates/ra_hir/src/code_model_api.rs index b8ca04c5c..92ab0f692 100644 --- a/crates/ra_hir/src/code_model_api.rs +++ b/crates/ra_hir/src/code_model_api.rs | |||
@@ -5,7 +5,7 @@ use ra_db::{CrateId, FileId}; | |||
5 | use ra_syntax::{ast::self, TreeArc, SyntaxNode}; | 5 | use ra_syntax::{ast::self, TreeArc, SyntaxNode}; |
6 | 6 | ||
7 | use crate::{ | 7 | use crate::{ |
8 | Name, Path, PerNs, ScopesWithSyntaxMapping, Ty, HirFileId, | 8 | Name, ScopesWithSyntaxMapping, Ty, HirFileId, |
9 | type_ref::TypeRef, | 9 | type_ref::TypeRef, |
10 | nameres::{ModuleScope, lower::ImportId}, | 10 | nameres::{ModuleScope, lower::ImportId}, |
11 | HirDatabase, PersistentHirDatabase, | 11 | HirDatabase, PersistentHirDatabase, |
@@ -175,18 +175,13 @@ impl Module { | |||
175 | db.item_map(self.krate)[self.module_id].clone() | 175 | db.item_map(self.krate)[self.module_id].clone() |
176 | } | 176 | } |
177 | 177 | ||
178 | pub fn resolve_path(&self, db: &impl PersistentHirDatabase, path: &Path) -> PerNs<ModuleDef> { | ||
179 | // TODO replace by Resolver::resolve_path | ||
180 | db.item_map(self.krate).resolve_path(db, *self, path) | ||
181 | } | ||
182 | |||
183 | pub fn problems(&self, db: &impl HirDatabase) -> Vec<(TreeArc<SyntaxNode>, Problem)> { | 178 | pub fn problems(&self, db: &impl HirDatabase) -> Vec<(TreeArc<SyntaxNode>, Problem)> { |
184 | self.problems_impl(db) | 179 | self.problems_impl(db) |
185 | } | 180 | } |
186 | 181 | ||
187 | pub fn resolver(&self, db: &impl HirDatabase) -> Resolver { | 182 | pub fn resolver(&self, db: &impl HirDatabase) -> Resolver { |
188 | let item_map = db.item_map(self.krate); | 183 | let item_map = db.item_map(self.krate); |
189 | Resolver::default().push_module_scope(item_map, self.module_id) | 184 | Resolver::default().push_module_scope(item_map, *self) |
190 | } | 185 | } |
191 | } | 186 | } |
192 | 187 | ||
@@ -289,6 +284,21 @@ impl Struct { | |||
289 | pub fn ty(&self, db: &impl HirDatabase) -> Ty { | 284 | pub fn ty(&self, db: &impl HirDatabase) -> Ty { |
290 | db.type_for_def((*self).into()) | 285 | db.type_for_def((*self).into()) |
291 | } | 286 | } |
287 | |||
288 | // TODO move to a more general type | ||
289 | /// Builds a resolver for type references inside this struct. | ||
290 | pub fn resolver(&self, db: &impl HirDatabase) -> Resolver { | ||
291 | // take the outer scope... | ||
292 | let r = self.module(db).resolver(db); | ||
293 | // ...and add generic params, if present | ||
294 | let p = self.generic_params(db); | ||
295 | let r = if !p.params.is_empty() { | ||
296 | r.push_generic_params_scope(p) | ||
297 | } else { | ||
298 | r | ||
299 | }; | ||
300 | r | ||
301 | } | ||
292 | } | 302 | } |
293 | 303 | ||
294 | impl Docs for Struct { | 304 | impl Docs for Struct { |
@@ -338,6 +348,21 @@ impl Enum { | |||
338 | pub fn ty(&self, db: &impl HirDatabase) -> Ty { | 348 | pub fn ty(&self, db: &impl HirDatabase) -> Ty { |
339 | db.type_for_def((*self).into()) | 349 | db.type_for_def((*self).into()) |
340 | } | 350 | } |
351 | |||
352 | // TODO move to a more general type | ||
353 | /// Builds a resolver for type references inside this struct. | ||
354 | pub fn resolver(&self, db: &impl HirDatabase) -> Resolver { | ||
355 | // take the outer scope... | ||
356 | let r = self.module(db).resolver(db); | ||
357 | // ...and add generic params, if present | ||
358 | let p = self.generic_params(db); | ||
359 | let r = if !p.params.is_empty() { | ||
360 | r.push_generic_params_scope(p) | ||
361 | } else { | ||
362 | r | ||
363 | }; | ||
364 | r | ||
365 | } | ||
341 | } | 366 | } |
342 | 367 | ||
343 | impl Docs for Enum { | 368 | impl Docs for Enum { |