def compute_types(self, defs, ignore): self.program.Freeze() ty = pytd_utils.Concat( self.pytd_for_types(defs, ignore), pytd.TypeDeclUnit( "unknowns", (), tuple(self.pytd_classes_for_unknowns()) + tuple(self.pytd_classes_for_call_traces()), tuple(self.pytd_functions_for_call_traces()))) ty = ty.Visit(optimize.PullInMethodClasses()) ty = ty.Visit(visitors.DefaceUnresolved( [ty, self.loader.concat_all()], "~unknown")) return ty
def compute_types(self, defs): classes = (tuple(self.pytd_classes_for_unknowns()) + tuple(self.pytd_classes_for_call_traces()) + self.pytd_classes_for_namedtuple_instances()) functions = tuple(self.pytd_functions_for_call_traces()) aliases = tuple(self.pytd_aliases()) ty = pytd_utils.Concat( self.pytd_for_types(defs), pytd_utils.CreateModule("unknowns", classes=classes, functions=functions, aliases=aliases)) ty = ty.Visit(optimize.CombineReturnsAndExceptions()) ty = ty.Visit(optimize.PullInMethodClasses()) ty = ty.Visit(visitors.DefaceUnresolved( [ty, self.loader.concat_all()], "~unknown")) return ty.Visit(visitors.AdjustTypeParameters())
def compute_types(self, defs): ty = pytd_utils.Concat( self.pytd_for_types(defs), pytd.TypeDeclUnit( "unknowns", constants=tuple(), type_params=tuple(self.pytd_typevars()), classes=tuple(self.pytd_classes_for_unknowns()) + tuple(self.pytd_classes_for_call_traces()), functions=tuple(self.pytd_functions_for_call_traces()), aliases=tuple(self.pytd_aliases()))) ty = ty.Visit(optimize.PullInMethodClasses()) ty = ty.Visit(visitors.DefaceUnresolved( [ty, self.loader.concat_all()], "~unknown")) return ty.Visit(visitors.AdjustTypeParameters())
def test_pull_in_method_classes(self): src = pytd_src(""" from typing import Any class A: mymethod1 = ... # type: Method1 mymethod2 = ... # type: Method2 member = ... # type: Method3 mymethod4 = ... # type: Method4 class Method1: def __call__(self: A, x: int) -> Any: ... class Method2: def __call__(self: object, x: int) -> Any: ... class Method3: def __call__(x: bool, y: int) -> Any: ... class Method4: def __call__(self: Any) -> Any: ... class B(Method4): pass """) expected = pytd_src(""" from typing import Any class A: member = ... # type: Method3 def mymethod1(self, x: int) -> Any: ... def mymethod2(self, x: int) -> Any: ... def mymethod4(self) -> Any: ... class Method3: def __call__(x: bool, y: int) -> Any: ... class Method4: def __call__(self) -> Any: ... class B(Method4): pass """) new_src = self.ApplyVisitorToString(src, optimize.PullInMethodClasses()) self.AssertSourceEquals(new_src, expected)
def testPullInMethodClasses(self): src = textwrap.dedent(""" class A(object): mymethod1 = ... # type: Method1 mymethod2 = ... # type: Method2 member = ... # type: Method3 mymethod4 = ... # type: Method4 class Method1(object): def __call__(self: A, x: int) -> ? class Method2(object): def __call__(self: object, x: int) -> ? class Method3(object): def __call__(x: bool, y: int) -> ? class Method4(object): def __call__(self: ?) -> ? class B(Method4): pass """) expected = textwrap.dedent(""" class A(object): member = ... # type: Method3 def mymethod1(self, x: int) -> ? def mymethod2(self, x: int) -> ? def mymethod4(self) -> ? class Method3(object): def __call__(x: bool, y: int) -> ? class Method4(object): def __call__(self) -> ? class B(Method4): pass """) new_src = self.ApplyVisitorToString(src, optimize.PullInMethodClasses()) self.AssertSourceEquals(new_src, expected)