Skip to content

Commit 4771a5f

Browse files
Merge #8041
8041: Rename Substs -> Substitution r=flodiebold a=flodiebold Co-authored-by: Florian Diebold <[email protected]>
2 parents 00c80b2 + ce2cae4 commit 4771a5f

17 files changed

+167
-155
lines changed

crates/hir/src/display.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use syntax::ast::{self, NameOwner};
1313

1414
use crate::{
1515
Adt, Const, ConstParam, Enum, Field, Function, GenericParam, HasVisibility, LifetimeParam,
16-
Module, Static, Struct, Substs, Trait, Type, TypeAlias, TypeParam, Union, Variant,
16+
Module, Static, Struct, Substitution, Trait, Type, TypeAlias, TypeParam, Union, Variant,
1717
};
1818

1919
impl HirDisplay for Function {
@@ -235,7 +235,7 @@ impl HirDisplay for TypeParam {
235235
fn hir_fmt(&self, f: &mut HirFormatter) -> Result<(), HirDisplayError> {
236236
write!(f, "{}", self.name(f.db))?;
237237
let bounds = f.db.generic_predicates_for_param(self.id);
238-
let substs = Substs::type_params(f.db, self.id.parent);
238+
let substs = Substitution::type_params(f.db, self.id.parent);
239239
let predicates = bounds.iter().cloned().map(|b| b.subst(&substs)).collect::<Vec<_>>();
240240
if !(predicates.is_empty() || f.omit_verbose_types()) {
241241
write_bounds_like_dyn_trait_with_prefix(":", &predicates, f)?;

crates/hir/src/lib.rs

+8-8
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,8 @@ use hir_ty::{
5757
to_assoc_type_id,
5858
traits::{FnTrait, Solution, SolutionVariables},
5959
AliasTy, BoundVar, CallableDefId, CallableSig, Canonical, DebruijnIndex, GenericPredicate,
60-
InEnvironment, Interner, Obligation, ProjectionPredicate, ProjectionTy, Scalar, Substs, Ty,
61-
TyDefId, TyKind, TyVariableKind,
60+
InEnvironment, Interner, Obligation, ProjectionPredicate, ProjectionTy, Scalar, Substitution,
61+
Ty, TyDefId, TyKind, TyVariableKind,
6262
};
6363
use itertools::Itertools;
6464
use rustc_hash::FxHashSet;
@@ -518,7 +518,7 @@ impl Field {
518518
VariantDef::Union(it) => it.id.into(),
519519
VariantDef::Variant(it) => it.parent.id.into(),
520520
};
521-
let substs = Substs::type_params(db, generic_def_id);
521+
let substs = Substitution::type_params(db, generic_def_id);
522522
let ty = db.field_types(var_id)[self.id].clone().subst(&substs);
523523
Type::new(db, self.parent.module(db).id.krate(), var_id, ty)
524524
}
@@ -1471,7 +1471,7 @@ impl TypeParam {
14711471
let resolver = self.id.parent.resolver(db.upcast());
14721472
let krate = self.id.parent.module(db.upcast()).krate();
14731473
let ty = params.get(local_idx)?.clone();
1474-
let subst = Substs::type_params(db, self.id.parent);
1474+
let subst = Substitution::type_params(db, self.id.parent);
14751475
let ty = ty.subst(&subst.prefix(local_idx));
14761476
Some(Type::new_with_resolver_inner(db, krate, &resolver, ty))
14771477
}
@@ -1674,7 +1674,7 @@ impl Type {
16741674
krate: CrateId,
16751675
def: impl HasResolver + Into<TyDefId> + Into<GenericDefId>,
16761676
) -> Type {
1677-
let substs = Substs::build_for_def(db, def).fill_with_unknown().build();
1677+
let substs = Substitution::build_for_def(db, def).fill_with_unknown().build();
16781678
let ty = db.ty(def.into()).subst(&substs);
16791679
Type::new(db, krate, def, ty)
16801680
}
@@ -1754,7 +1754,7 @@ impl Type {
17541754
pub fn impls_trait(&self, db: &dyn HirDatabase, trait_: Trait, args: &[Type]) -> bool {
17551755
let trait_ref = hir_ty::TraitRef {
17561756
trait_: trait_.id,
1757-
substs: Substs::build_for_def(db, trait_.id)
1757+
substs: Substitution::build_for_def(db, trait_.id)
17581758
.push(self.ty.value.clone())
17591759
.fill(args.iter().map(|t| t.ty.value.clone()))
17601760
.build(),
@@ -1778,7 +1778,7 @@ impl Type {
17781778
args: &[Type],
17791779
alias: TypeAlias,
17801780
) -> Option<Type> {
1781-
let subst = Substs::build_for_def(db, trait_.id)
1781+
let subst = Substitution::build_for_def(db, trait_.id)
17821782
.push(self.ty.value.clone())
17831783
.fill(args.iter().map(|t| t.ty.value.clone()))
17841784
.build();
@@ -2045,7 +2045,7 @@ impl Type {
20452045
fn walk_substs(
20462046
db: &dyn HirDatabase,
20472047
type_: &Type,
2048-
substs: &Substs,
2048+
substs: &Substitution,
20492049
cb: &mut impl FnMut(Type),
20502050
) {
20512051
for ty in substs.iter() {

crates/hir/src/source_analyzer.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ use hir_def::{
2020
use hir_expand::{hygiene::Hygiene, name::AsName, HirFileId, InFile};
2121
use hir_ty::{
2222
diagnostics::{record_literal_missing_fields, record_pattern_missing_fields},
23-
InferenceResult, Substs,
23+
InferenceResult, Substitution,
2424
};
2525
use syntax::{
2626
ast::{self, AstNode},
@@ -329,7 +329,7 @@ impl SourceAnalyzer {
329329
&self,
330330
db: &dyn HirDatabase,
331331
krate: CrateId,
332-
substs: &Substs,
332+
substs: &Substitution,
333333
variant: VariantId,
334334
missing_fields: Vec<LocalFieldId>,
335335
) -> Vec<(Field, Type)> {

crates/hir_ty/src/autoderef.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use crate::{
1515
to_assoc_type_id,
1616
traits::{InEnvironment, Solution},
1717
utils::generics,
18-
BoundVar, Canonical, DebruijnIndex, Interner, Obligation, Substs, TraitRef, Ty, TyKind,
18+
BoundVar, Canonical, DebruijnIndex, Interner, Obligation, Substitution, TraitRef, Ty, TyKind,
1919
};
2020

2121
const AUTODEREF_RECURSION_LIMIT: usize = 10;
@@ -65,7 +65,7 @@ fn deref_by_trait(
6565
// FIXME make the Canonical / bound var handling nicer
6666

6767
let parameters =
68-
Substs::build_for_generics(&generic_params).push(ty.value.value.clone()).build();
68+
Substitution::build_for_generics(&generic_params).push(ty.value.value.clone()).build();
6969

7070
// Check that the type implements Deref at all
7171
let trait_ref = TraitRef { trait_: deref_trait, substs: parameters.clone() };

crates/hir_ty/src/display.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ use crate::{
2020
db::HirDatabase, from_assoc_type_id, from_foreign_def_id, from_placeholder_idx, primitive,
2121
to_assoc_type_id, traits::chalk::from_chalk, utils::generics, AdtId, AliasTy, CallableDefId,
2222
CallableSig, GenericPredicate, ImplTraitId, Interner, Lifetime, Obligation, OpaqueTy,
23-
ProjectionTy, Scalar, Substs, TraitRef, Ty, TyKind,
23+
ProjectionTy, Scalar, Substitution, TraitRef, Ty, TyKind,
2424
};
2525

2626
pub struct HirFormatter<'a> {
@@ -562,7 +562,7 @@ impl HirDisplay for Ty {
562562
}
563563
TypeParamProvenance::ArgumentImplTrait => {
564564
let bounds = f.db.generic_predicates_for_param(id);
565-
let substs = Substs::type_params_for_generics(f.db, &generics);
565+
let substs = Substitution::type_params_for_generics(f.db, &generics);
566566
write_bounds_like_dyn_trait_with_prefix(
567567
"impl",
568568
&bounds.iter().map(|b| b.clone().subst(&substs)).collect::<Vec<_>>(),

crates/hir_ty/src/infer.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ use syntax::SmolStr;
3838

3939
use super::{
4040
traits::{Guidance, Obligation, ProjectionPredicate, Solution},
41-
InEnvironment, ProjectionTy, Substs, TraitEnvironment, TraitRef, Ty, TypeWalk,
41+
InEnvironment, ProjectionTy, Substitution, TraitEnvironment, TraitRef, Ty, TypeWalk,
4242
};
4343
use crate::{
4444
db::HirDatabase, infer::diagnostics::InferenceDiagnostic, lower::ImplTraitLoweringMode,
@@ -390,7 +390,7 @@ impl<'a> InferenceContext<'a> {
390390
_ => panic!("resolve_associated_type called with non-associated type"),
391391
};
392392
let ty = self.table.new_type_var();
393-
let substs = Substs::build_for_def(self.db, res_assoc_ty)
393+
let substs = Substitution::build_for_def(self.db, res_assoc_ty)
394394
.push(inner_ty)
395395
.fill(params.iter().cloned())
396396
.build();
@@ -469,7 +469,7 @@ impl<'a> InferenceContext<'a> {
469469
}
470470
TypeNs::SelfType(impl_id) => {
471471
let generics = crate::utils::generics(self.db.upcast(), impl_id.into());
472-
let substs = Substs::type_params_for_generics(self.db, &generics);
472+
let substs = Substitution::type_params_for_generics(self.db, &generics);
473473
let ty = self.db.impl_self_ty(impl_id).subst(&substs);
474474
match unresolved {
475475
None => {
@@ -496,7 +496,7 @@ impl<'a> InferenceContext<'a> {
496496
}
497497
}
498498
TypeNs::TypeAliasId(it) => {
499-
let substs = Substs::build_for_def(self.db, it)
499+
let substs = Substitution::build_for_def(self.db, it)
500500
.fill(std::iter::repeat_with(|| self.table.new_type_var()))
501501
.build();
502502
let ty = self.db.ty(it.into()).subst(&substs);

crates/hir_ty/src/infer/coerce.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@
77
use chalk_ir::{Mutability, TyVariableKind};
88
use hir_def::lang_item::LangItemTarget;
99

10-
use crate::{autoderef, traits::Solution, Interner, Obligation, Substs, TraitRef, Ty, TyKind};
10+
use crate::{
11+
autoderef, traits::Solution, Interner, Obligation, Substitution, TraitRef, Ty, TyKind,
12+
};
1113

1214
use super::{InEnvironment, InferenceContext};
1315

@@ -134,7 +136,7 @@ impl<'a> InferenceContext<'a> {
134136
return None;
135137
}
136138

137-
let substs = Substs::build_for_generics(&generic_params)
139+
let substs = Substitution::build_for_generics(&generic_params)
138140
.push(from_ty.clone())
139141
.push(to_ty.clone())
140142
.build();

crates/hir_ty/src/infer/expr.rs

+19-18
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ use crate::{
2121
to_assoc_type_id,
2222
traits::{chalk::from_chalk, FnTrait, InEnvironment},
2323
utils::{generics, variant_data, Generics},
24-
AdtId, Binders, CallableDefId, FnPointer, FnSig, Interner, Obligation, Rawness, Scalar, Substs,
25-
TraitRef, Ty, TyKind,
24+
AdtId, Binders, CallableDefId, FnPointer, FnSig, Interner, Obligation, Rawness, Scalar,
25+
Substitution, TraitRef, Ty, TyKind,
2626
};
2727

2828
use super::{
@@ -77,7 +77,7 @@ impl<'a> InferenceContext<'a> {
7777
return None;
7878
}
7979

80-
let mut param_builder = Substs::builder(num_args);
80+
let mut param_builder = Substitution::builder(num_args);
8181
let mut arg_tys = vec![];
8282
for _ in 0..num_args {
8383
let arg = self.table.new_type_var();
@@ -87,7 +87,7 @@ impl<'a> InferenceContext<'a> {
8787
let parameters = param_builder.build();
8888
let arg_ty = TyKind::Tuple(num_args, parameters).intern(&Interner);
8989
let substs =
90-
Substs::build_for_generics(&generic_params).push(ty.clone()).push(arg_ty).build();
90+
Substitution::build_for_generics(&generic_params).push(ty.clone()).push(arg_ty).build();
9191

9292
let trait_env = Arc::clone(&self.trait_env);
9393
let implements_fn_trait =
@@ -181,7 +181,7 @@ impl<'a> InferenceContext<'a> {
181181
let inner_ty = self.infer_expr(*body, &Expectation::none());
182182
let impl_trait_id = crate::ImplTraitId::AsyncBlockTypeImplTrait(self.owner, *body);
183183
let opaque_ty_id = self.db.intern_impl_trait_id(impl_trait_id).into();
184-
TyKind::OpaqueType(opaque_ty_id, Substs::single(inner_ty)).intern(&Interner)
184+
TyKind::OpaqueType(opaque_ty_id, Substitution::single(inner_ty)).intern(&Interner)
185185
}
186186
Expr::Loop { body, label } => {
187187
self.breakables.push(BreakableContext {
@@ -262,12 +262,12 @@ impl<'a> InferenceContext<'a> {
262262
let sig_ty = TyKind::Function(FnPointer {
263263
num_args: sig_tys.len() - 1,
264264
sig: FnSig { abi: (), safety: chalk_ir::Safety::Safe, variadic: false },
265-
substs: Substs(sig_tys.clone().into()),
265+
substs: Substitution(sig_tys.clone().into()),
266266
})
267267
.intern(&Interner);
268268
let closure_id = self.db.intern_closure((self.owner, tgt_expr)).into();
269269
let closure_ty =
270-
TyKind::Closure(closure_id, Substs::single(sig_ty)).intern(&Interner);
270+
TyKind::Closure(closure_id, Substitution::single(sig_ty)).intern(&Interner);
271271

272272
// Eagerly try to relate the closure type with the expected
273273
// type, otherwise we often won't have enough information to
@@ -402,7 +402,7 @@ impl<'a> InferenceContext<'a> {
402402

403403
self.unify(&ty, &expected.ty);
404404

405-
let substs = ty.substs().cloned().unwrap_or_else(Substs::empty);
405+
let substs = ty.substs().cloned().unwrap_or_else(Substitution::empty);
406406
let field_types = def_id.map(|it| self.db.field_types(it)).unwrap_or_default();
407407
let variant_data = def_id.map(|it| variant_data(self.db.upcast(), it));
408408
for field in fields.iter() {
@@ -511,7 +511,8 @@ impl<'a> InferenceContext<'a> {
511511
Expr::Box { expr } => {
512512
let inner_ty = self.infer_expr_inner(*expr, &Expectation::none());
513513
if let Some(box_) = self.resolve_boxed_box() {
514-
let mut sb = Substs::builder(generics(self.db.upcast(), box_.into()).len());
514+
let mut sb =
515+
Substitution::builder(generics(self.db.upcast(), box_.into()).len());
515516
sb = sb.push(inner_ty);
516517
match self.db.generic_defaults(box_.into()).as_ref() {
517518
[_, alloc_ty, ..] if !alloc_ty.value.is_unknown() => {
@@ -610,31 +611,31 @@ impl<'a> InferenceContext<'a> {
610611
let rhs_ty = rhs.map(|e| self.infer_expr(e, &rhs_expect));
611612
match (range_type, lhs_ty, rhs_ty) {
612613
(RangeOp::Exclusive, None, None) => match self.resolve_range_full() {
613-
Some(adt) => Ty::adt_ty(adt, Substs::empty()),
614+
Some(adt) => Ty::adt_ty(adt, Substitution::empty()),
614615
None => self.err_ty(),
615616
},
616617
(RangeOp::Exclusive, None, Some(ty)) => match self.resolve_range_to() {
617-
Some(adt) => Ty::adt_ty(adt, Substs::single(ty)),
618+
Some(adt) => Ty::adt_ty(adt, Substitution::single(ty)),
618619
None => self.err_ty(),
619620
},
620621
(RangeOp::Inclusive, None, Some(ty)) => {
621622
match self.resolve_range_to_inclusive() {
622-
Some(adt) => Ty::adt_ty(adt, Substs::single(ty)),
623+
Some(adt) => Ty::adt_ty(adt, Substitution::single(ty)),
623624
None => self.err_ty(),
624625
}
625626
}
626627
(RangeOp::Exclusive, Some(_), Some(ty)) => match self.resolve_range() {
627-
Some(adt) => Ty::adt_ty(adt, Substs::single(ty)),
628+
Some(adt) => Ty::adt_ty(adt, Substitution::single(ty)),
628629
None => self.err_ty(),
629630
},
630631
(RangeOp::Inclusive, Some(_), Some(ty)) => {
631632
match self.resolve_range_inclusive() {
632-
Some(adt) => Ty::adt_ty(adt, Substs::single(ty)),
633+
Some(adt) => Ty::adt_ty(adt, Substitution::single(ty)),
633634
None => self.err_ty(),
634635
}
635636
}
636637
(RangeOp::Exclusive, Some(ty), None) => match self.resolve_range_from() {
637-
Some(adt) => Ty::adt_ty(adt, Substs::single(ty)),
638+
Some(adt) => Ty::adt_ty(adt, Substitution::single(ty)),
638639
None => self.err_ty(),
639640
},
640641
(RangeOp::Inclusive, _, None) => self.err_ty(),
@@ -681,7 +682,7 @@ impl<'a> InferenceContext<'a> {
681682
self.infer_expr_coerce(*expr, &Expectation::has_type(ty.clone()));
682683
}
683684

684-
TyKind::Tuple(tys.len(), Substs(tys.into())).intern(&Interner)
685+
TyKind::Tuple(tys.len(), Substitution(tys.into())).intern(&Interner)
685686
}
686687
Expr::Array(array) => {
687688
let elem_ty = match expected.ty.interned(&Interner) {
@@ -887,7 +888,7 @@ impl<'a> InferenceContext<'a> {
887888
def_generics: Option<Generics>,
888889
generic_args: Option<&GenericArgs>,
889890
receiver_ty: &Ty,
890-
) -> Substs {
891+
) -> Substitution {
891892
let (parent_params, self_params, type_params, impl_trait_params) =
892893
def_generics.as_ref().map_or((0, 0, 0, 0), |g| g.provenance_split());
893894
assert_eq!(self_params, 0); // method shouldn't have another Self param
@@ -926,7 +927,7 @@ impl<'a> InferenceContext<'a> {
926927
substs.push(self.err_ty());
927928
}
928929
assert_eq!(substs.len(), total_len);
929-
Substs(substs.into())
930+
Substitution(substs.into())
930931
}
931932

932933
fn register_obligations_for_call(&mut self, callable_ty: &Ty) {

crates/hir_ty/src/infer/pat.rs

+7-5
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@ use hir_def::{
1212
use hir_expand::name::Name;
1313

1414
use super::{BindingMode, Expectation, InferenceContext};
15-
use crate::{lower::lower_to_chalk_mutability, utils::variant_data, Interner, Substs, Ty, TyKind};
15+
use crate::{
16+
lower::lower_to_chalk_mutability, utils::variant_data, Interner, Substitution, Ty, TyKind,
17+
};
1618

1719
impl<'a> InferenceContext<'a> {
1820
fn infer_tuple_struct_pat(
@@ -31,7 +33,7 @@ impl<'a> InferenceContext<'a> {
3133
}
3234
self.unify(&ty, expected);
3335

34-
let substs = ty.substs().cloned().unwrap_or_else(Substs::empty);
36+
let substs = ty.substs().cloned().unwrap_or_else(Substitution::empty);
3537

3638
let field_tys = def.map(|it| self.db.field_types(it)).unwrap_or_default();
3739
let (pre, post) = match ellipsis {
@@ -70,7 +72,7 @@ impl<'a> InferenceContext<'a> {
7072

7173
self.unify(&ty, expected);
7274

73-
let substs = ty.substs().cloned().unwrap_or_else(Substs::empty);
75+
let substs = ty.substs().cloned().unwrap_or_else(Substitution::empty);
7476

7577
let field_tys = def.map(|it| self.db.field_types(it)).unwrap_or_default();
7678
for subpat in subpats {
@@ -138,7 +140,7 @@ impl<'a> InferenceContext<'a> {
138140
inner_tys.extend(expectations_iter.by_ref().take(n_uncovered_patterns).cloned());
139141
inner_tys.extend(post.iter().zip(expectations_iter).map(infer_pat));
140142

141-
TyKind::Tuple(inner_tys.len(), Substs(inner_tys.into())).intern(&Interner)
143+
TyKind::Tuple(inner_tys.len(), Substitution(inner_tys.into())).intern(&Interner)
142144
}
143145
Pat::Or(ref pats) => {
144146
if let Some((first_pat, rest)) = pats.split_first() {
@@ -237,7 +239,7 @@ impl<'a> InferenceContext<'a> {
237239
};
238240

239241
let inner_ty = self.infer_pat(*inner, &inner_expected, default_bm);
240-
Ty::adt_ty(box_adt, Substs::single(inner_ty))
242+
Ty::adt_ty(box_adt, Substitution::single(inner_ty))
241243
}
242244
None => self.err_ty(),
243245
},

0 commit comments

Comments
 (0)