Emit errors with `--disallow-any-generics` if `type[T]` or `TypeForm[T]` receives a generic `T` with missing type arguments
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 20.6k
- Forks
- 3.3k
- Merge moyen
- 1 j 18 h
- PR mergées (30 j)
- 54
Description
Feature
If --disallow-any-generics or --strict is on, I'd like mypy to emit E: Missing type parameters for generic type "list" [type-arg] when calling f(list) for the following function definitions:
def f[T](arg: type[T], /) -> T: ...def f[T](arg: TypeForm[T], /) -> T: ...
Currently, there's no error report, and reveal_type(f(list)) shows Any.
Pitch
Due to the lack of error reporting in the above situation, implicit Anys currently easily leak when using type[T] or TypeForm[T], creating an implicit source of unsafety, which is surprising under --strict mode. Adapting the examples from PEP 747: Motivation:
# mypy: enable-incomplete-feature=TypeForm, disable-error-code=empty-body
from collections.abc import Callable
from typing_extensions import TypeForm, TypeIs
def trycast_list_item[T](typx: TypeForm[list[T]], value: object) -> T | None: ...
reveal_type(trycast_list_item(list, [1])) # N: Revealed type is "Any | None"
def isassignable_list_item[T](value: object, typx: TypeForm[list[T]]) -> TypeIs[T]: ...
a: object
if isassignable_list_item(a, list):
reveal_type(a) # N: Revealed type is "Any"
else:
reveal_type(a) # N: Revealed type is "builtins.object"
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
Commencez par reproduire les deux exemples de fonctions génériques avec --disallow-any-generics ou --strict, y compris les appels à reveal_type et le paramétrage de TypeForm pour les fonctionnalités incomplètes. Suivez la façon dont les appels utilisant list sont analysés pour type[T] et TypeForm[T] ; c’est terminé lorsque l’erreur d’argument de type manquant est émise et que le Any implicite ne se propage plus dans les reveals affichés.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- tooling
- Type d'issue
- Fonctionnalité
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- Calme
- Clarté
- Plutôt claire
- Accessibilité débutants
- 48/100