forked from VimPlug/jedi
Use ExprStmt pretty much everywhere where it should be used.
ExprStmt is now really a normal statement. All the other statements are from now on considered legacy code. As a side effect this increases the parser pickling version.
This commit is contained in:
@@ -275,7 +275,7 @@ class Script(object):
|
|||||||
raise NotFoundError()
|
raise NotFoundError()
|
||||||
if isinstance(stmt, pr.KeywordStatement):
|
if isinstance(stmt, pr.KeywordStatement):
|
||||||
stmt = stmt.stmt
|
stmt = stmt.stmt
|
||||||
if not isinstance(stmt, pr.Statement):
|
if not isinstance(stmt, pr.ExprStmt):
|
||||||
raise NotFoundError()
|
raise NotFoundError()
|
||||||
|
|
||||||
user_stmt = self._parser.user_stmt()
|
user_stmt = self._parser.user_stmt()
|
||||||
@@ -465,7 +465,7 @@ class Script(object):
|
|||||||
# The Evaluator.goto function checks for definitions, but since we
|
# The Evaluator.goto function checks for definitions, but since we
|
||||||
# use a reverse tokenizer, we have new name_part objects, so we
|
# use a reverse tokenizer, we have new name_part objects, so we
|
||||||
# have to check the user_stmt here for positions.
|
# have to check the user_stmt here for positions.
|
||||||
if isinstance(user_stmt, pr.Statement):
|
if isinstance(user_stmt, pr.ExprStmt):
|
||||||
for name in user_stmt.get_defined_names():
|
for name in user_stmt.get_defined_names():
|
||||||
if name.start_pos <= self._pos <= name.end_pos \
|
if name.start_pos <= self._pos <= name.end_pos \
|
||||||
and len(name.names) == 1:
|
and len(name.names) == 1:
|
||||||
@@ -497,7 +497,7 @@ class Script(object):
|
|||||||
|
|
||||||
# Once Script._goto works correct, we can probably remove this
|
# Once Script._goto works correct, we can probably remove this
|
||||||
# branch.
|
# branch.
|
||||||
if isinstance(user_stmt, pr.Statement):
|
if isinstance(user_stmt, pr.ExprStmt):
|
||||||
c = user_stmt.expression_list()[0]
|
c = user_stmt.expression_list()[0]
|
||||||
if not isinstance(c, unicode) and self._pos < c.start_pos:
|
if not isinstance(c, unicode) and self._pos < c.start_pos:
|
||||||
# The lookup might be before `=`
|
# The lookup might be before `=`
|
||||||
|
|||||||
@@ -332,7 +332,7 @@ class BaseDefinition(object):
|
|||||||
# Functions, classes and modules are already fixed definitions, we
|
# Functions, classes and modules are already fixed definitions, we
|
||||||
# cannot follow them anymore.
|
# cannot follow them anymore.
|
||||||
return [self]
|
return [self]
|
||||||
stmt_or_imp = self._definition.get_parent_until((pr.Statement, pr.Import))
|
stmt_or_imp = self._definition.get_parent_until((pr.ExprStmt, pr.Import))
|
||||||
call_path = call_path_for_name_part(stmt_or_imp, self._definition)
|
call_path = call_path_for_name_part(stmt_or_imp, self._definition)
|
||||||
names = self._evaluator.goto(stmt_or_imp, call_path)
|
names = self._evaluator.goto(stmt_or_imp, call_path)
|
||||||
return [Definition(self._evaluator, n) for n in names]
|
return [Definition(self._evaluator, n) for n in names]
|
||||||
@@ -352,7 +352,7 @@ class BaseDefinition(object):
|
|||||||
elif isinstance(stripped, pr.Class):
|
elif isinstance(stripped, pr.Class):
|
||||||
stripped = er.Class(self._evaluator, stripped)
|
stripped = er.Class(self._evaluator, stripped)
|
||||||
|
|
||||||
if stripped.isinstance(pr.Statement):
|
if stripped.isinstance(pr.ExprStmt):
|
||||||
return self._evaluator.eval_statement(stripped)
|
return self._evaluator.eval_statement(stripped)
|
||||||
elif stripped.isinstance(pr.Import):
|
elif stripped.isinstance(pr.Import):
|
||||||
return imports.follow_imports(self._evaluator, [stripped])
|
return imports.follow_imports(self._evaluator, [stripped])
|
||||||
@@ -606,7 +606,7 @@ class Definition(use_metaclass(CachedMetaClass, BaseDefinition)):
|
|||||||
return None
|
return None
|
||||||
elif isinstance(d, pr.Param):
|
elif isinstance(d, pr.Param):
|
||||||
name = d.get_name()
|
name = d.get_name()
|
||||||
elif isinstance(d, pr.Statement):
|
elif isinstance(d, pr.ExprStmt):
|
||||||
try:
|
try:
|
||||||
expression_list = d.assignment_details[0][0]
|
expression_list = d.assignment_details[0][0]
|
||||||
name = expression_list[0].name.names[-1]
|
name = expression_list[0].name.names[-1]
|
||||||
|
|||||||
@@ -243,7 +243,7 @@ def save_parser(path, name, parser, pickling=True):
|
|||||||
|
|
||||||
class ParserPickling(object):
|
class ParserPickling(object):
|
||||||
|
|
||||||
version = 15
|
version = 16
|
||||||
"""
|
"""
|
||||||
Version number (integer) for file system cache.
|
Version number (integer) for file system cache.
|
||||||
|
|
||||||
|
|||||||
@@ -123,7 +123,7 @@ class Evaluator(object):
|
|||||||
names are defined in the statement, `seek_name` returns the result for
|
names are defined in the statement, `seek_name` returns the result for
|
||||||
this name.
|
this name.
|
||||||
|
|
||||||
:param stmt: A `pr.Statement`.
|
:param stmt: A `pr.ExprStmt`.
|
||||||
"""
|
"""
|
||||||
debug.dbg('eval_statement %s (%s)', stmt, seek_name)
|
debug.dbg('eval_statement %s (%s)', stmt, seek_name)
|
||||||
expression_list = stmt.expression_list()
|
expression_list = stmt.expression_list()
|
||||||
|
|||||||
@@ -100,7 +100,7 @@ class NameFinder(object):
|
|||||||
if isinstance(stmt, (pr.Param, pr.Import)) \
|
if isinstance(stmt, (pr.Param, pr.Import)) \
|
||||||
or isinstance(name_list_scope, (pr.Lambda, pr.ListComprehension, er.Instance, InterpreterNamespace)) \
|
or isinstance(name_list_scope, (pr.Lambda, pr.ListComprehension, er.Instance, InterpreterNamespace)) \
|
||||||
or isinstance(scope, compiled.CompiledObject) \
|
or isinstance(scope, compiled.CompiledObject) \
|
||||||
or isinstance(stmt, pr.Statement) and stmt.is_global():
|
or isinstance(stmt, pr.ExprStmt) and stmt.is_global():
|
||||||
# Always reachable.
|
# Always reachable.
|
||||||
result.append(name)
|
result.append(name)
|
||||||
else:
|
else:
|
||||||
@@ -152,7 +152,7 @@ class NameFinder(object):
|
|||||||
"""
|
"""
|
||||||
Returns True except for nested imports and instance variables.
|
Returns True except for nested imports and instance variables.
|
||||||
"""
|
"""
|
||||||
if stmt.isinstance(pr.Statement):
|
if stmt.isinstance(pr.ExprStmt):
|
||||||
if isinstance(name, er.InstanceElement) and not name.is_class_var:
|
if isinstance(name, er.InstanceElement) and not name.is_class_var:
|
||||||
return False
|
return False
|
||||||
elif isinstance(stmt, pr.Import) and stmt.is_nested():
|
elif isinstance(stmt, pr.Import) and stmt.is_nested():
|
||||||
@@ -175,7 +175,7 @@ class NameFinder(object):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
def _name_is_array_assignment(self, name, stmt):
|
def _name_is_array_assignment(self, name, stmt):
|
||||||
if stmt.isinstance(pr.Statement):
|
if stmt.isinstance(pr.ExprStmt):
|
||||||
def is_execution(calls):
|
def is_execution(calls):
|
||||||
for c in calls:
|
for c in calls:
|
||||||
if isinstance(c, (unicode, str, tokenize.Token)):
|
if isinstance(c, (unicode, str, tokenize.Token)):
|
||||||
@@ -224,7 +224,7 @@ class NameFinder(object):
|
|||||||
types += self._handle_for_loops(typ)
|
types += self._handle_for_loops(typ)
|
||||||
elif isinstance(typ, pr.Param):
|
elif isinstance(typ, pr.Param):
|
||||||
types += self._eval_param(typ)
|
types += self._eval_param(typ)
|
||||||
elif typ.isinstance(pr.Statement):
|
elif typ.isinstance(pr.ExprStmt):
|
||||||
if typ.is_global():
|
if typ.is_global():
|
||||||
# global keyword handling.
|
# global keyword handling.
|
||||||
types += evaluator.find_types(typ.parent.parent, str(name))
|
types += evaluator.find_types(typ.parent.parent, str(name))
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ def _check_module(evaluator, module):
|
|||||||
except KeyError:
|
except KeyError:
|
||||||
return get_sys_path()
|
return get_sys_path()
|
||||||
sys_path = list(get_sys_path()) # copy
|
sys_path = list(get_sys_path()) # copy
|
||||||
statements = (p for p in possible_stmts if isinstance(p, pr.Statement))
|
statements = (p for p in possible_stmts if isinstance(p, pr.ExprStmt))
|
||||||
for stmt in statements:
|
for stmt in statements:
|
||||||
expressions = stmt.expression_list()
|
expressions = stmt.expression_list()
|
||||||
if len(expressions) == 1 and isinstance(expressions[0], pr.Call):
|
if len(expressions) == 1 and isinstance(expressions[0], pr.Call):
|
||||||
|
|||||||
Reference in New Issue
Block a user