diff --git a/jedi/evaluate_representation.py b/jedi/evaluate_representation.py index 87627447..aa19b894 100644 --- a/jedi/evaluate_representation.py +++ b/jedi/evaluate_representation.py @@ -635,9 +635,14 @@ class Execution(Executable): if commands[0] == '*': arrays = evaluate.follow_call_list(commands[1:]) # *args must be some sort of an array, otherwise -> ignore + for array in arrays: - for field_stmt in array: # yield from plz! - yield None, field_stmt + if isinstance(array, Array): + for field_stmt in array: # yield from plz! + yield None, field_stmt + elif isinstance(array, Generator): + for field_stmt in array.iter_content(): + yield None, helpers.FakeStatement(field_stmt) # **kwargs elif commands[0] == '**': arrays = evaluate.follow_call_list(commands[1:]) diff --git a/jedi/helpers.py b/jedi/helpers.py index 6f748c8a..d57411a3 100644 --- a/jedi/helpers.py +++ b/jedi/helpers.py @@ -125,3 +125,13 @@ def search_function_definition(stmt, pos): arr.parent.execution = None return call, index, False return None, 0, False + + +class FakeStatement(pr.Statement): + class SubModule(): + line_offset = 0 + + def __init__(self, content): + cls = type(self) + p = 0, 0 + super(cls, self).__init__(cls.SubModule, [], [], [content], p, p) diff --git a/test/completion/functions.py b/test/completion/functions.py index 54bd71b0..d8275b0d 100644 --- a/test/completion/functions.py +++ b/test/completion/functions.py @@ -166,6 +166,16 @@ exe[1] # illegal args (TypeError) #? args_func(*1)[0] +# iterator +#? int() +args_func(*iter([1]))[0] + +# different types +e = args_func(*[1+"", {}]) +#? int() str() +e[0] +#? dict() +e[1] _list = [1,""] exe2 = args_func(_list)[0]