diff --git a/jedi/evaluate/analysis.py b/jedi/evaluate/analysis.py index 8273df3e..0c2d54e6 100644 --- a/jedi/evaluate/analysis.py +++ b/jedi/evaluate/analysis.py @@ -16,6 +16,7 @@ CODES = { 'type-error-too-few-arguments': (6, TypeError, None), 'type-error-keyword-argument': (7, TypeError, None), 'type-error-multiple-values': (8, TypeError, None), + 'type-error-star-star-mapping': (9, TypeError, None), } diff --git a/jedi/evaluate/param.py b/jedi/evaluate/param.py index 782efc2a..f887c11c 100644 --- a/jedi/evaluate/param.py +++ b/jedi/evaluate/param.py @@ -227,7 +227,8 @@ def _unpack_var_args(evaluator, var_args, params): 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(): + s = _star_star_dict(evaluator, array, expression_list[1:]) + for name, (key, value) in s.items(): try: dct[name][1].add(value) except KeyError: @@ -275,9 +276,9 @@ def _iterate_star_args(array): pass # TODO need a warning here. -def _star_star_dict(array): +def _star_star_dict(evaluator, array, expression_list): dct = {} - if isinstance(array, iterable.Array): + if isinstance(array, iterable.Array) and array.type == pr.Array.DICT: for key_stmt, value_stmt in array.items(): # first index, is the key if syntactically correct call = key_stmt.expression_list()[0] @@ -294,8 +295,11 @@ def _star_star_dict(array): pass # raise warning else: - pass - # raise warning + if expression_list: + m = "TypeError: type object argument after ** must be a mapping, not %s" \ + % (array) + analysis.add(evaluator, 'type-error-star-star-mapping', + expression_list[0], message=m) return dct diff --git a/test/static_analysis/star_arguments.py b/test/static_analysis/star_arguments.py index de65e28b..34a27d0e 100644 --- a/test/static_analysis/star_arguments.py +++ b/test/static_analysis/star_arguments.py @@ -95,3 +95,10 @@ mixed2(3, 4, 5) mixed2(3, 4, c=5) #! 6 type-error-multiple-values mixed2(3, b=5) + +# ----------------- +# plain wrong arguments +# ----------------- + +#! 12 type-error-star-star-mapping +simple(1, **[])