This commit is contained in:
veetaha 2020-03-31 19:00:23 +03:00
parent 6f0d8db529
commit 611adc83da

View file

@ -190,8 +190,6 @@ impl HirDisplay for ApplicationTy {
}; };
write!(f, "{}", name)?; write!(f, "{}", name)?;
if self.parameters.len() > 0 { if self.parameters.len() > 0 {
write!(f, "<")?;
let mut non_default_parameters = Vec::with_capacity(self.parameters.len()); let mut non_default_parameters = Vec::with_capacity(self.parameters.len());
let parameters_to_write = if f.omit_verbose_types() { let parameters_to_write = if f.omit_verbose_types() {
match self match self
@ -200,8 +198,8 @@ impl HirDisplay for ApplicationTy {
.map(|generic_def_id| f.db.generic_defaults(generic_def_id)) .map(|generic_def_id| f.db.generic_defaults(generic_def_id))
.filter(|defaults| !defaults.is_empty()) .filter(|defaults| !defaults.is_empty())
{ {
Option::None => self.parameters.0.as_ref(), None => self.parameters.0.as_ref(),
Option::Some(default_parameters) => { Some(default_parameters) => {
for (i, parameter) in self.parameters.iter().enumerate() { for (i, parameter) in self.parameters.iter().enumerate() {
match (parameter, default_parameters.get(i)) { match (parameter, default_parameters.get(i)) {
(&Ty::Unknown, _) | (_, None) => { (&Ty::Unknown, _) | (_, None) => {
@ -221,7 +219,7 @@ impl HirDisplay for ApplicationTy {
} else { } else {
self.parameters.0.as_ref() self.parameters.0.as_ref()
}; };
write!(f, "<")?;
f.write_joined(parameters_to_write, ", ")?; f.write_joined(parameters_to_write, ", ")?;
write!(f, ">")?; write!(f, ">")?;
} }
@ -231,9 +229,9 @@ impl HirDisplay for ApplicationTy {
AssocContainerId::TraitId(it) => it, AssocContainerId::TraitId(it) => it,
_ => panic!("not an associated type"), _ => panic!("not an associated type"),
}; };
let trait_name = f.db.trait_data(trait_).name.clone(); let trait_ = f.db.trait_data(trait_);
let name = f.db.type_alias_data(type_alias).name.clone(); let type_alias = f.db.type_alias_data(type_alias);
write!(f, "{}::{}", trait_name, name)?; write!(f, "{}::{}", trait_.name, type_alias.name)?;
if self.parameters.len() > 0 { if self.parameters.len() > 0 {
write!(f, "<")?; write!(f, "<")?;
f.write_joined(&*self.parameters.0, ", ")?; f.write_joined(&*self.parameters.0, ", ")?;
@ -266,8 +264,8 @@ impl HirDisplay for ProjectionTy {
return write!(f, "{}", TYPE_HINT_TRUNCATION); return write!(f, "{}", TYPE_HINT_TRUNCATION);
} }
let trait_name = f.db.trait_data(self.trait_(f.db)).name.clone(); let trait_ = f.db.trait_data(self.trait_(f.db));
write!(f, "<{} as {}", self.parameters[0].display(f.db), trait_name,)?; write!(f, "<{} as {}", self.parameters[0].display(f.db), trait_.name)?;
if self.parameters.len() > 1 { if self.parameters.len() > 1 {
write!(f, "<")?; write!(f, "<")?;
f.write_joined(&self.parameters[1..], ", ")?; f.write_joined(&self.parameters[1..], ", ")?;
@ -312,7 +310,7 @@ impl HirDisplay for Ty {
Ty::Opaque(_) => write!(f, "impl ")?, Ty::Opaque(_) => write!(f, "impl ")?,
_ => unreachable!(), _ => unreachable!(),
}; };
write_bounds_like_dyn_trait(&predicates, f)?; write_bounds_like_dyn_trait(predicates, f)?;
} }
Ty::Unknown => write!(f, "{{unknown}}")?, Ty::Unknown => write!(f, "{{unknown}}")?,
Ty::Infer(..) => write!(f, "_")?, Ty::Infer(..) => write!(f, "_")?,
@ -345,7 +343,7 @@ fn write_bounds_like_dyn_trait(
// We assume that the self type is $0 (i.e. the // We assume that the self type is $0 (i.e. the
// existential) here, which is the only thing that's // existential) here, which is the only thing that's
// possible in actual Rust, and hence don't print it // possible in actual Rust, and hence don't print it
write!(f, "{}", f.db.trait_data(trait_ref.trait_).name.clone())?; write!(f, "{}", f.db.trait_data(trait_ref.trait_).name)?;
if trait_ref.substs.len() > 1 { if trait_ref.substs.len() > 1 {
write!(f, "<")?; write!(f, "<")?;
f.write_joined(&trait_ref.substs[1..], ", ")?; f.write_joined(&trait_ref.substs[1..], ", ")?;
@ -362,9 +360,8 @@ fn write_bounds_like_dyn_trait(
write!(f, "<")?; write!(f, "<")?;
angle_open = true; angle_open = true;
} }
let name = let type_alias = f.db.type_alias_data(projection_pred.projection_ty.associated_ty);
f.db.type_alias_data(projection_pred.projection_ty.associated_ty).name.clone(); write!(f, "{} = ", type_alias.name)?;
write!(f, "{} = ", name)?;
projection_pred.ty.hir_fmt(f)?; projection_pred.ty.hir_fmt(f)?;
} }
GenericPredicate::Error => { GenericPredicate::Error => {
@ -398,7 +395,7 @@ impl TraitRef {
} else { } else {
write!(f, ": ")?; write!(f, ": ")?;
} }
write!(f, "{}", f.db.trait_data(self.trait_).name.clone())?; write!(f, "{}", f.db.trait_data(self.trait_).name)?;
if self.substs.len() > 1 { if self.substs.len() > 1 {
write!(f, "<")?; write!(f, "<")?;
f.write_joined(&self.substs[1..], ", ")?; f.write_joined(&self.substs[1..], ", ")?;