From 4f66591227a28678f4607742bdf9f02b815e50a5 Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Wed, 28 May 2014 14:35:48 +0200 Subject: [PATCH] nested functions with *args should only raise an error if there's well defined input. --- jedi/evaluate/param.py | 12 ++++++++---- test/static_analysis/star_arguments.py | 5 +++++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/jedi/evaluate/param.py b/jedi/evaluate/param.py index fb1735a7..4d802a64 100644 --- a/jedi/evaluate/param.py +++ b/jedi/evaluate/param.py @@ -48,6 +48,10 @@ def _get_calling_var_args(evaluator, var_args): break param = names[0].parent if not isinstance(param, ExecutedParam): + if isinstance(param, pr.Param): + # There is no calling var_args in this case - there's just + # a param without any input. + return None 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. @@ -139,9 +143,10 @@ def get_params(evaluator, func, var_args): values = [] if not keys_only and isinstance(var_args, pr.Array): calling_va = _get_calling_var_args(evaluator, var_args) - m = _error_argument_count(func, len(var_args)) - analysis.add(evaluator, 'type-error-too-few-arguments', - calling_va, message=m) + if calling_va is not None: + m = _error_argument_count(func, len(var_args)) + analysis.add(evaluator, 'type-error-too-few-arguments', + calling_va, message=m) else: values = [value] @@ -194,7 +199,6 @@ def _var_args_iterator(evaluator, var_args): # *args must be some sort of an array, otherwise -> ignore for array in evaluator.eval_expression_list(expression_list[1:]): if isinstance(array, iterable.Array): - #print('star', array, id(array)) for field_stmt in array: # yield from plz! yield None, field_stmt elif isinstance(array, iterable.Generator): diff --git a/test/static_analysis/star_arguments.py b/test/static_analysis/star_arguments.py index 41ef58f7..b455ffa0 100644 --- a/test/static_analysis/star_arguments.py +++ b/test/static_analysis/star_arguments.py @@ -2,9 +2,14 @@ def simple(a): return a + def nested(*args): return simple(*args) nested(1) #! 6 type-error-too-few-arguments nested() + + +def nested_no_call_to_function(*args): + return simple(1, *args)