aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/code_model_api.rs
diff options
context:
space:
mode:
authorFlorian Diebold <[email protected]>2019-01-26 21:52:04 +0000
committerFlorian Diebold <[email protected]>2019-02-01 21:45:23 +0000
commit6b076f1931d7dc324d7bbbc4c1df9f7c1c1db8b7 (patch)
tree131f12f5b0c9ea0ea499b8d4e9ff0c5112192352 /crates/ra_hir/src/code_model_api.rs
parent758bc72873efe36f579236d1abf240d14866fd82 (diff)
Use new Resolver API in type inference
Diffstat (limited to 'crates/ra_hir/src/code_model_api.rs')
-rw-r--r--crates/ra_hir/src/code_model_api.rs39
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};
5use ra_syntax::{ast::self, TreeArc, SyntaxNode}; 5use ra_syntax::{ast::self, TreeArc, SyntaxNode};
6 6
7use crate::{ 7use 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
294impl Docs for Struct { 304impl 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
343impl Docs for Enum { 368impl Docs for Enum {