Emit warning for invalid use of quoted types in union syntax #18183
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.
Using quoted types in PEP 604 union syntax can be problematic, since at runtime, using
|
between a type and string produces an error:The exception is when the type is a
TypeVar
or a_UnionGenericAlias
, which can both be safely|
'd with strings:This PR makes mypy emit a warning for the former cases (where using
|
with a string will produce a runtime error) while permitting the latter cases (where using|
with a string is safe).A few notes about the implementation:
from __future__ import annotations
. Like in stubs, quoted types in these cases are redundant but mostly harmless (aside from issues with runtime inspection). It might be a good idea to emit errors for these cases too (pyright does), but I wasn't sure if the benefit is enough to justify the churn. Without this exception, this PR has ~20 mypy_primer hits across 4 projects.