Skip to content

Commit 91659da

Browse files
committed
internal: Use hir_fmt_args everywhere in hir_ty::display
1 parent 1915980 commit 91659da

1 file changed

Lines changed: 34 additions & 55 deletions

File tree

‎crates/hir-ty/src/display.rs‎

Lines changed: 34 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -422,13 +422,7 @@ impl HirDisplay for ProjectionTy {
422422
let proj_params_count =
423423
self.substitution.len(Interner) - trait_ref.substitution.len(Interner);
424424
let proj_params = &self.substitution.as_slice(Interner)[..proj_params_count];
425-
if !proj_params.is_empty(){
426-
write!(f,"<")?;
427-
// FIXME use `hir_fmt_generics` here
428-
f.write_joined(proj_params,", ")?;
429-
write!(f,">")?;
430-
}
431-
Ok(())
425+
hir_fmt_generics(f, proj_params,None)
432426
}
433427
}
434428

@@ -469,7 +463,11 @@ impl HirDisplay for Const {
469463
ConstScalar::Bytes(b, m) => render_const_scalar(f, b, m,&data.ty),
470464
ConstScalar::UnevaluatedConst(c, parameters) => {
471465
write!(f,"{}", c.name(f.db.upcast()))?;
472-
hir_fmt_generics(f, parameters, c.generic_def(f.db.upcast()))?;
466+
hir_fmt_generics(
467+
f,
468+
parameters.as_slice(Interner),
469+
c.generic_def(f.db.upcast()),
470+
)?;
473471
Ok(())
474472
}
475473
ConstScalar::Unknown => f.write_char('_'),
@@ -945,37 +943,31 @@ impl HirDisplay for Ty {
945943
}
946944
};
947945
f.end_location_link();
946+
948947
if parameters.len(Interner) > 0{
949948
let generics = generics(db.upcast(), def.into());
950-
let(
951-
parent_params,
952-
self_param,
953-
type_params,
954-
const_params,
955-
_impl_trait_params,
956-
lifetime_params,
957-
) = generics.provenance_split();
958-
let total_len =
959-
parent_params + self_param + type_params + const_params + lifetime_params;
949+
let(parent_len, self_, type_, const_, impl_, lifetime) =
950+
generics.provenance_split();
951+
let parameters = parameters.as_slice(Interner);
960952
// We print all params except implicit impl Trait params. Still a bit weird; should we leave out parent and self?
961-
iftotal_len > 0{
953+
ifparameters.len() - impl_ > 0{
962954
// `parameters` are in the order of fn's params (including impl traits), fn's lifetimes
963955
// parent's params (those from enclosing impl or trait, if any).
964-
let parameters = parameters.as_slice(Interner);
965-
let fn_params_len = self_param + type_params + const_params;
966-
// This will give slice till last type or const
967-
let fn_params = parameters.get(..fn_params_len);
968-
let fn_lt_params =
969-
parameters.get(fn_params_len..(fn_params_len + lifetime_params));
970-
let parent_params = parameters.get(parameters.len() - parent_params..);
971-
let params = parent_params
972-
.into_iter()
973-
.chain(fn_lt_params)
974-
.chain(fn_params)
975-
.flatten();
956+
let(fn_params, other) =
957+
parameters.split_at(self_ + type_ + const_ + lifetime);
958+
let(_impl, parent_params) = other.split_at(impl_);
959+
debug_assert_eq!(parent_params.len(), parent_len);
960+
961+
let parent_params =
962+
generic_args_sans_defaults(f,Some(def.into()), parent_params);
963+
let fn_params = generic_args_sans_defaults(f,Some(def.into()), fn_params);
964+
976965
write!(f,"<")?;
977-
// FIXME use `hir_fmt_generics` here
978-
f.write_joined(params,", ")?;
966+
hir_fmt_generic_arguments(f, parent_params)?;
967+
if !parent_params.is_empty() && !fn_params.is_empty(){
968+
write!(f,", ")?;
969+
}
970+
hir_fmt_generic_arguments(f, fn_params)?;
979971
write!(f,">")?;
980972
}
981973
}
@@ -1019,7 +1011,7 @@ impl HirDisplay for Ty {
10191011

10201012
let generic_def = self.as_generic_def(db);
10211013

1022-
hir_fmt_generics(f, parameters, generic_def)?;
1014+
hir_fmt_generics(f, parameters.as_slice(Interner), generic_def)?;
10231015
}
10241016
TyKind::AssociatedType(assoc_type_id, parameters) => {
10251017
let type_alias = from_assoc_type_id(*assoc_type_id);
@@ -1042,21 +1034,15 @@ impl HirDisplay for Ty {
10421034
f.end_location_link();
10431035
// Note that the generic args for the associated type come before those for the
10441036
// trait (including the self type).
1045-
// FIXME: reconsider the generic args order upon formatting?
1046-
if parameters.len(Interner) > 0{
1047-
write!(f,"<")?;
1048-
// FIXME use `hir_fmt_generics` here
1049-
f.write_joined(parameters.as_slice(Interner),", ")?;
1050-
write!(f,">")?;
1051-
}
1037+
hir_fmt_generics(f, parameters.as_slice(Interner),None)
10521038
}else{
10531039
let projection_ty = ProjectionTy{
10541040
associated_ty_id:to_assoc_type_id(type_alias),
10551041
substitution: parameters.clone(),
10561042
};
10571043

1058-
projection_ty.hir_fmt(f)?;
1059-
}
1044+
projection_ty.hir_fmt(f)
1045+
}?;
10601046
}
10611047
TyKind::Foreign(type_alias) => {
10621048
let alias = from_foreign_def_id(*type_alias);
@@ -1150,7 +1136,7 @@ impl HirDisplay for Ty {
11501136
}
11511137
ClosureStyle::ClosureWithSubst => {
11521138
write!(f,"{{closure#{:?}}}", id.0.as_u32())?;
1153-
returnhir_fmt_generics(f, substs,None);
1139+
returnhir_fmt_generics(f, substs.as_slice(Interner),None);
11541140
}
11551141
_ => (),
11561142
}
@@ -1336,15 +1322,14 @@ impl HirDisplay for Ty {
13361322

13371323
fnhir_fmt_generics(
13381324
f:&mutHirFormatter<'_>,
1339-
parameters:&Substitution,
1325+
parameters:&[GenericArg],
13401326
generic_def:Option<hir_def::GenericDefId>,
13411327
) -> Result<(),HirDisplayError>{
1342-
if parameters.is_empty(Interner){
1328+
if parameters.is_empty(){
13431329
returnOk(());
13441330
}
13451331

1346-
let parameters_to_write =
1347-
generic_args_sans_defaults(f, generic_def, parameters.as_slice(Interner));
1332+
let parameters_to_write = generic_args_sans_defaults(f, generic_def, parameters);
13481333
if !parameters_to_write.is_empty(){
13491334
write!(f,"<")?;
13501335
hir_fmt_generic_arguments(f, parameters_to_write)?;
@@ -1677,13 +1662,7 @@ fn fmt_trait_ref(
16771662
f.start_location_link(trait_.into());
16781663
write!(f,"{}", f.db.trait_data(trait_).name.display(f.db.upcast()))?;
16791664
f.end_location_link();
1680-
if tr.substitution.len(Interner) > 1{
1681-
write!(f,"<")?;
1682-
// FIXME use `hir_fmt_generics` here
1683-
f.write_joined(&tr.substitution.as_slice(Interner)[1..],", ")?;
1684-
write!(f,">")?;
1685-
}
1686-
Ok(())
1665+
hir_fmt_generics(f,&tr.substitution.as_slice(Interner)[1..],None)
16871666
}
16881667

16891668
implHirDisplayforTraitRef{

0 commit comments

Comments
 (0)