Skip to content

Commit 0718682

Browse files
committed
Fix compilation of other crates
1 parent a3d8cff commit 0718682

File tree

3 files changed

+25
-14
lines changed

3 files changed

+25
-14
lines changed

crates/ra_hir/src/code_model.rs

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ use hir_def::{
1313
AdtId, ConstId, DefWithBodyId, EnumId, FunctionId, HasModule, ImplId, LocalEnumVariantId,
1414
LocalModuleId, LocalStructFieldId, Lookup, ModuleId, StaticId, StructId, TraitId, TypeAliasId,
1515
TypeParamId, UnionId,
16+
GenericDefId
1617
};
1718
use hir_expand::{
1819
diagnostics::DiagnosticSink,
@@ -21,7 +22,8 @@ use hir_expand::{
2122
};
2223
use hir_ty::{
2324
autoderef, display::HirFormatter, expr::ExprValidator, method_resolution, ApplicationTy,
24-
Canonical, InEnvironment, TraitEnvironment, Ty, TyDefId, TypeCtor, TypeWalk,
25+
Canonical, InEnvironment, TraitEnvironment, Ty, TyDefId, TypeCtor,
26+
Substs
2527
};
2628
use ra_db::{CrateId, Edition, FileId};
2729
use ra_prof::profile;
@@ -270,7 +272,13 @@ impl StructField {
270272

271273
pub fn ty(&self, db: &impl HirDatabase) -> Type {
272274
let var_id = self.parent.into();
273-
let ty = db.field_types(var_id)[self.id].clone();
275+
let generic_def_id: GenericDefId = match self.parent {
276+
VariantDef::Struct(it) => it.id.into(),
277+
VariantDef::Union(it) => it.id.into(),
278+
VariantDef::EnumVariant(it) => it.parent.id.into(),
279+
};
280+
let substs = Substs::type_params(db, generic_def_id);
281+
let ty = db.field_types(var_id)[self.id].clone().subst(&substs);
274282
Type::new(db, self.parent.module(db).id.krate.into(), var_id, ty)
275283
}
276284

@@ -789,11 +797,7 @@ impl ImplBlock {
789797
pub fn target_ty(&self, db: &impl HirDatabase) -> Type {
790798
let impl_data = db.impl_data(self.id);
791799
let resolver = self.id.resolver(db);
792-
let ctx = hir_ty::TyLoweringContext {
793-
db,
794-
resolver: &resolver,
795-
impl_trait_mode: hir_ty::ImplTraitLoweringMode::Disallowed,
796-
};
800+
let ctx = hir_ty::TyLoweringContext::new(db, &resolver);
797801
let environment = TraitEnvironment::lower(db, &resolver);
798802
let ty = Ty::from_hir(&ctx, &impl_data.target_type);
799803
Type {
@@ -856,9 +860,10 @@ impl Type {
856860
fn from_def(
857861
db: &impl HirDatabase,
858862
krate: CrateId,
859-
def: impl HasResolver + Into<TyDefId>,
863+
def: impl HasResolver + Into<TyDefId> + Into<GenericDefId>,
860864
) -> Type {
861-
let ty = db.ty(def.into());
865+
let substs = Substs::type_params(db, def);
866+
let ty = db.ty(def.into()).subst(&substs);
862867
Type::new(db, krate, def, ty)
863868
}
864869

@@ -955,7 +960,7 @@ impl Type {
955960
match a_ty.ctor {
956961
TypeCtor::Tuple { .. } => {
957962
for ty in a_ty.parameters.iter() {
958-
let ty = ty.clone().subst(&a_ty.parameters);
963+
let ty = ty.clone();
959964
res.push(self.derived(ty));
960965
}
961966
}

crates/ra_hir_ty/src/lib.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -361,10 +361,16 @@ impl Substs {
361361
}
362362

363363
/// Return Substs that replace each parameter by itself (i.e. `Ty::Param`).
364-
pub(crate) fn type_params(generic_params: &Generics) -> Substs {
364+
pub(crate) fn type_params_for_generics(generic_params: &Generics) -> Substs {
365365
Substs(generic_params.iter().map(|(id, _)| Ty::Param(id)).collect())
366366
}
367367

368+
/// Return Substs that replace each parameter by itself (i.e. `Ty::Param`).
369+
pub fn type_params(db: &impl HirDatabase, def: impl Into<GenericDefId>) -> Substs {
370+
let params = generics(db, def.into());
371+
Substs::type_params_for_generics(&params)
372+
}
373+
368374
/// Return Substs that replace each parameter by a bound variable.
369375
pub(crate) fn bound_vars(generic_params: &Generics) -> Substs {
370376
Substs(generic_params.iter().enumerate().map(|(idx, _)| Ty::Bound(idx as u32)).collect())
@@ -1026,7 +1032,7 @@ impl HirDisplay for Ty {
10261032
TypeParamProvenance::ArgumentImplTrait => {
10271033
write!(f, "impl ")?;
10281034
let bounds = f.db.generic_predicates_for_param(*id);
1029-
let substs = Substs::type_params(&generics);
1035+
let substs = Substs::type_params_for_generics(&generics);
10301036
write_bounds_like_dyn_trait(&bounds.iter().map(|b| b.clone().subst(&substs)).collect::<Vec<_>>(), f)?;
10311037
}
10321038
}

crates/ra_hir_ty/src/lower.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -276,15 +276,15 @@ impl Ty {
276276
TypeNs::SelfType(impl_id) => {
277277
let generics = generics(ctx.db, impl_id.into());
278278
let substs = match ctx.type_param_mode {
279-
TypeParamLoweringMode::Placeholder => Substs::type_params(&generics),
279+
TypeParamLoweringMode::Placeholder => Substs::type_params_for_generics(&generics),
280280
TypeParamLoweringMode::Variable => Substs::bound_vars(&generics),
281281
};
282282
ctx.db.impl_self_ty(impl_id).subst(&substs)
283283
}
284284
TypeNs::AdtSelfType(adt) => {
285285
let generics = generics(ctx.db, adt.into());
286286
let substs = match ctx.type_param_mode {
287-
TypeParamLoweringMode::Placeholder => Substs::type_params(&generics),
287+
TypeParamLoweringMode::Placeholder => Substs::type_params_for_generics(&generics),
288288
TypeParamLoweringMode::Variable => Substs::bound_vars(&generics),
289289
};
290290
ctx.db.ty(adt.into()).subst(&substs)

0 commit comments

Comments
 (0)