forked from VimPlug/jedi
add comments to the *args/**kwargs merge code
This commit is contained in:
@@ -225,6 +225,8 @@ def _unpack_var_args(evaluator, var_args, params):
|
|||||||
elif expression_list[0] == '**':
|
elif expression_list[0] == '**':
|
||||||
dct = {}
|
dct = {}
|
||||||
for array in evaluator.eval_expression_list(expression_list[1:]):
|
for array in evaluator.eval_expression_list(expression_list[1:]):
|
||||||
|
# Merge multiple kwargs dictionaries, if used with dynamic
|
||||||
|
# parameters.
|
||||||
for name, (key, value) in _star_star_dict(array).items():
|
for name, (key, value) in _star_star_dict(array).items():
|
||||||
try:
|
try:
|
||||||
dct[name][1].add(value)
|
dct[name][1].add(value)
|
||||||
@@ -232,6 +234,7 @@ def _unpack_var_args(evaluator, var_args, params):
|
|||||||
dct[name] = key, set([value])
|
dct[name] = key, set([value])
|
||||||
|
|
||||||
for key, values in dct.values():
|
for key, values in dct.values():
|
||||||
|
# merge **kwargs/*args also for dynamic parameters
|
||||||
for i, p in enumerate(params):
|
for i, p in enumerate(params):
|
||||||
if str(p.get_name()) == str(key) and not p.stars:
|
if str(p.get_name()) == str(key) and not p.stars:
|
||||||
try:
|
try:
|
||||||
@@ -239,11 +242,14 @@ def _unpack_var_args(evaluator, var_args, params):
|
|||||||
except IndexError:
|
except IndexError:
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
if k is None:
|
if k is None: # k would imply a named argument
|
||||||
|
# Don't merge if they orginate at the same
|
||||||
|
# place. -> type-error-multiple-values
|
||||||
if [v.parent for v in values] != [v.parent for v in vs]:
|
if [v.parent for v in values] != [v.parent for v in vs]:
|
||||||
vs.extend(values)
|
vs.extend(values)
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
|
# default is to merge
|
||||||
argument_list.append((key, values))
|
argument_list.append((key, values))
|
||||||
# Normal arguments (including key arguments).
|
# Normal arguments (including key arguments).
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ class TestSpeed(TestCase):
|
|||||||
s = "from posixpath import join; join('', '')."
|
s = "from posixpath import join; join('', '')."
|
||||||
assert len(jedi.Script(s).completions()) > 10 # is a str completion
|
assert len(jedi.Script(s).completions()) > 10 # is a str completion
|
||||||
|
|
||||||
@_check_speed(0.1)
|
@_check_speed(0.15)
|
||||||
def test_scipy_speed(self):
|
def test_scipy_speed(self):
|
||||||
s = 'import scipy.weave; scipy.weave.inline('
|
s = 'import scipy.weave; scipy.weave.inline('
|
||||||
script = jedi.Script(s, 1, len(s), '')
|
script = jedi.Script(s, 1, len(s), '')
|
||||||
|
|||||||
Reference in New Issue
Block a user