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
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
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
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 == []
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
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
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
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
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
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
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