From 6b076f1931d7dc324d7bbbc4c1df9f7c1c1db8b7 Mon Sep 17 00:00:00 2001 From: Florian Diebold Date: Sat, 26 Jan 2019 22:52:04 +0100 Subject: Use new Resolver API in type inference --- crates/ra_hir/src/code_model_api.rs | 39 ++++++++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 7 deletions(-) (limited to 'crates/ra_hir/src/code_model_api.rs') 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}; use ra_syntax::{ast::self, TreeArc, SyntaxNode}; use crate::{ - Name, Path, PerNs, ScopesWithSyntaxMapping, Ty, HirFileId, + Name, ScopesWithSyntaxMapping, Ty, HirFileId, type_ref::TypeRef, nameres::{ModuleScope, lower::ImportId}, HirDatabase, PersistentHirDatabase, @@ -175,18 +175,13 @@ impl Module { db.item_map(self.krate)[self.module_id].clone() } - pub fn resolve_path(&self, db: &impl PersistentHirDatabase, path: &Path) -> PerNs { - // TODO replace by Resolver::resolve_path - db.item_map(self.krate).resolve_path(db, *self, path) - } - pub fn problems(&self, db: &impl HirDatabase) -> Vec<(TreeArc, Problem)> { self.problems_impl(db) } pub fn resolver(&self, db: &impl HirDatabase) -> Resolver { let item_map = db.item_map(self.krate); - Resolver::default().push_module_scope(item_map, self.module_id) + Resolver::default().push_module_scope(item_map, *self) } } @@ -289,6 +284,21 @@ impl Struct { pub fn ty(&self, db: &impl HirDatabase) -> Ty { db.type_for_def((*self).into()) } + + // TODO move to a more general type + /// Builds a resolver for type references inside this struct. + pub fn resolver(&self, db: &impl HirDatabase) -> Resolver { + // take the outer scope... + let r = self.module(db).resolver(db); + // ...and add generic params, if present + let p = self.generic_params(db); + let r = if !p.params.is_empty() { + r.push_generic_params_scope(p) + } else { + r + }; + r + } } impl Docs for Struct { @@ -338,6 +348,21 @@ impl Enum { pub fn ty(&self, db: &impl HirDatabase) -> Ty { db.type_for_def((*self).into()) } + + // TODO move to a more general type + /// Builds a resolver for type references inside this struct. + pub fn resolver(&self, db: &impl HirDatabase) -> Resolver { + // take the outer scope... + let r = self.module(db).resolver(db); + // ...and add generic params, if present + let p = self.generic_params(db); + let r = if !p.params.is_empty() { + r.push_generic_params_scope(p) + } else { + r + }; + r + } } impl Docs for Enum { -- cgit v1.2.3