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 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 functiondef_node(draw, name=None, annotated=False, returns=False): name = name or draw(valid_identifier()) args = draw(arguments_node(annotated)) body = [] returns_node = nodes.Return() arg_node, arg_type_node = draw( hs.sampled_from(list(zip(args.args, args.annotations)))) if returns: returns_node.postinit(arg_node) else: returns_node.postinit(const_node(None)) body.append(returns_node) node = nodes.FunctionDef(name=name) node.parent = nodes.Module("Default", None) node.postinit(args, body, None, arg_type_node) return node
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