python / python/mypy

mypy resolves symbol incorrectly with builtins import cycle

Ouverte
#11,535 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

bug topic-import-cycles
Langage dominant
Python
Étoiles
20.6k
Forks
3.3k
Métriques de merge des PR
Métriques de PR en attente

Description

Context: https://github.com/python/typeshed/pull/6289

To reproduce:

  1. check out typeshed
  2. git checkout 9eabedca5f47a710f29d6e3e2b3a389853fab5aa
  3. apply this patch
diff --git a/stdlib/builtins.pyi b/stdlib/builtins.pyi
index 2393f3c9..0d2ea882 100644
--- a/stdlib/builtins.pyi
+++ b/stdlib/builtins.pyi
@@ -717,6 +717,7 @@ class bool(int):
     def __rxor__(self, __x: int) -> int: ...
     def __getnewargs__(self) -> tuple[int]: ...
 
+@final
 class slice(object):
     start: Any
     step: Any

Then run:

mypy --python-version 3.10 --no-incremental --custom-typeshed-dir . stdlib/_ast.pyi stdlib/ast.pyi 

and note that mypy incorrectly resolves slice to builtins.slice instead of ast.slice in ast.pyi

Note that if you change the order of files, it works just fine:

mypy --python-version 3.10 --no-incremental --custom-typeshed-dir . stdlib/ast.pyi stdlib/_ast.pyi 

It's a pretty weird case, import cycle with builtins, collision with name in builtins, from _ast import * in ast.pyi, etc. But a scary kind of bug :-)

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

Commencez par reproduire le problème avec stdlib/builtins.pyi, stdlib/_ast.pyi et stdlib/ast.pyi au commit 9eabedca5f47a710f29d6e3e2b3a389853fab5aa. Exécutez les deux commandes mypy avec les deux ordres de fichiers et suivez pourquoi ast.pyi résout slice en builtins.slice ; le travail est terminé lorsque la résolution dépendante de l’ordre signalée est corrigée sans dépendre de l’ordre des fichiers.

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
45/100

Recevez les nouvelles issues par e-mail

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