forked from VimPlug/jedi
unpacking arguments.
This commit is contained in:
@@ -36,7 +36,46 @@ class Arguments(object):
|
|||||||
else:
|
else:
|
||||||
yield 0, child
|
yield 0, child
|
||||||
|
|
||||||
def iterate(self):
|
def unpack(self):
|
||||||
|
"""
|
||||||
|
Reordering var_args is necessary, because star args sometimes appear after
|
||||||
|
named argument, but in the actual order it's prepended.
|
||||||
|
"""
|
||||||
|
named_args = []
|
||||||
|
for stars, el in self._split():
|
||||||
|
if stars == 1:
|
||||||
|
raise NotImplementedError
|
||||||
|
elif stars == 2:
|
||||||
|
raise NotImplementedError
|
||||||
|
else:
|
||||||
|
if pr.is_node(el, 'argument'):
|
||||||
|
named_args.append(el.children[::2])
|
||||||
|
else:
|
||||||
|
yield None, [el]
|
||||||
|
|
||||||
|
for key_arg in named_args:
|
||||||
|
# TODO its always only one value?
|
||||||
|
yield key_arg[0], [key_arg[1]]
|
||||||
|
|
||||||
|
def _reorder_var_args(var_args):
|
||||||
|
named_index = None
|
||||||
|
new_args = []
|
||||||
|
for i, stmt in enumerate(var_args):
|
||||||
|
if isinstance(stmt, pr.Statement):
|
||||||
|
if named_index is None and stmt.assignment_details:
|
||||||
|
named_index = i
|
||||||
|
|
||||||
|
if named_index is not None:
|
||||||
|
expression_list = stmt.expression_list()
|
||||||
|
if expression_list and expression_list[0] == '*':
|
||||||
|
new_args.insert(named_index, stmt)
|
||||||
|
named_index += 1
|
||||||
|
continue
|
||||||
|
|
||||||
|
new_args.append(stmt)
|
||||||
|
return new_args
|
||||||
|
|
||||||
|
def _unpack_temp(self):
|
||||||
"""Returns key/value tuples, as statements."""
|
"""Returns key/value tuples, as statements."""
|
||||||
for stars, el in self._split():
|
for stars, el in self._split():
|
||||||
if stars == 1:
|
if stars == 1:
|
||||||
@@ -86,6 +125,9 @@ class ExecutedParam(pr.Param):
|
|||||||
instance.var_args = var_args
|
instance.var_args = var_args
|
||||||
return instance
|
return instance
|
||||||
|
|
||||||
|
def get_parent_until(self, *args, **kwargs):
|
||||||
|
return self.parent.get_parent_until(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
def _get_calling_var_args(evaluator, var_args):
|
def _get_calling_var_args(evaluator, var_args):
|
||||||
old_var_args = None
|
old_var_args = None
|
||||||
@@ -121,8 +163,8 @@ def get_params(evaluator, func, var_args):
|
|||||||
for param in func.params:
|
for param in func.params:
|
||||||
param_dict[str(param.get_name())] = param
|
param_dict[str(param.get_name())] = param
|
||||||
# There may be calls, which don't fit all the params, this just ignores it.
|
# There may be calls, which don't fit all the params, this just ignores it.
|
||||||
unpacked_va = _unpack_var_args(evaluator, var_args, func)
|
#unpacked_va = _unpack_var_args(evaluator, var_args, func)
|
||||||
var_arg_iterator = common.PushBackIterator(iter(unpacked_va))
|
var_arg_iterator = common.PushBackIterator(iter(var_args.unpack()))
|
||||||
|
|
||||||
non_matching_keys = []
|
non_matching_keys = []
|
||||||
keys_used = set()
|
keys_used = set()
|
||||||
@@ -251,8 +293,10 @@ def _unpack_var_args(evaluator, var_args, func):
|
|||||||
# Include self at this place.
|
# Include self at this place.
|
||||||
argument_list.append((None, [helpers.FakeStatement([func.instance])]))
|
argument_list.append((None, [helpers.FakeStatement([func.instance])]))
|
||||||
|
|
||||||
|
print(var_args)
|
||||||
# `var_args` is typically an Array, and not a list.
|
# `var_args` is typically an Array, and not a list.
|
||||||
for stmt in _reorder_var_args(var_args.iterate()):
|
for stmt in _reorder_var_args(var_args.iterate()):
|
||||||
|
print(stmt)
|
||||||
if not isinstance(stmt, pr.Statement):
|
if not isinstance(stmt, pr.Statement):
|
||||||
if stmt is None:
|
if stmt is None:
|
||||||
argument_list.append((None, []))
|
argument_list.append((None, []))
|
||||||
@@ -317,29 +361,6 @@ def _unpack_var_args(evaluator, var_args, func):
|
|||||||
return argument_list
|
return argument_list
|
||||||
|
|
||||||
|
|
||||||
def _reorder_var_args(var_args):
|
|
||||||
"""
|
|
||||||
Reordering var_args is necessary, because star args sometimes appear after
|
|
||||||
named argument, but in the actual order it's prepended.
|
|
||||||
"""
|
|
||||||
named_index = None
|
|
||||||
new_args = []
|
|
||||||
for i, stmt in enumerate(var_args):
|
|
||||||
if isinstance(stmt, pr.Statement):
|
|
||||||
if named_index is None and stmt.assignment_details:
|
|
||||||
named_index = i
|
|
||||||
|
|
||||||
if named_index is not None:
|
|
||||||
expression_list = stmt.expression_list()
|
|
||||||
if expression_list and expression_list[0] == '*':
|
|
||||||
new_args.insert(named_index, stmt)
|
|
||||||
named_index += 1
|
|
||||||
continue
|
|
||||||
|
|
||||||
new_args.append(stmt)
|
|
||||||
return new_args
|
|
||||||
|
|
||||||
|
|
||||||
def _iterate_star_args(evaluator, array, expression_list, func):
|
def _iterate_star_args(evaluator, array, expression_list, func):
|
||||||
from jedi.evaluate.representation import Instance
|
from jedi.evaluate.representation import Instance
|
||||||
if isinstance(array, iterable.Array):
|
if isinstance(array, iterable.Array):
|
||||||
|
|||||||
Reference in New Issue
Block a user