[ty] Improve exhaustiveness analysis for type variables with bounds or constraints #21172
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Fixes astral-sh/ty#1456.
This PR backs out the changes made in #21130 and replaces them with a more generalised implementation of exhaustiveness checking for
matches over type variables with upper bounds or constraints. The approach in #21130 works for type variables with an enum upper bound, and could have been adapted to work for type variables with aboolupper bound. But it would not work for a type variable with a union upper bound, because of the fact that we distribute over a union (to create a union of intersections) when adding a union type to an intersection.Instead, the approach this PR takes is to speculatively solve all type variables in the positive part of an intersection to their upper bound/constraints when finally building the intersection. If that speculative intersection simplifies to
Never, so must the original intersection.Test Plan
New mdtests added.