Repository: python/mypy

Issue:
Spurious errors on the builtin open when running mypy on mypy
When running `mypy` following the procedure below, I encounter several errors for the overloaded `open` builtin of the form:

```
../python3.11/site-packages/mypy/typeshed/stdlib/builtins.pyi:1327: error: Argument 8 to "open" becomes "Optional[Any]" due to an unfollowed import  [no-any-unimported]
```

To reproduce:

1. Set up a virtualenv with Python 3.11 and activate it.
1. `pip install mypy`
1. ` python-m mypy --strict --no-silence-site-packages --disallow-any-unimported -m mypy`

Both `--no-silence-site-packages` and `--disallow-any-unimported` need to be present.

Version 1.0.0 of mypy is required. Older versions don't exhibit this error.

This is the simplest way we have found to reproduce this problem, but we first encountered it in one of our own projects.

The issue is being filed here because the `mypy` docs for reporting bugs says that problems with a specific library function should be reported here. We're not seeing this error with any other functions.



Discussion:
Interesting. I can reproduce this.

For reference argument 8 of `builtins.open` is this:

https://github.com/python/typeshed/blob/9b63a49f6419bc7a04cf0d2be0433c255f1b1852/stdlib/builtins.pyi#L1500

And the `_Opener` type alias is defined in `builtins.pyi` here:

https://github.com/python/typeshed/blob/9b63a49f6419bc7a04cf0d2be0433c255f1b1852/stdlib/builtins.pyi#L1488

I suspect that this issue may be caused by a cyclic import between `typing_extensions` and `builtins`. If I apply this diff to `builtins.pyi` in `site-packages/mypy/typeshed`, then the error goes away:

```diff
--- a/stdlib/builtins.pyi
+++ b/stdlib/builtins.pyi
@@ -1485,7 +1485,7 @@ def next(__i: SupportsNext[_T]) -> _T: ...
 def next(__i: SupportsNext[_T], __default: _VT) -> _T | _VT: ...
 def oct(__number: int | SupportsIndex) -> str: ...

-_Opener: TypeAlias = Callable[[str, int], int]
+_Opener = Callable[[str, int], int]
```
This bisects to https://github.com/python/mypy/commit/6442b02400ac6e6715247d29ea2d3da8ca8e35d8: I can reproduce with https://github.com/python/mypy/commit/6442b02400ac6e6715247d29ea2d3da8ca8e35d8 checked out locally, but not with https://github.com/python/mypy/commit/0665ce924290dad3f30010b3bb93310a71c8db81.
@JelleZijlstra or @hauntsaninja, could one of you transfer this issue to mypy?

I think the best thing to do would be to revert https://github.com/python/mypy/commit/6442b02400ac6e6715247d29ea2d3da8ca8e35d8. It fixes the crash that it was meant to fix, but I get some very strange mypy errors if I try changing `builtins.pyi` in typeshed so that it imports things from `collections.abc` instead of `typing`, so something is clearly going wrong there. Plus the crash is very typeshed-specific, so it's not really high-priority.

Unfortunately it's not a clean revert.
Cc. @Michael0x2a as author of the commit that this bisects to

Resolving patch:
diff --git a/mypy/semanal_main.py b/mypy/semanal_main.py
--- a/mypy/semanal_main.py
+++ b/mypy/semanal_main.py
@@ -75,6 +75,7 @@
     "abc",
     "collections",
     "collections.abc",
+    "typing_extensions",
 ]
 
 


Test patch: