normalize for consistent output

This commit is contained in:
Douglas Creager 2025-11-17 17:19:30 -05:00
parent b3f85fee30
commit a28f562fa7
3 changed files with 8 additions and 2 deletions

View file

@ -43,7 +43,7 @@ def unbounded[T]():
reveal_type(generic_context(unbounded).specialize_constrained(ConstraintSet.range(Never, T, int) | ConstraintSet.range(Never, T, bool)))
# revealed: ty_extensions.Specialization[T@unbounded = int | str]
reveal_type(generic_context(unbounded).specialize_constrained(ConstraintSet.range(Never, T, int) | ConstraintSet.range(Never, T, str)))
# revealed: ty_extensions.Specialization[T@unbounded = str | bool]
# revealed: ty_extensions.Specialization[T@unbounded = bool | str]
reveal_type(generic_context(unbounded).specialize_constrained(ConstraintSet.range(bool, T, bool) | ConstraintSet.range(Never, T, str)))
```

View file

@ -8217,10 +8217,11 @@ impl<'db> KnownInstanceType<'db> {
)
}
KnownInstanceType::Specialization(specialization) => {
// Normalize for consistent output across CI platforms
write!(
f,
"ty_extensions.Specialization{}",
specialization.display_full(self.db)
specialization.normalized(self.db).display_full(self.db)
)
}
KnownInstanceType::UnionType(_) => f.write_str("types.UnionType"),

View file

@ -1003,6 +1003,11 @@ impl<'db> Specialization<'db> {
Specialization::new(db, self.generic_context(db), types, None, None)
}
#[must_use]
pub(crate) fn normalized(self, db: &'db dyn Db) -> Self {
self.normalized_impl(db, &NormalizedVisitor::default())
}
pub(crate) fn normalized_impl(self, db: &'db dyn Db, visitor: &NormalizedVisitor<'db>) -> Self {
let types: Box<[_]> = self
.types(db)