mirror of
https://github.com/davidhalter/jedi.git
synced 2025-12-06 14:04:26 +08:00
star args improvements
This commit is contained in:
@@ -74,6 +74,13 @@ class Warning(Error):
|
||||
|
||||
|
||||
def add(evaluator, name, jedi_obj, message=None, typ=Error, payload=None):
|
||||
from jedi.evaluate.iterable import MergedNodes
|
||||
while isinstance(jedi_obj, MergedNodes):
|
||||
if len(jedi_obj) != 1:
|
||||
# TODO is this kosher?
|
||||
return
|
||||
jedi_obj = list(jedi_obj)[0]
|
||||
|
||||
exception = CODES[name][1]
|
||||
if _check_for_exception_catch(evaluator, jedi_obj, exception, payload):
|
||||
return
|
||||
|
||||
@@ -197,7 +197,7 @@ def _get_calling_var_args(evaluator, var_args):
|
||||
break
|
||||
# We never want var_args to be a tuple. This should be enough for
|
||||
# now, we can change it later, if we need to.
|
||||
if isinstance(param.var_args, pr.Array):
|
||||
if isinstance(param.var_args, Arguments):
|
||||
var_args = param.var_args
|
||||
return var_args.argument_node or var_args.trailer
|
||||
|
||||
@@ -256,13 +256,14 @@ def get_params(evaluator, func, var_args):
|
||||
if param.stars == 1:
|
||||
# *args param
|
||||
array_type = pr.Array.TUPLE
|
||||
lst_values = [iterable.MergedNodes(va_values)]
|
||||
lst_values = [iterable.MergedNodes(va_values)] if va_values else []
|
||||
for key, va_values in var_arg_iterator:
|
||||
# Iterate until a key argument is found.
|
||||
if key:
|
||||
var_arg_iterator.push_back((key, va_values))
|
||||
break
|
||||
lst_values.append(iterable.MergedNodes(va_values))
|
||||
if va_values:
|
||||
lst_values.append(iterable.MergedNodes(va_values))
|
||||
seq = iterable.FakeSequence(evaluator, lst_values, pr.Array.TUPLE)
|
||||
values = [iterable.AlreadyEvaluated([seq])]
|
||||
elif param.stars == 2:
|
||||
@@ -306,10 +307,10 @@ def get_params(evaluator, func, var_args):
|
||||
or param.stars or param.default):
|
||||
# add a warning only if there's not another one.
|
||||
calling_va = _get_calling_var_args(evaluator, var_args)
|
||||
if calling_va.argument_node is not None:
|
||||
if calling_va is not None:
|
||||
m = _error_argument_count(func, len(unpacked_va))
|
||||
analysis.add(evaluator, 'type-error-too-few-arguments',
|
||||
calling_va.argument_node, message=m)
|
||||
calling_va, message=m)
|
||||
|
||||
for key, va_values in non_matching_keys.items():
|
||||
m = "TypeError: %s() got an unexpected keyword argument '%s'." \
|
||||
|
||||
@@ -27,7 +27,7 @@ def nested_twice(*args1):
|
||||
return nested(*args1)
|
||||
|
||||
nested_twice(2, 3)
|
||||
#! 12 type-error-too-few-arguments
|
||||
#! 13 type-error-too-few-arguments
|
||||
nested_twice(2)
|
||||
#! 19 type-error-too-many-arguments
|
||||
nested_twice(2, 3, 4)
|
||||
@@ -47,13 +47,13 @@ def kwargs_test(**kwargs):
|
||||
return simple2(1, **kwargs)
|
||||
|
||||
kwargs_test(c=3, b=2)
|
||||
#! 11 type-error-too-few-arguments
|
||||
#! 12 type-error-too-few-arguments
|
||||
kwargs_test(c=3)
|
||||
#! 11 type-error-too-few-arguments
|
||||
#! 12 type-error-too-few-arguments
|
||||
kwargs_test(b=2)
|
||||
#! 22 type-error-keyword-argument
|
||||
kwargs_test(b=2, c=3, d=4)
|
||||
##! 11 type-error-multiple-values
|
||||
##! 13 type-error-multiple-values
|
||||
kwargs_test(b=2, c=3, a=4)
|
||||
|
||||
|
||||
@@ -65,9 +65,9 @@ kwargs_nested(c=3)
|
||||
kwargs_nested()
|
||||
#! 19 type-error-keyword-argument
|
||||
kwargs_nested(c=2, d=4)
|
||||
##! 13 type-error-multiple-values
|
||||
##! 14 type-error-multiple-values
|
||||
kwargs_nested(c=2, a=4)
|
||||
#! 13 type-error-multiple-values
|
||||
#! 14 type-error-multiple-values
|
||||
kwargs_nested(b=3, c=2)
|
||||
|
||||
# -----------------
|
||||
@@ -91,15 +91,15 @@ def mixed2(*args, **kwargs):
|
||||
return simple_mixed(1, *args, **kwargs)
|
||||
|
||||
|
||||
#! 6 type-error-too-few-arguments
|
||||
#! 7 type-error-too-few-arguments
|
||||
mixed2(c=2)
|
||||
#! 6 type-error-too-few-arguments
|
||||
#! 7 type-error-too-few-arguments
|
||||
mixed2(3)
|
||||
#! 13 type-error-too-many-arguments
|
||||
mixed2(3, 4, 5)
|
||||
#! 13 type-error-too-many-arguments
|
||||
mixed2(3, 4, c=5)
|
||||
#! 6 type-error-multiple-values
|
||||
#! 7 type-error-multiple-values
|
||||
mixed2(3, b=5)
|
||||
|
||||
# -----------------
|
||||
|
||||
Reference in New Issue
Block a user