1
0
forked from VimPlug/jedi

raise multiple key errors also if they are an input to kwargs

This commit is contained in:
Dave Halter
2014-06-05 10:35:44 +02:00
parent acb4959a6a
commit 6f83eb65ce
2 changed files with 22 additions and 16 deletions

View File

@@ -91,24 +91,25 @@ def get_params(evaluator, func, var_args):
key, va_values = next(var_arg_iterator, (None, [])) key, va_values = next(var_arg_iterator, (None, []))
while key: while key:
keys_only = True keys_only = True
k = unicode(key)
try: try:
key_param = param_dict[unicode(key)] key_param = param_dict[unicode(key)]
except KeyError: except KeyError:
non_matching_keys.append((key, va_values)) non_matching_keys.append((key, va_values))
else: else:
k = unicode(key) result.append(_gen_param_name_copy(func, var_args, key_param,
if k in keys_used: values=va_values))
had_multiple_value_error = True
m = ("TypeError: %s() got multiple values for keyword argument '%s'." if k in keys_used:
% (func.name, k)) had_multiple_value_error = True
calling_va = _get_calling_var_args(evaluator, var_args) m = ("TypeError: %s() got multiple values for keyword argument '%s'."
if calling_va is not None: % (func.name, k))
analysis.add(evaluator, 'type-error-multiple-values', calling_va = _get_calling_var_args(evaluator, var_args)
calling_va, message=m) if calling_va is not None:
else: analysis.add(evaluator, 'type-error-multiple-values',
keys_used.add(k) calling_va, message=m)
result.append(_gen_param_name_copy(func, var_args, key_param, else:
values=va_values)) keys_used.add(k)
key, va_values = next(var_arg_iterator, (None, [])) key, va_values = next(var_arg_iterator, (None, []))
keys = [] keys = []
@@ -234,11 +235,14 @@ def _unpack_var_args(evaluator, var_args, params):
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:
if argument_list[i][0] is None: k, vs = argument_list[i]
argument_list[i][1].extend(values)
break
except IndexError: except IndexError:
pass pass
else:
if k is None:
if [v.parent for v in values] != [v.parent for v in vs]:
vs.extend(values)
break
else: else:
argument_list.append((key, values)) argument_list.append((key, values))
# Normal arguments (including key arguments). # Normal arguments (including key arguments).

View File

@@ -61,6 +61,8 @@ kwargs_nested()
kwargs_nested(c=2, d=4) kwargs_nested(c=2, d=4)
#! 13 type-error-multiple-values #! 13 type-error-multiple-values
kwargs_nested(c=2, a=4) kwargs_nested(c=2, a=4)
#! 13 type-error-multiple-values
kwargs_nested(b=3, c=2)
# ----------------- # -----------------
# mixed *args/**kwargs # mixed *args/**kwargs