forked from VimPlug/jedi
get rid of is_list_comp boolean in favor of a direct check of ListComprehensionFlow
This commit is contained in:
@@ -260,7 +260,7 @@ class Script(object):
|
|||||||
if not is_completion:
|
if not is_completion:
|
||||||
# goto_definition returns definitions of its statements if the
|
# goto_definition returns definitions of its statements if the
|
||||||
# cursor is on the assignee. By changing the start_pos of our
|
# cursor is on the assignee. By changing the start_pos of our
|
||||||
# "pseud" statement, the Jedi evaluator can find the assignees.
|
# "pseudo" statement, the Jedi evaluator can find the assignees.
|
||||||
if user_stmt is not None:
|
if user_stmt is not None:
|
||||||
eval_stmt.start_pos = user_stmt.end_pos
|
eval_stmt.start_pos = user_stmt.end_pos
|
||||||
scopes = self._evaluator.eval_statement(eval_stmt)
|
scopes = self._evaluator.eval_statement(eval_stmt)
|
||||||
|
|||||||
@@ -245,7 +245,7 @@ def save_parser(path, name, parser, pickling=True):
|
|||||||
|
|
||||||
class ParserPickling(object):
|
class ParserPickling(object):
|
||||||
|
|
||||||
version = 11
|
version = 12
|
||||||
"""
|
"""
|
||||||
Version number (integer) for file system cache.
|
Version number (integer) for file system cache.
|
||||||
|
|
||||||
|
|||||||
@@ -83,7 +83,6 @@ from jedi.evaluate import stdlib
|
|||||||
from jedi.evaluate import finder
|
from jedi.evaluate import finder
|
||||||
from jedi.evaluate import compiled
|
from jedi.evaluate import compiled
|
||||||
from jedi.evaluate import precedence
|
from jedi.evaluate import precedence
|
||||||
from jedi.evaluate import helpers
|
|
||||||
|
|
||||||
|
|
||||||
class Evaluator(object):
|
class Evaluator(object):
|
||||||
@@ -379,19 +378,8 @@ def _evaluate_list_comprehension(lc, parent=None):
|
|||||||
if isinstance(nested_lc, pr.ListComprehension):
|
if isinstance(nested_lc, pr.ListComprehension):
|
||||||
# is nested LC
|
# is nested LC
|
||||||
input = nested_lc.stmt
|
input = nested_lc.stmt
|
||||||
loop = ListComprehensionFlow(lc, input, parent)
|
loop = iterable.ListComprehensionFlow(lc, input, parent)
|
||||||
|
|
||||||
if isinstance(nested_lc, pr.ListComprehension):
|
if isinstance(nested_lc, pr.ListComprehension):
|
||||||
loop = _evaluate_list_comprehension(nested_lc, loop)
|
loop = _evaluate_list_comprehension(nested_lc, loop)
|
||||||
return loop
|
return loop
|
||||||
|
|
||||||
|
|
||||||
class ListComprehensionFlow(pr.ForFlow):
|
|
||||||
"""Fake implementation to pretend being a ForFlow."""
|
|
||||||
def __init__(self, list_comprehension, input, parent):
|
|
||||||
lc = list_comprehension
|
|
||||||
sup = super(ListComprehensionFlow, self)
|
|
||||||
sup.__init__(helpers.FakeSubModule, [input], lc.parent.start_pos,
|
|
||||||
lc.middle, True)
|
|
||||||
self.parent = parent or lc.get_parent_until(pr.IsScope)
|
|
||||||
self.list_comprehension = list_comprehension
|
|
||||||
|
|||||||
@@ -316,8 +316,7 @@ class NameFinder(object):
|
|||||||
return res_new + evaluator.eval_statement(param, seek_name=unicode(self.name_str))
|
return res_new + evaluator.eval_statement(param, seek_name=unicode(self.name_str))
|
||||||
|
|
||||||
def _handle_for_loops(self, loop):
|
def _handle_for_loops(self, loop):
|
||||||
# Take the first statement (for has always only
|
# Take the first statement (for has always only one`in`).
|
||||||
# one, remember `in`). And follow it.
|
|
||||||
if not loop.inputs:
|
if not loop.inputs:
|
||||||
return []
|
return []
|
||||||
result = iterable.get_iterator_types(self._evaluator.eval_statement(loop.inputs[0]))
|
result = iterable.get_iterator_types(self._evaluator.eval_statement(loop.inputs[0]))
|
||||||
@@ -494,7 +493,7 @@ def get_names_of_scope(evaluator, scope, position=None, star_search=True, includ
|
|||||||
yield scope, _get_defined_names_for_position(scope, position, in_func_scope)
|
yield scope, _get_defined_names_for_position(scope, position, in_func_scope)
|
||||||
except StopIteration:
|
except StopIteration:
|
||||||
reraise(common.MultiLevelStopIteration, sys.exc_info()[2])
|
reraise(common.MultiLevelStopIteration, sys.exc_info()[2])
|
||||||
if scope.isinstance(pr.ForFlow) and scope.is_list_comp:
|
if scope.isinstance(iterable.ListComprehensionFlow):
|
||||||
# is a list comprehension
|
# is a list comprehension
|
||||||
yield scope, scope.get_defined_names(is_internal_call=True)
|
yield scope, scope.get_defined_names(is_internal_call=True)
|
||||||
|
|
||||||
|
|||||||
@@ -497,3 +497,13 @@ def create_indexes_or_slices(evaluator, index_array):
|
|||||||
return (Slice(evaluator, start, stop, step),)
|
return (Slice(evaluator, start, stop, step),)
|
||||||
else:
|
else:
|
||||||
return tuple(evaluator.process_precedence_element(prec))
|
return tuple(evaluator.process_precedence_element(prec))
|
||||||
|
|
||||||
|
|
||||||
|
class ListComprehensionFlow(pr.ForFlow):
|
||||||
|
"""Fake implementation to pretend being a ForFlow."""
|
||||||
|
def __init__(self, list_comprehension, input, parent):
|
||||||
|
lc = list_comprehension
|
||||||
|
sup = super(ListComprehensionFlow, self)
|
||||||
|
sup.__init__(helpers.FakeSubModule, [input], lc.parent.start_pos, lc.middle)
|
||||||
|
self.parent = parent or lc.get_parent_until(pr.IsScope)
|
||||||
|
self.list_comprehension = list_comprehension
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ class _RecursionNode(object):
|
|||||||
if not other:
|
if not other:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
is_list_comp = lambda x: isinstance(x, pr.ForFlow) and x.is_list_comp
|
is_list_comp = lambda x: isinstance(x, iterable.ListComprehensionFlow)
|
||||||
return self.script == other.script \
|
return self.script == other.script \
|
||||||
and self.position == other.position \
|
and self.position == other.position \
|
||||||
and not is_list_comp(self.stmt.parent) \
|
and not is_list_comp(self.stmt.parent) \
|
||||||
|
|||||||
@@ -687,11 +687,10 @@ class ForFlow(Flow):
|
|||||||
"""
|
"""
|
||||||
Used for the for loop, because there are two statement parts.
|
Used for the for loop, because there are two statement parts.
|
||||||
"""
|
"""
|
||||||
def __init__(self, module, inputs, start_pos, set_stmt, is_list_comp=False):
|
def __init__(self, module, inputs, start_pos, set_stmt):
|
||||||
super(ForFlow, self).__init__(module, 'for', inputs, start_pos)
|
super(ForFlow, self).__init__(module, 'for', inputs, start_pos)
|
||||||
|
|
||||||
self.set_stmt = set_stmt
|
self.set_stmt = set_stmt
|
||||||
self.is_list_comp = is_list_comp
|
|
||||||
|
|
||||||
if set_stmt is not None:
|
if set_stmt is not None:
|
||||||
set_stmt.parent = self.use_as_parent
|
set_stmt.parent = self.use_as_parent
|
||||||
|
|||||||
Reference in New Issue
Block a user