fix(gen): handle TypeVar variance in stubs generator
This commit is contained in:
@@ -18,6 +18,7 @@ from midas.checker.types import (
|
|||||||
TypeVar,
|
TypeVar,
|
||||||
UnitType,
|
UnitType,
|
||||||
UnknownType,
|
UnknownType,
|
||||||
|
Variance,
|
||||||
substitute_typevars,
|
substitute_typevars,
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -329,6 +330,29 @@ class StubsGenerator:
|
|||||||
def define_type_var(self, var: TypeVar) -> TypeVar:
|
def define_type_var(self, var: TypeVar) -> TypeVar:
|
||||||
name: str = self.new_type_var_name()
|
name: str = self.new_type_var_name()
|
||||||
self.add_typing_import("TypeVar")
|
self.add_typing_import("TypeVar")
|
||||||
|
|
||||||
|
kwargs: list[ast.keyword] = []
|
||||||
|
if var.bound is not None:
|
||||||
|
kwargs.append(
|
||||||
|
ast.keyword(
|
||||||
|
arg="bound",
|
||||||
|
value=self.dump_type(var.bound),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
if var.variance == Variance.COVARIANT:
|
||||||
|
kwargs.append(
|
||||||
|
ast.keyword(
|
||||||
|
arg="covariant",
|
||||||
|
value=ast.Constant(value=True),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
elif var.variance == Variance.CONTRAVARIANT:
|
||||||
|
kwargs.append(
|
||||||
|
ast.keyword(
|
||||||
|
arg="contravariant",
|
||||||
|
value=ast.Constant(value=True),
|
||||||
|
)
|
||||||
|
)
|
||||||
self.add_stub(
|
self.add_stub(
|
||||||
ast.Assign(
|
ast.Assign(
|
||||||
targets=[ast.Name(id=name)],
|
targets=[ast.Name(id=name)],
|
||||||
@@ -337,16 +361,7 @@ class StubsGenerator:
|
|||||||
args=[
|
args=[
|
||||||
ast.Constant(value=name),
|
ast.Constant(value=name),
|
||||||
],
|
],
|
||||||
keywords=(
|
keywords=kwargs,
|
||||||
[]
|
|
||||||
if var.bound is None
|
|
||||||
else [
|
|
||||||
ast.keyword(
|
|
||||||
arg="bound",
|
|
||||||
value=self.dump_type(var.bound),
|
|
||||||
)
|
|
||||||
]
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user