I found a regression when using the new semantic analyzer in mypy 0.710.
To reproduce, you need the following two modules:
# factory.py
from typing import Generic, Type
from box import BoxT
class Factory(Generic[BoxT]):
value = 123
def create(self, boxClass: Type[BoxT]) -> BoxT:
return boxClass.create(self)
# box.py
from typing import TYPE_CHECKING, Type, TypeVar
if TYPE_CHECKING:
from factory import Factory
BoxT = TypeVar('BoxT', bound='Box')
class Box:
@classmethod
def create(cls: Type[BoxT], f: Factory) -> BoxT:
return cls(f.value)
def __init__(self, value: int):
print(value)
When mypy is run on these modules with the default arguments, no issues are reported. But when run withthe new semantic analyzer, the following happens:
$ mypy --new-semantic-analyzer box.py factory.py
factory.py:11: error: "Type[BoxT]" has no attribute "create"
The problem does not occur if there is no circular import. It also doesn't occur if the BoxT TypeVar is defined in the factory module instead of imported from the box module.
I found a regression when using the new semantic analyzer in mypy 0.710.
To reproduce, you need the following two modules:
When mypy is run on these modules with the default arguments, no issues are reported. But when run withthe new semantic analyzer, the following happens:
The problem does not occur if there is no circular import. It also doesn't occur if the
BoxTTypeVar is defined in thefactorymodule instead of imported from theboxmodule.