def visit_Call(self, node):
argnodes = node.args + node.keywords
py2_starargs = getattr(node, 'starargs', None)
if py2_starargs: # pragma: no cover (<PY35)
argnodes.append(py2_starargs)
py2_kwargs = getattr(node, 'kwargs', None)
if py2_kwargs: # pragma: no cover (<PY35)
argnodes.append(py2_kwargs)
arg_offsets = set()
has_starargs = bool(py2_starargs or py2_kwargs)
for argnode in argnodes:
if (
_is_star_arg(argnode) or
_is_star_star_kwarg(argnode)
): # pragma: no cover (PY35+)
has_starargs = True
offset = _to_offset(argnode)
# multiline strings have invalid position, ignore them
if offset.utf8_byte_offset != -1: # pragma: no branch (cpy bug)
arg_offsets.add(offset)
# If the sole argument is a generator, don't add a trailing comma as
# this breaks lib2to3 based tools
only_a_generator = (
len(argnodes) == 1 and isinstance(argnodes[0], ast.GeneratorExp)
)
if arg_offsets and not only_a_generator:
key = Offset(node.lineno, node.col_offset)
self.calls[key].append(Call(node, has_starargs, arg_offsets))
self.generic_visit(node)
评论列表
文章目录