(🐞) Call to function decorated with a `Callable` causes inner function to fail to infer type of variable
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
from typing import Any, Callable, TypeVar, _T as T
def bar() -> None:
def inner() -> None:
it.encode() # error: Cannot determine type of 'it'
breaks()
it = ""
deco: Callable[[T], T]
@deco
def breaks() -> None: ...
It appears that the order of the function declarations affects the result(:trollface:):
from typing import Any, Callable, TypeVar
T = TypeVar("T")
deco: Callable[[T], T]
@deco
def doesnt_break() -> None: ...
def bar() -> None:
def inner() -> None:
it.encode() # no error
doesnt_break()
it = ""
I have determined that this only happens when the deco is a Callable, when it is a function there is no error:
from typing import Any, TypeVar, _T as T
def bar() -> None:
def inner() -> None:
it.encode() # no error
doesnt_break()
it = ""
def deco(fn: T) -> T: ...
@deco
def doesnt_break() -> None: ...
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 exécuter les deux reproductions Python de l’issue, ou utilisez le playground lié, et comparez la décoration basée sur Callable avec le décorateur basé sur une fonction. Suivez le chemin d’inférence des types pour la fonction interne imbriquée et l’appel du décorateur ; le travail est terminé lorsque le premier exemple est inféré comme str sans provoquer de régression dans les exemples qui passent déjà.
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é
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 42/100