mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-29 21:35:20 +00:00
Introduce TyLoweringContext
This commit is contained in:
parent
5397f05bfe
commit
22a65b11b3
6 changed files with 144 additions and 152 deletions
|
@ -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 } }
|
||||
}
|
||||
|
||||
|
|
|
@ -178,6 +178,11 @@ impl SourceAnalyzer {
|
|||
}
|
||||
}
|
||||
|
||||
fn trait_env(&self, db: &impl HirDatabase) -> Arc<TraitEnvironment> {
|
||||
let ctx = hir_ty::TyLoweringContext { db, resolver: &self.resolver };
|
||||
TraitEnvironment::lower(&ctx)
|
||||
}
|
||||
|
||||
pub fn type_of(&self, db: &impl HirDatabase, expr: &ast::Expr) -> Option<Type> {
|
||||
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<Type> {
|
||||
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 } })
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue