Exemplo n.º 1
0
 def visit_arguments(self, node, parent):
     """visit a Arguments node by returning a fresh instance of it"""
     vararg, kwarg = node.vararg, node.kwarg
     if PY34:
         newnode = nodes.Arguments(vararg.arg if vararg else None,
                                   kwarg.arg if kwarg else None, parent)
     else:
         newnode = nodes.Arguments(vararg, kwarg, parent)
     args = [self.visit(child, newnode) for child in node.args]
     defaults = [self.visit(child, newnode) for child in node.defaults]
     varargannotation = None
     kwargannotation = None
     # change added in 82732 (7c5c678e4164), vararg and kwarg
     # are instances of `_ast.arg`, not strings
     if vararg:
         if PY34:
             if node.vararg.annotation:
                 varargannotation = self.visit(node.vararg.annotation,
                                               newnode)
             vararg = vararg.arg
         elif PY3 and node.varargannotation:
             varargannotation = self.visit(node.varargannotation, newnode)
     if kwarg:
         if PY34:
             if node.kwarg.annotation:
                 kwargannotation = self.visit(node.kwarg.annotation,
                                              newnode)
             kwarg = kwarg.arg
         elif PY3:
             if node.kwargannotation:
                 kwargannotation = self.visit(node.kwargannotation, newnode)
     if PY3:
         kwonlyargs = [
             self.visit(child, newnode) for child in node.kwonlyargs
         ]
         kw_defaults = [
             self.visit(child, newnode) if child else None
             for child in node.kw_defaults
         ]
         annotations = [
             self.visit(arg.annotation, newnode) if arg.annotation else None
             for arg in node.args
         ]
     else:
         kwonlyargs = []
         kw_defaults = []
         annotations = []
     newnode.postinit(args, defaults, kwonlyargs, kw_defaults, annotations,
                      varargannotation, kwargannotation)
     # save argument names in locals:
     if vararg:
         newnode.parent.set_local(vararg, newnode)
     if kwarg:
         newnode.parent.set_local(kwarg, newnode)
     return newnode
Exemplo n.º 2
0
def build_function(name, args=None, posonlyargs=None, defaults=None, doc=None):
    """create and initialize an astroid FunctionDef node"""
    args, defaults, posonlyargs = args or [], defaults or [], posonlyargs or []
    # first argument is now a list of decorators
    func = nodes.FunctionDef(name, doc)
    func.args = argsnode = nodes.Arguments()
    argsnode.args = []
    argsnode.posonlyargs = []
    for arg in args:
        argsnode.args.append(nodes.Name())
        argsnode.args[-1].name = arg
        argsnode.args[-1].parent = argsnode
    for arg in posonlyargs:
        argsnode.posonlyargs.append(nodes.Name())
        argsnode.posonlyargs[-1].name = arg
        argsnode.posonlyargs[-1].parent = argsnode
    argsnode.defaults = []
    for default in defaults:
        argsnode.defaults.append(nodes.const_factory(default))
        argsnode.defaults[-1].parent = argsnode
    argsnode.kwarg = None
    argsnode.vararg = None
    argsnode.parent = func
    if args:
        register_arguments(func)
    return func
Exemplo n.º 3
0
def build_function(
    name,
    args: Optional[List[str]] = None,
    posonlyargs: Optional[List[str]] = None,
    defaults=None,
    doc=None,
    kwonlyargs: Optional[List[str]] = None,
) -> nodes.FunctionDef:
    """create and initialize an astroid FunctionDef node"""
    # first argument is now a list of decorators
    func = nodes.FunctionDef(name, doc)
    func.args = argsnode = nodes.Arguments(parent=func)
    argsnode.postinit(
        args=[
            nodes.AssignName(name=arg, parent=argsnode) for arg in args or ()
        ],
        defaults=[],
        kwonlyargs=[
            nodes.AssignName(name=arg, parent=argsnode)
            for arg in kwonlyargs or ()
        ],
        kw_defaults=[],
        annotations=[],
        posonlyargs=[
            nodes.AssignName(name=arg, parent=argsnode)
            for arg in posonlyargs or ()
        ],
    )
    for default in defaults or ():
        argsnode.defaults.append(nodes.const_factory(default))
        argsnode.defaults[-1].parent = argsnode
    if args:
        register_arguments(func)
    return func
Exemplo n.º 4
0
def test_method_arguments_none():
    func = nodes.FunctionDef()
    args = nodes.Arguments()
    args.args = None
    func.postinit(args, body=None)
    parsed_args = Printer._get_method_arguments(func)
    assert parsed_args == []
Exemplo n.º 5
0
 def visit_arguments(self, node, parent):
     """visit a Arguments node by returning a fresh instance of it"""
     newnode = new.Arguments()
     _lineno_parent(node, newnode, parent)
     self.asscontext = "Ass"
     newnode.args = [self.visit(child, newnode) for child in node.args]
     self.asscontext = None
     newnode.defaults = [self.visit(child, newnode) for child in node.defaults]
     newnode.kwonlyargs = []
     newnode.kw_defaults = []
     vararg, kwarg = node.vararg, node.kwarg
     # change added in 82732 (7c5c678e4164), vararg and kwarg
     # are instances of `_ast.arg`, not strings
     if vararg and PY34:
         vararg = vararg.arg
     if kwarg and PY34:
         kwarg = kwarg.arg
     newnode.vararg = vararg
     newnode.kwarg = kwarg
     # save argument names in locals:
     if vararg:
         newnode.parent.set_local(vararg, newnode)
     if kwarg:
         newnode.parent.set_local(kwarg, newnode)
     newnode.set_line_info(newnode.last_child())
     return newnode
Exemplo n.º 6
0
def arguments_node(draw, annotated=False):
    n = draw(hs.integers(min_value=1, max_value=5))
    args = draw(hs.lists(name_node(None), min_size=n, max_size=n))
    if annotated:
        annotations = draw(
            hs.lists(name_node(annotation), min_size=n, max_size=n))
    else:
        annotations = None
    node = nodes.Arguments()
    node.postinit(args, None, None, None, annotations)
    return node
Exemplo n.º 7
0
def build_function(
    name: str,
    args: list[str] | None = None,
    posonlyargs: list[str] | None = None,
    defaults: list[Any] | None = None,
    doc: str | None = None,
    kwonlyargs: list[str] | None = None,
) -> nodes.FunctionDef:
    """create and initialize an astroid FunctionDef node"""
    # first argument is now a list of decorators
    func = nodes.FunctionDef(name)
    argsnode = nodes.Arguments(parent=func)

    # If args is None we don't have any information about the signature
    # (in contrast to when there are no arguments and args == []). We pass
    # this to the builder to indicate this.
    if args is not None:
        arguments = [
            nodes.AssignName(name=arg, parent=argsnode) for arg in args
        ]
    else:
        arguments = None

    argsnode.postinit(
        args=arguments,
        defaults=[],
        kwonlyargs=[
            nodes.AssignName(name=arg, parent=argsnode)
            for arg in kwonlyargs or ()
        ],
        kw_defaults=[],
        annotations=[],
        posonlyargs=[
            nodes.AssignName(name=arg, parent=argsnode)
            for arg in posonlyargs or ()
        ],
    )
    func.postinit(
        args=argsnode,
        body=[],
        doc_node=nodes.Const(value=doc) if doc else None,
    )
    for default in defaults or ():
        argsnode.defaults.append(nodes.const_factory(default))
        argsnode.defaults[-1].parent = argsnode
    if args:
        register_arguments(func)
    return func
Exemplo n.º 8
0
    def _init_function(self, name):
        args = nodes.Arguments()
        args.postinit(
            args=[],
            defaults=[],
            kwonlyargs=[],
            kw_defaults=[],
            annotations=[],
            posonlyargs=[],
            posonlyargs_annotations=[],
            kwonlyargs_annotations=[],
        )

        function = nodes.FunctionDef(name=name, parent=self._instance)

        function.postinit(args=args, body=[])
        return function
Exemplo n.º 9
0
 def visit_arguments(self, node, parent):
     """visit a Arguments node by returning a fresh instance of it"""
     newnode = new.Arguments()
     newnode.parent = parent
     self.asscontext = "Ass"
     newnode.args = [self.visit(child, newnode) for child in node.args]
     self.asscontext = None
     newnode.defaults = [
         self.visit(child, newnode) for child in node.defaults
     ]
     newnode.kwonlyargs = []
     newnode.kw_defaults = []
     vararg, kwarg = node.vararg, node.kwarg
     # change added in 82732 (7c5c678e4164), vararg and kwarg
     # are instances of `_ast.arg`, not strings
     if vararg:
         if PY34:
             if vararg.annotation:
                 newnode.varargannotation = self.visit(
                     vararg.annotation, newnode)
             vararg = vararg.arg
         elif PY3K and node.varargannotation:
             newnode.varargannotation = self.visit(node.varargannotation,
                                                   newnode)
     if kwarg:
         if PY34:
             if kwarg.annotation:
                 newnode.kwargannotation = self.visit(
                     kwarg.annotation, newnode)
             kwarg = kwarg.arg
         elif PY3K:
             if node.kwargannotation:
                 newnode.kwargannotation = self.visit(
                     node.kwargannotation, newnode)
     newnode.vararg = vararg
     newnode.kwarg = kwarg
     # save argument names in locals:
     if vararg:
         newnode.parent.set_local(vararg, newnode)
     if kwarg:
         newnode.parent.set_local(kwarg, newnode)
     return newnode
Exemplo n.º 10
0
 def visit_arguments(self, node, parent):
     """visit a Arguments node by returning a fresh instance of it"""
     newnode = new.Arguments()
     _lineno_parent(node, newnode, parent)
     self.asscontext = "Ass"
     newnode.args = [self.visit(child, newnode) for child in node.args]
     self.asscontext = None
     newnode.defaults = [
         self.visit(child, newnode) for child in node.defaults
     ]
     newnode.kwonlyargs = []
     newnode.kw_defaults = []
     newnode.vararg = node.vararg
     newnode.kwarg = node.kwarg
     # save argument names in locals:
     if node.vararg:
         newnode.parent.set_local(newnode.vararg, newnode)
     if node.kwarg:
         newnode.parent.set_local(newnode.kwarg, newnode)
     newnode.set_line_info(newnode.last_child())
     return newnode
Exemplo n.º 11
0
    def visit_arguments(self, node, parent):
        """visit an Arguments node by returning a fresh instance of it"""
        vararg, kwarg = node.vararg, node.kwarg
        newnode = nodes.Arguments(vararg.arg if vararg else None,
                                  kwarg.arg if kwarg else None, parent)
        args = [self.visit(child, newnode) for child in node.args]
        defaults = [self.visit(child, newnode) for child in node.defaults]
        varargannotation = None
        kwargannotation = None
        posonlyargs = []
        # change added in 82732 (7c5c678e4164), vararg and kwarg
        # are instances of `_ast.arg`, not strings
        if vararg:
            if node.vararg.annotation:
                varargannotation = self.visit(node.vararg.annotation, newnode)
            vararg = vararg.arg
        if kwarg:
            if node.kwarg.annotation:
                kwargannotation = self.visit(node.kwarg.annotation, newnode)
            kwarg = kwarg.arg
        kwonlyargs = [self.visit(child, newnode) for child in node.kwonlyargs]
        kw_defaults = [
            self.visit(child, newnode) if child else None
            for child in node.kw_defaults
        ]
        annotations = [
            self.visit(arg.annotation, newnode) if arg.annotation else None
            for arg in node.args
        ]
        kwonlyargs_annotations = [
            self.visit(arg.annotation, newnode) if arg.annotation else None
            for arg in node.kwonlyargs
        ]

        posonlyargs_annotations = []
        if PY38:
            posonlyargs = [
                self.visit(child, newnode) for child in node.posonlyargs
            ]
            posonlyargs_annotations = [
                self.visit(arg.annotation, newnode) if arg.annotation else None
                for arg in node.posonlyargs
            ]
        type_comment_args = [
            self.check_type_comment(child, parent=newnode)
            for child in node.args
        ]
        type_comment_kwonlyargs = [
            self.check_type_comment(child, parent=newnode)
            for child in node.kwonlyargs
        ]
        type_comment_posonlyargs = []
        if PY38:
            type_comment_posonlyargs = [
                self.check_type_comment(child, parent=newnode)
                for child in node.posonlyargs
            ]

        newnode.postinit(
            args=args,
            defaults=defaults,
            kwonlyargs=kwonlyargs,
            posonlyargs=posonlyargs,
            kw_defaults=kw_defaults,
            annotations=annotations,
            kwonlyargs_annotations=kwonlyargs_annotations,
            posonlyargs_annotations=posonlyargs_annotations,
            varargannotation=varargannotation,
            kwargannotation=kwargannotation,
            type_comment_args=type_comment_args,
            type_comment_kwonlyargs=type_comment_kwonlyargs,
            type_comment_posonlyargs=type_comment_posonlyargs,
        )
        # save argument names in locals:
        if vararg:
            newnode.parent.set_local(vararg, newnode)
        if kwarg:
            newnode.parent.set_local(kwarg, newnode)
        return newnode