Ejemplo n.º 1
0
 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
Ejemplo n.º 2
0
 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())
Ejemplo n.º 3
0
 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())
Ejemplo n.º 4
0
    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)
Ejemplo n.º 5
0
    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)