def call(self, function_node, args, kwargs, callback=None): """ Construct an AST fragment calling a function specified by an AST node `function_node`, with given arguments. """ if callback is not None: callback_node = self.quote(callback) cb_begin_loc = self._add("(") arg_nodes = [] kwarg_nodes = [] kwarg_locs = [] name_loc = self._add(function_node.name) begin_loc = self._add("(") for index, arg in enumerate(args): arg_nodes.append(self.quote(arg)) if index < len(args) - 1: self._add(", ") if any(args) and any(kwargs): self._add(", ") for index, kw in enumerate(kwargs): arg_loc = self._add(kw) equals_loc = self._add("=") kwarg_locs.append((arg_loc, equals_loc)) kwarg_nodes.append(self.quote(kwargs[kw])) if index < len(kwargs) - 1: self._add(", ") end_loc = self._add(")") if callback is not None: cb_end_loc = self._add(")") node = asttyped.CallT( func=asttyped.NameT(id=function_node.name, ctx=None, type=function_node.signature_type, loc=name_loc), args=arg_nodes, keywords=[ast.keyword(arg=kw, value=value, arg_loc=arg_loc, equals_loc=equals_loc, loc=arg_loc.join(value.loc)) for kw, value, (arg_loc, equals_loc) in zip(kwargs, kwarg_nodes, kwarg_locs)], starargs=None, kwargs=None, type=types.TVar(), iodelay=None, arg_exprs={}, begin_loc=begin_loc, end_loc=end_loc, star_loc=None, dstar_loc=None, loc=name_loc.join(end_loc)) if callback is not None: node = asttyped.CallT( func=callback_node, args=[node], keywords=[], starargs=None, kwargs=None, type=builtins.TNone(), iodelay=None, arg_exprs={}, begin_loc=cb_begin_loc, end_loc=cb_end_loc, star_loc=None, dstar_loc=None, loc=callback_node.loc.join(cb_end_loc)) return node
def call(self, callee, args, kwargs, callback=None): """ Construct an AST fragment calling a function specified by an AST node `function_node`, with given arguments. """ if callback is not None: callback_node = self.quote(callback) cb_begin_loc = self._add("(") callee_node = self.quote(callee) arg_nodes = [] kwarg_nodes = [] kwarg_locs = [] begin_loc = self._add("(") for index, arg in enumerate(args): arg_nodes.append(self.quote(arg)) if index < len(args) - 1: self._add(", ") if any(args) and any(kwargs): self._add(", ") for index, kw in enumerate(kwargs): arg_loc = self._add(kw) equals_loc = self._add("=") kwarg_locs.append((arg_loc, equals_loc)) kwarg_nodes.append(self.quote(kwargs[kw])) if index < len(kwargs) - 1: self._add(", ") end_loc = self._add(")") if callback is not None: cb_end_loc = self._add(")") node = asttyped.CallT( func=callee_node, args=arg_nodes, keywords=[ast.keyword(arg=kw, value=value, arg_loc=arg_loc, equals_loc=equals_loc, loc=arg_loc.join(value.loc)) for kw, value, (arg_loc, equals_loc) in zip(kwargs, kwarg_nodes, kwarg_locs)], starargs=None, kwargs=None, type=types.TVar(), iodelay=None, arg_exprs={}, begin_loc=begin_loc, end_loc=end_loc, star_loc=None, dstar_loc=None, loc=callee_node.loc.join(end_loc)) if callback is not None: node = asttyped.CallT( func=callback_node, args=[node], keywords=[], starargs=None, kwargs=None, type=builtins.TNone(), iodelay=None, arg_exprs={}, begin_loc=cb_begin_loc, end_loc=cb_end_loc, star_loc=None, dstar_loc=None, loc=callback_node.loc.join(cb_end_loc)) return node