python / python/mypy

Any is excessively used as outer context for inference

Ouverte
#8,760 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

bug priority-1-normal topic-plugins topic-type-variables
Langage dominant
Python
Étoiles
20.6k
Forks
3.3k
Métriques de merge des PR
Métriques de PR en attente

Description

Consider this example:

from typing import Any
  
def foo(**kwargs: Any) -> None: ...

foo(bar=reveal_type([1])) # Revealed type is List[Any]

Such behavior causes many false negatives for plugins that provide precise type checking for various ORMs, this includes SQLAlchemy plugin, our internal plugins, and likely Django plugin.

My guess this was added so that an empty list in Any context is inferred as List[Any] instead of List[<nothing>], but I think this is counterproductive. If empty collections cause issues for plugins they can easily work around using private APIs to re-infer argument type in generated precise context (for example using has_uninhabited_component() and ctx.api.accept()). Or maybe we can provide public API for inference.

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Reproduisez l’exemple avec mypy et examinez comment le contexte externe Any affecte reveal_type([1]) dans un appel avec **kwargs: Any. Examinez les API de réinférence du plugin mentionnées dans l’issue, notamment has_uninhabited_component() et ctx.api.accept(). Le travail est terminé lorsqu’un comportement d’inférence cohérent ou une API publique a été défini et implémenté, avec une couverture de régression pour l’exemple et les scénarios de plugin concernés.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
python
Domaine
compilers, devtools
Type d'issue
Bug
Difficulté
5/5
Temps estimé
Plus d'une semaine
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
25/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.