mypy
363be141 - Fix crash on invalid recursive variadic alias (#21572)

Commit
19 days ago
Fix crash on invalid recursive variadic alias (#21572) Fixes https://github.com/python/mypy/issues/21125 This one was tricky. This is because the above issue actually exposed _two_ different crash scenarios: * A crash on invalid constructs like `*tuple[Ts]` (must be `*tuple[*Ts]`). * An infinite recursion when trying to detect pathological and divergent aliases. And while working on this I discovered two more cases: * A crash where an invalid type (like a union) appears in unpack in a recursive alias definition. * A crash on non-normalizeable recursive tuple. I fix the first by tightening logic in `typeanal.py` w.r.t. where exactly a `TypeVarTuple` is allowed. I fix the second and third by avoiding `get_proper_type()` calls in `expand_type()` for recursive tuples. The fourth is the most problematic, and is kind of a fundamental thing. This PR only avoids an immediate crash for such aliases. We will still need to update various call sites where we special-case tuples to expect non-normal ones. Couple more related things: * I fix couple issues with `is_recursive` cache invalidation. * I added a fast path to `detect_diverging_alias()` to avoid creating sets unless really needed.
Author
Parents
Loading