1
0
forked from VimPlug/jedi

fix a keyword statement issue

This commit is contained in:
Dave Halter
2014-08-06 12:10:36 +02:00
parent 15ec0a77fe
commit e3bb0ccc2e
3 changed files with 14 additions and 8 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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: