ruff
2a478ce1 - [red-knot] simplify gradually-equivalent types out of unions and intersections (#17467)

Commit
94 days ago
[red-knot] simplify gradually-equivalent types out of unions and intersections (#17467) ## Summary If two types are gradually-equivalent, that means they share the same set of possible materializations. There's no need to keep two such types in the same union or intersection; we should simplify them. Fixes https://github.com/astral-sh/ruff/issues/17465 The one downside here is that now we will simplify e.g. `Unknown | Todo(...)` to just `Unknown`, if `Unknown` was added to the union first. This is correct from a type perspective (they are equivalent types), but it can mean we lose visibility into part of the cause for the type inferring as unknown. I think this is OK, but if we think it's important to avoid this, I can add a special case to try to preserve `Todo` over `Unknown`, if we see them both in the same union or intersection. ## Test Plan Added and updated mdtests.
Author
Parents
  • crates/red_knot_python_semantic
    • resources/mdtest
      • File
        attributes.md
      • call
        • File
          union.md
      • File
        intersection_types.md
      • subscript
        • File
          lists.md
      • type_properties
        • File
          is_gradual_equivalent_to.md
    • src
      • File
        types.rs
      • types
        • File
          builder.rs
Loading