TypeForm does not overlap with classes that represent special forms at runtime.
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 20.6k
- Forks
- 3.3k
- Métriques de merge des PR
- Métriques de PR en attente
Description
Bug Report
A value annotated as a TypeForm is not considered to overlap with various clases used to represent special forms at runtime.
I have tested typing.NewType, types.GenericAlias, and types.UnionType. [^1]
Given a variable defined as x: TypeForm[object] when using isinstance(x, typing.NewType) (or any of the above types), the truthy branch that follows is considered unreachable.
This does not happen with isinstance(x, type) though.
To Reproduce
from typing_extensions import TypeForm
import typing
import types
Y = typing.NewType("Y", int)
x1: TypeForm[object] = Y # no issue, `Y` is a valid type expression
if isinstance(x1, typing.NewType):
print("new type") # error: Statement is unreachable [unreachable]
x2: TypeForm[object] = list[int] # no issue, `list[int]` is a valid type expression
if isinstance(x2, types.GenericAlias):
print("generic alias") # error: Statement is unreachable [unreachable]
x3: TypeForm[object] = int | str # no issue, `int | str` is a valid type expression
if isinstance(x3, types.UnionType):
print("generic alias") # error: Statement is unreachable [unreachable]
x4: TypeForm[object] = int # no issue, `int` is a valid type expression
if isinstance(x4, type):
print("generic alias") # no issue, code is reachable
Expected Behavior
The code within the branches to be considered reachable.
Actual Behavior
main.py:10: error: Statement is unreachable [unreachable]
main.py:15: error: Statement is unreachable [unreachable]
main.py:20: error: Statement is unreachable [unreachable]
Found 3 errors in 1 file (checked 1 source file)
Your Environment
- Mypy version used: 1.19.1 and main branch
- Mypy command-line flags:
--enable-incomplete-feature=TypeForm --warn-unreachable - Mypy configuration options from
mypy.ini(and other config files): - Python version used: 1.14
[^1]: I think think is all the publicly documented classes?
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Le rapport ne mentionne aucun fichier source ni aucun test existant. Commencez par exécuter le reproducteur fourni avec --enable-incomplete-feature=TypeForm et --warn-unreachable, puis suivez la gestion des recouvrements de TypeForm pour typing.NewType, types.GenericAlias et types.UnionType. C’est terminé lorsque ces branches sont considérées comme atteignables et qu’un test de régression couvre les cas.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- devtools
- Type d'issue
- Bug
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Activité
- Calme
- Clarté
- Plutôt claire
- Accessibilité débutants
- 48/100