Beispiel #1
0
    def fix_function_overloads(self, stmts: List[Node]) -> List[Node]:
        ret = []  # type: List[Node]
        current_overload = []
        current_overload_name = None
        # mypy doesn't actually check that the decorator is literally @overload
        for stmt in stmts:
            if isinstance(stmt, Decorator) and stmt.name() == current_overload_name:
                current_overload.append(stmt)
            else:
                if len(current_overload) == 1:
                    ret.append(current_overload[0])
                elif len(current_overload) > 1:
                    ret.append(OverloadedFuncDef(current_overload))

                if isinstance(stmt, Decorator):
                    current_overload = [stmt]
                    current_overload_name = stmt.name()
                else:
                    current_overload = []
                    current_overload_name = None
                    ret.append(stmt)

        if len(current_overload) == 1:
            ret.append(current_overload[0])
        elif len(current_overload) > 1:
            ret.append(OverloadedFuncDef(current_overload))
        return ret
Beispiel #2
0
    def fix_function_overloads(self,
                               stmts: List[Statement]) -> List[Statement]:
        ret: List[Statement] = []
        current_overload: List[OverloadPart] = []
        current_overload_name: Optional[str] = None
        for stmt in stmts:
            if (current_overload_name is not None
                    and isinstance(stmt, (Decorator, FuncDef))
                    and stmt.name == current_overload_name):
                current_overload.append(stmt)
            else:
                if len(current_overload) == 1:
                    ret.append(current_overload[0])
                elif len(current_overload) > 1:
                    ret.append(OverloadedFuncDef(current_overload))

                if isinstance(stmt,
                              Decorator) and not unnamed_function(stmt.name):
                    current_overload = [stmt]
                    current_overload_name = stmt.name
                else:
                    current_overload = []
                    current_overload_name = None
                    ret.append(stmt)

        if len(current_overload) == 1:
            ret.append(current_overload[0])
        elif len(current_overload) > 1:
            ret.append(OverloadedFuncDef(current_overload))
        return ret
Beispiel #3
0
    def fix_function_overloads(self,
                               stmts: List[Statement]) -> List[Statement]:
        ret = []  # type: List[Statement]
        current_overload = []  # type: List[OverloadPart]
        current_overload_name = None
        for stmt in stmts:
            if (isinstance(stmt, Decorator)
                    and stmt.name() == current_overload_name):
                current_overload.append(stmt)
            elif (isinstance(stmt, FuncDef)
                  and stmt.name() == current_overload_name
                  and stmt.name() is not None):
                ret.append(OverloadedFuncDef(current_overload + [stmt]))
                current_overload = []
                current_overload_name = None
            else:
                if len(current_overload) == 1:
                    ret.append(current_overload[0])
                elif len(current_overload) > 1:
                    ret.append(OverloadedFuncDef(current_overload))

                if isinstance(stmt, Decorator):
                    current_overload = [stmt]
                    current_overload_name = stmt.name()
                else:
                    current_overload = []
                    current_overload_name = None
                    ret.append(stmt)

        if len(current_overload) == 1:
            ret.append(current_overload[0])
        elif len(current_overload) > 1:
            ret.append(OverloadedFuncDef(current_overload))
        return ret
Beispiel #4
0
 def visit_overloaded_func_def(self, node: OverloadedFuncDef) -> Node:
     items = [self.visit_decorator(decorator) for decorator in node.items]
     for newitem, olditem in zip(items, node.items):
         newitem.line = olditem.line
     new = OverloadedFuncDef(items)
     new._fullname = node._fullname
     new.type = self.type(node.type)
     new.info = node.info
     return new
Beispiel #5
0
 def visit_overloaded_func_def(self, node: OverloadedFuncDef) -> OverloadedFuncDef:
     items = [cast(OverloadPart, item.accept(self)) for item in node.items]
     for newitem, olditem in zip(items, node.items):
         newitem.line = olditem.line
     new = OverloadedFuncDef(items)
     new._fullname = node._fullname
     new.type = self.optional_type(node.type)
     new.info = node.info
     if node.impl:
         new.impl = cast(OverloadPart, node.impl.accept(self))
     return new
 def visit_overloaded_func_def(self, node: OverloadedFuncDef) -> OverloadedFuncDef:
     items = [cast(OverloadPart, item.accept(self)) for item in node.items]
     for newitem, olditem in zip(items, node.items):
         newitem.line = olditem.line
     new = OverloadedFuncDef(items)
     new._fullname = node._fullname
     new_type = self.optional_type(node.type)
     assert isinstance(new_type, ProperType)
     new.type = new_type
     new.info = node.info
     new.is_static = node.is_static
     new.is_class = node.is_class
     new.is_property = node.is_property
     new.is_final = node.is_final
     if node.impl:
         new.impl = cast(OverloadPart, node.impl.accept(self))
     return new