diff --git a/jedi/inference/value/function.py b/jedi/inference/value/function.py index fd3c2a04..ab9e65c7 100644 --- a/jedi/inference/value/function.py +++ b/jedi/inference/value/function.py @@ -201,15 +201,15 @@ class BaseFunctionExecutionContext(ValueContext, TreeContextMixin): returns = funcdef.iter_return_stmts() for r in returns: - check = flow_analysis.reachability_check(self, funcdef, r) - if check is flow_analysis.UNREACHABLE: - debug.dbg('Return unreachable: %s', r) + if check_yields: + value_set |= ValueSet.from_sets( + lazy_value.infer() + for lazy_value in self._get_yield_lazy_value(r) + ) else: - if check_yields: - value_set |= ValueSet.from_sets( - lazy_value.infer() - for lazy_value in self._get_yield_lazy_value(r) - ) + check = flow_analysis.reachability_check(self, funcdef, r) + if check is flow_analysis.UNREACHABLE: + debug.dbg('Return unreachable: %s', r) else: try: children = r.children @@ -218,9 +218,9 @@ class BaseFunctionExecutionContext(ValueContext, TreeContextMixin): value_set |= ValueSet([ctx]) else: value_set |= self.infer_node(children[1]) - if check is flow_analysis.REACHABLE: - debug.dbg('Return reachable: %s', r) - break + if check is flow_analysis.REACHABLE: + debug.dbg('Return reachable: %s', r) + break return value_set def _get_yield_lazy_value(self, yield_expr): diff --git a/test/completion/generators.py b/test/completion/generators.py index 1d5e5384..5ea3082e 100644 --- a/test/completion/generators.py +++ b/test/completion/generators.py @@ -78,6 +78,28 @@ g = iter([1.0]) #? float() next(g) +x, y = Get() +#? int() str() +x +#? int() str() +x + +class Iter: + def __iter__(self): + yield "" + i = 0 + while True: + v = 1 + yield v + i += 1 +a, b, c = Iter() +#? str() int() +a +#? str() int() +b +#? str() int() +c + # ----------------- # __next__