forked from VimPlug/jedi
fix a keyword statement issue
This commit is contained in:
@@ -37,10 +37,10 @@ def break_check(evaluator, base_scope, element_scope):
|
||||
types = evaluator.eval_statement(element_scope.inputs[0])
|
||||
values = set(x.py__bool__() for x in types)
|
||||
if len(values) == 1:
|
||||
return Status.lookup_table[values.pop()]
|
||||
reachable = Status.lookup_table[values.pop()]
|
||||
else:
|
||||
return UNSURE
|
||||
|
||||
if base_scope != element_scope.parent:
|
||||
return reachable & break_check(base_scope, element_scope.parent)
|
||||
return UNSURE
|
||||
if base_scope != element_scope and base_scope != element_scope.parent:
|
||||
return reachable & break_check(evaluator, base_scope, element_scope.parent)
|
||||
return reachable
|
||||
|
||||
@@ -79,6 +79,10 @@ class Instance(use_metaclass(CachedMetaClass, Executed)):
|
||||
|
||||
return actual
|
||||
|
||||
def py__bool__(self):
|
||||
# Signalize that we don't know about the bool type.
|
||||
return None
|
||||
|
||||
@memoize_default()
|
||||
def _get_method_execution(self, func):
|
||||
func = get_instance_el(self._evaluator, self, func, True)
|
||||
@@ -472,12 +476,13 @@ class FunctionExecution(Executed):
|
||||
|
||||
types = list(docstrings.find_return_types(self._evaluator, func))
|
||||
for r in self.returns:
|
||||
if r is None:
|
||||
# r is a KeywordStatement
|
||||
if r.stmt is None:
|
||||
continue
|
||||
|
||||
check = flow_analysis.break_check(self._evaluator, self, r.parent.parent)
|
||||
check = flow_analysis.break_check(self._evaluator, self, r.parent)
|
||||
if check is not flow_analysis.UNREACHABLE:
|
||||
types += self._evaluator.eval_statement(r)
|
||||
types += self._evaluator.eval_statement(r.stmt)
|
||||
if check is flow_analysis.REACHABLE:
|
||||
break
|
||||
return types
|
||||
|
||||
@@ -568,11 +568,12 @@ class Parser(object):
|
||||
kw_stmt = pr.KeywordStatement(tok_str, s,
|
||||
use_as_parent_scope, stmt)
|
||||
self._scope.statements.append(kw_stmt)
|
||||
func.returns.append(stmt)
|
||||
func.returns.append(kw_stmt)
|
||||
# start_pos is the one of the return statement
|
||||
stmt.start_pos = s
|
||||
except AttributeError:
|
||||
debug.warning('return in non-function')
|
||||
stmt = None
|
||||
elif tok_str == 'assert':
|
||||
stmt, tok = self._parse_statement()
|
||||
if stmt is not None:
|
||||
|
||||
Reference in New Issue
Block a user