Do not abort constructing TypeAlias if only type parameters hold us back.#20162
Merged
JukkaL merged 2 commits intopython:masterfrom Nov 5, 2025
Merged
Conversation
sterliakov
commented
Nov 1, 2025
| is_error = False | ||
| is_invalid = False | ||
| for (i, arg), tvar in zip(enumerate(args), type_vars): | ||
| for arg, tvar in zip(args, type_vars): |
Collaborator
Author
There was a problem hiding this comment.
This change does not belong here, but I don't think it warrants a separate PR - i was just unused, I noticed it when tracing a PlaceholderType
This comment has been minimized.
This comment has been minimized.
Contributor
|
According to mypy_primer, this change doesn't affect type check results on a corpus of open source code. ✅ |
JukkaL
approved these changes
Nov 5, 2025
Collaborator
JukkaL
left a comment
There was a problem hiding this comment.
Thanks for the fix! I don't expect this to be performance critical.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Fixes #20135.
I am not fully certain that this is the right way. If the type alias can be reasonably constructed and only type parameters prevent that, we can create an "almost" equivalent alias with all placeholder-bearing typevars replaced with their "simple" equivalents with default values/bound/default values. This would cause current iteration to not emit some parameterization errors later, but, since we already defer the alias as a whole, we will recheck all of them again.
This obviously adds some pointless work (we check parameterization that will not be used later), but probably is not that big of a deal, recursive aliases are relatively rare in wild. If this turns out to be a bottleneck, we can add a
parameters_readyflag to aliases and skip the heavy parts if it is False, but I think it isn't necessary now.