fix: type formatting

This commit is contained in:
Shunsuke Shibayama 2023-02-18 16:09:09 +09:00
parent 5b8715af27
commit 448fe4e64c
2 changed files with 37 additions and 2 deletions

View file

@ -170,6 +170,42 @@ impl Constraint {
Self::Sandwiched { sub, sup }
}
pub fn named_fmt(&self, f: &mut fmt::Formatter<'_>, name: &str, limit: usize) -> fmt::Result {
if limit == 0 {
return write!(f, "...");
}
match self {
Self::Sandwiched { sub, sup } => match (sub == &Type::Never, sup == &Type::Obj) {
(true, true) => {
write!(f, "{name}: Type")?;
Ok(())
}
(true, false) => {
write!(f, "{name} <: ")?;
sup.limited_fmt(f, limit - 1)?;
Ok(())
}
(false, true) => {
write!(f, "{name} :> ")?;
sub.limited_fmt(f, limit - 1)?;
Ok(())
}
(false, false) => {
write!(f, "{name} :> ")?;
sub.limited_fmt(f, limit - 1)?;
write!(f, ", {name} <: ")?;
sup.limited_fmt(f, limit - 1)?;
Ok(())
}
},
Self::TypeOf(t) => {
write!(f, "{name}: ")?;
t.limited_fmt(f, limit - 1)
}
Self::Uninited => write!(f, "Never"),
}
}
pub fn new_type_of(t: Type) -> Self {
if t == Type::Type {
Self::new_sandwiched(Type::Never, Type::Obj)

View file

@ -805,8 +805,7 @@ impl LimitedDisplay for Type {
if i != 0 {
write!(f, ", ")?;
}
write!(f, "{name}")?;
constr.limited_fmt(f, limit - 1)?;
constr.named_fmt(f, name, limit - 1)?;
}
write!(f, "|")?;
quantified.limited_fmt(f, limit - 1)