diff --git a/jedi/evaluate/flow_analysis.py b/jedi/evaluate/flow_analysis.py index b2d3fcbe..eb816e21 100644 --- a/jedi/evaluate/flow_analysis.py +++ b/jedi/evaluate/flow_analysis.py @@ -9,12 +9,6 @@ class Status(object): self._name = name Status.lookup_table[value] = self - def __eq__(self, other): - return self._value == other.value - - def __ne__(self, other): - return not self.__eq__(other) - def __and__(self, other): if UNSURE in (self, other): return other diff --git a/jedi/evaluate/representation.py b/jedi/evaluate/representation.py index 2299b91b..f78ae399 100644 --- a/jedi/evaluate/representation.py +++ b/jedi/evaluate/representation.py @@ -476,13 +476,17 @@ class FunctionExecution(Executed): types = list(docstrings.find_return_types(self._evaluator, func)) for r in self.returns: - # r is a KeywordStatement - if r.stmt is None: + if isinstance(r, pr.KeywordStatement): + stmt = r.stmt + else: + stmt = r # Lambdas + + if stmt is None: continue check = flow_analysis.break_check(self._evaluator, self, r.parent) if check is not flow_analysis.UNREACHABLE: - types += self._evaluator.eval_statement(r.stmt) + types += self._evaluator.eval_statement(stmt) if check is flow_analysis.REACHABLE: break return types diff --git a/jedi/parser/representation.py b/jedi/parser/representation.py index 05eba9ef..5340edf7 100644 --- a/jedi/parser/representation.py +++ b/jedi/parser/representation.py @@ -46,7 +46,7 @@ from jedi import cache from jedi.parser import tokenize -SCOPE_CONTENTS = 'asserts', 'subscopes', 'imports', 'statements', 'returns' +SCOPE_CONTENTS = 'asserts', 'subscopes', 'imports', 'statements' def filter_after_position(names, position): @@ -1105,6 +1105,7 @@ class Statement(Simple, DocstringMixin): ret, tok = parse_stmt(token_iterator) if ret is not None: ret.parent = lambd + lambd.statements.append(ret) lambd.returns.append(ret) lambd.end_pos = self.end_pos return lambd, tok diff --git a/test/completion/functions.py b/test/completion/functions.py index 7a82477c..ff2aa945 100644 --- a/test/completion/functions.py +++ b/test/completion/functions.py @@ -96,11 +96,13 @@ def other(a): return recursion2(a) def recursion2(a): - if a: + if random.choice([0, 1]): return other(a) else: - return recursion2("") - return a + if random.choice([0, 1]): + return recursion2("") + else: + return a #? int() str() recursion2(1)