fix: better Fn traits formatting

This commit is contained in:
Alex Veber 2021-11-21 02:39:22 +02:00
parent 4566414789
commit 24f816c481

View File

@ -1164,10 +1164,23 @@ fn hir_fmt(&self, f: &mut HirFormatter) -> Result<(), HirDisplayError> {
// Do we actually format expressions?
if generic_args.desugared_from_fn {
// First argument will be a tuple, which already includes the parentheses.
generic_args.args[0].hir_fmt(f)?;
// If the tuple only contains 1 item, write it manually to avoid the trailing `,`.
if let hir_def::path::GenericArg::Type(TypeRef::Tuple(v)) =
&generic_args.args[0]
{
if v.len() == 1 {
write!(f, "(")?;
v[0].hir_fmt(f)?;
write!(f, ")")?;
} else {
generic_args.args[0].hir_fmt(f)?;
}
}
if let Some(ret) = &generic_args.bindings[0].type_ref {
write!(f, " -> ")?;
ret.hir_fmt(f)?;
if !matches!(ret, TypeRef::Tuple(v) if v.is_empty()) {
write!(f, " -> ")?;
ret.hir_fmt(f)?;
}
}
return Ok(());
}