diff --git a/jedi/evaluate/stdlib.py b/jedi/evaluate/stdlib.py index 9f113bd6..4a24a309 100644 --- a/jedi/evaluate/stdlib.py +++ b/jedi/evaluate/stdlib.py @@ -86,14 +86,15 @@ def builtins_reversed(evaluator, obj, params): objects = _follow_param(evaluator, params, 0) if objects: # unpack the iterator values - objects = iterable.get_iterator_types(objects) - rev = reversed(objects) - # Repack iterator values and then run it the normal way. This is necessary, - # because `reversed` is a function and autocompletion would fail in certain - # cases like `reversed(x).__iter__` if we just returned the result - # directly. - stmts = [FakeStatement([r]) for r in rev] - objects = (FakeArray(stmts, objects[0].parent),) + objects = tuple(iterable.get_iterator_types(objects)) + if objects: + rev = reversed(objects) + # Repack iterator values and then run it the normal way. This is + # necessary, because `reversed` is a function and autocompletion + # would fail in certain cases like `reversed(x).__iter__` if we + # just returned the result directly. + stmts = [FakeStatement([r]) for r in rev] + objects = (FakeArray(stmts, objects[0].parent),) return [er.Instance(evaluator, obj, objects)] diff --git a/test/completion/std.py b/test/completion/std.py index 67528741..da6955d8 100644 --- a/test/completion/std.py +++ b/test/completion/std.py @@ -13,6 +13,13 @@ sorted(arr)[0] #? str() next(reversed(arr)) +# should not fail if there's no return value. +def yielder(): + yield None + +#? +next(reversed(yielder())) + #? str() next(open(''))