From 22a65b11b3a69b3dae561b34c6b28cb2107169d1 Mon Sep 17 00:00:00 2001 From: Florian Diebold Date: Fri, 24 Jan 2020 14:32:47 +0100 Subject: Introduce TyLoweringContext --- crates/ra_hir/src/code_model.rs | 11 +++++++---- crates/ra_hir/src/source_analyzer.rs | 9 +++++++-- 2 files changed, 14 insertions(+), 6 deletions(-) (limited to 'crates/ra_hir/src') diff --git a/crates/ra_hir/src/code_model.rs b/crates/ra_hir/src/code_model.rs index eaacf8c9e..837a3ed6d 100644 --- a/crates/ra_hir/src/code_model.rs +++ b/crates/ra_hir/src/code_model.rs @@ -733,7 +733,8 @@ impl Local { let ty = infer[self.pat_id].clone(); let resolver = def.resolver(db); let krate = def.module(db).krate; - let environment = TraitEnvironment::lower(db, &resolver); + let ctx = hir_ty::TyLoweringContext { db, resolver: &resolver }; + let environment = TraitEnvironment::lower(&ctx); Type { krate, ty: InEnvironment { value: ty, environment } } } @@ -789,8 +790,9 @@ impl ImplBlock { pub fn target_ty(&self, db: &impl HirDatabase) -> Type { let impl_data = db.impl_data(self.id); let resolver = self.id.resolver(db); - let environment = TraitEnvironment::lower(db, &resolver); - let ty = Ty::from_hir(db, &resolver, &impl_data.target_type); + let ctx = hir_ty::TyLoweringContext { db, resolver: &resolver }; + let environment = TraitEnvironment::lower(&ctx); + let ty = Ty::from_hir(&ctx, &impl_data.target_type); Type { krate: self.id.lookup(db).container.module(db).krate, ty: InEnvironment { value: ty, environment }, @@ -844,7 +846,8 @@ pub struct Type { impl Type { fn new(db: &impl HirDatabase, krate: CrateId, lexical_env: impl HasResolver, ty: Ty) -> Type { let resolver = lexical_env.resolver(db); - let environment = TraitEnvironment::lower(db, &resolver); + let ctx = hir_ty::TyLoweringContext { db, resolver: &resolver }; + let environment = TraitEnvironment::lower(&ctx); Type { krate, ty: InEnvironment { value: ty, environment } } } diff --git a/crates/ra_hir/src/source_analyzer.rs b/crates/ra_hir/src/source_analyzer.rs index 4f8fc9602..9cfd52856 100644 --- a/crates/ra_hir/src/source_analyzer.rs +++ b/crates/ra_hir/src/source_analyzer.rs @@ -178,6 +178,11 @@ impl SourceAnalyzer { } } + fn trait_env(&self, db: &impl HirDatabase) -> Arc { + let ctx = hir_ty::TyLoweringContext { db, resolver: &self.resolver }; + TraitEnvironment::lower(&ctx) + } + pub fn type_of(&self, db: &impl HirDatabase, expr: &ast::Expr) -> Option { let expr_id = if let Some(expr) = self.expand_expr(db, InFile::new(self.file_id, expr)) { self.body_source_map.as_ref()?.node_expr(expr.as_ref())? @@ -186,14 +191,14 @@ impl SourceAnalyzer { }; let ty = self.infer.as_ref()?[expr_id].clone(); - let environment = TraitEnvironment::lower(db, &self.resolver); + let environment = self.trait_env(db); Some(Type { krate: self.resolver.krate()?, ty: InEnvironment { value: ty, environment } }) } pub fn type_of_pat(&self, db: &impl HirDatabase, pat: &ast::Pat) -> Option { let pat_id = self.pat_id(pat)?; let ty = self.infer.as_ref()?[pat_id].clone(); - let environment = TraitEnvironment::lower(db, &self.resolver); + let environment = self.trait_env(db); Some(Type { krate: self.resolver.krate()?, ty: InEnvironment { value: ty, environment } }) } -- cgit v1.2.3