diff options
author | Florian Diebold <[email protected]> | 2020-01-24 13:32:47 +0000 |
---|---|---|
committer | Florian Diebold <[email protected]> | 2020-02-07 17:28:10 +0000 |
commit | 22a65b11b3a69b3dae561b34c6b28cb2107169d1 (patch) | |
tree | dd4a2174d664267fbfe93f0d737975670d3030d0 /crates/ra_hir/src | |
parent | 5397f05bfe7f3b18229a65040c6685e762b2f9a3 (diff) |
Introduce TyLoweringContext
Diffstat (limited to 'crates/ra_hir/src')
-rw-r--r-- | crates/ra_hir/src/code_model.rs | 11 | ||||
-rw-r--r-- | crates/ra_hir/src/source_analyzer.rs | 9 |
2 files changed, 14 insertions, 6 deletions
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 { | |||
733 | let ty = infer[self.pat_id].clone(); | 733 | let ty = infer[self.pat_id].clone(); |
734 | let resolver = def.resolver(db); | 734 | let resolver = def.resolver(db); |
735 | let krate = def.module(db).krate; | 735 | let krate = def.module(db).krate; |
736 | let environment = TraitEnvironment::lower(db, &resolver); | 736 | let ctx = hir_ty::TyLoweringContext { db, resolver: &resolver }; |
737 | let environment = TraitEnvironment::lower(&ctx); | ||
737 | Type { krate, ty: InEnvironment { value: ty, environment } } | 738 | Type { krate, ty: InEnvironment { value: ty, environment } } |
738 | } | 739 | } |
739 | 740 | ||
@@ -789,8 +790,9 @@ impl ImplBlock { | |||
789 | pub fn target_ty(&self, db: &impl HirDatabase) -> Type { | 790 | pub fn target_ty(&self, db: &impl HirDatabase) -> Type { |
790 | let impl_data = db.impl_data(self.id); | 791 | let impl_data = db.impl_data(self.id); |
791 | let resolver = self.id.resolver(db); | 792 | let resolver = self.id.resolver(db); |
792 | let environment = TraitEnvironment::lower(db, &resolver); | 793 | let ctx = hir_ty::TyLoweringContext { db, resolver: &resolver }; |
793 | let ty = Ty::from_hir(db, &resolver, &impl_data.target_type); | 794 | let environment = TraitEnvironment::lower(&ctx); |
795 | let ty = Ty::from_hir(&ctx, &impl_data.target_type); | ||
794 | Type { | 796 | Type { |
795 | krate: self.id.lookup(db).container.module(db).krate, | 797 | krate: self.id.lookup(db).container.module(db).krate, |
796 | ty: InEnvironment { value: ty, environment }, | 798 | ty: InEnvironment { value: ty, environment }, |
@@ -844,7 +846,8 @@ pub struct Type { | |||
844 | impl Type { | 846 | impl Type { |
845 | fn new(db: &impl HirDatabase, krate: CrateId, lexical_env: impl HasResolver, ty: Ty) -> Type { | 847 | fn new(db: &impl HirDatabase, krate: CrateId, lexical_env: impl HasResolver, ty: Ty) -> Type { |
846 | let resolver = lexical_env.resolver(db); | 848 | let resolver = lexical_env.resolver(db); |
847 | let environment = TraitEnvironment::lower(db, &resolver); | 849 | let ctx = hir_ty::TyLoweringContext { db, resolver: &resolver }; |
850 | let environment = TraitEnvironment::lower(&ctx); | ||
848 | Type { krate, ty: InEnvironment { value: ty, environment } } | 851 | Type { krate, ty: InEnvironment { value: ty, environment } } |
849 | } | 852 | } |
850 | 853 | ||
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 { | |||
178 | } | 178 | } |
179 | } | 179 | } |
180 | 180 | ||
181 | fn trait_env(&self, db: &impl HirDatabase) -> Arc<TraitEnvironment> { | ||
182 | let ctx = hir_ty::TyLoweringContext { db, resolver: &self.resolver }; | ||
183 | TraitEnvironment::lower(&ctx) | ||
184 | } | ||
185 | |||
181 | pub fn type_of(&self, db: &impl HirDatabase, expr: &ast::Expr) -> Option<Type> { | 186 | pub fn type_of(&self, db: &impl HirDatabase, expr: &ast::Expr) -> Option<Type> { |
182 | let expr_id = if let Some(expr) = self.expand_expr(db, InFile::new(self.file_id, expr)) { | 187 | let expr_id = if let Some(expr) = self.expand_expr(db, InFile::new(self.file_id, expr)) { |
183 | self.body_source_map.as_ref()?.node_expr(expr.as_ref())? | 188 | self.body_source_map.as_ref()?.node_expr(expr.as_ref())? |
@@ -186,14 +191,14 @@ impl SourceAnalyzer { | |||
186 | }; | 191 | }; |
187 | 192 | ||
188 | let ty = self.infer.as_ref()?[expr_id].clone(); | 193 | let ty = self.infer.as_ref()?[expr_id].clone(); |
189 | let environment = TraitEnvironment::lower(db, &self.resolver); | 194 | let environment = self.trait_env(db); |
190 | Some(Type { krate: self.resolver.krate()?, ty: InEnvironment { value: ty, environment } }) | 195 | Some(Type { krate: self.resolver.krate()?, ty: InEnvironment { value: ty, environment } }) |
191 | } | 196 | } |
192 | 197 | ||
193 | pub fn type_of_pat(&self, db: &impl HirDatabase, pat: &ast::Pat) -> Option<Type> { | 198 | pub fn type_of_pat(&self, db: &impl HirDatabase, pat: &ast::Pat) -> Option<Type> { |
194 | let pat_id = self.pat_id(pat)?; | 199 | let pat_id = self.pat_id(pat)?; |
195 | let ty = self.infer.as_ref()?[pat_id].clone(); | 200 | let ty = self.infer.as_ref()?[pat_id].clone(); |
196 | let environment = TraitEnvironment::lower(db, &self.resolver); | 201 | let environment = self.trait_env(db); |
197 | Some(Type { krate: self.resolver.krate()?, ty: InEnvironment { value: ty, environment } }) | 202 | Some(Type { krate: self.resolver.krate()?, ty: InEnvironment { value: ty, environment } }) |
198 | } | 203 | } |
199 | 204 | ||