Skip to content

mypy resolves symbol incorrectly with builtins import cycle #11535

Description

@hauntsaninja

Context: python/typeshed#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 :-)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions