1
0
forked from VimPlug/jedi

also fixed nested list comprehensions

This commit is contained in:
David Halter
2013-02-21 01:39:49 +04:30
parent 4d3267b24f
commit 6b5295bc40
3 changed files with 7 additions and 5 deletions

View File

@@ -568,7 +568,7 @@ def follow_call_list(call_list, follow_array=False):
# create a for loop, which does the same as list comprehensions # create a for loop, which does the same as list comprehensions
loop = pr.ForFlow(module, [input], lc.stmt.start_pos, lc.middle, True) loop = pr.ForFlow(module, [input], lc.stmt.start_pos, lc.middle, True)
loop.parent = lc.parent if parent is None else parent loop.parent = parent or lc.get_parent_until(pr.IsScope)
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)

View File

@@ -435,7 +435,8 @@ class Parser(object):
st = pr.Statement(self.module, src, [], [], [], st = pr.Statement(self.module, src, [], [], [],
toks, first_pos, self.end_pos) toks, first_pos, self.end_pos)
tok = pr.ListComprehension(st, middle, in_clause) tok = pr.ListComprehension(st, middle, in_clause,
self.scope)
tok_list.append(tok) tok_list.append(tok)
if list_comp: if list_comp:
string = '' string = ''

View File

@@ -93,8 +93,9 @@ class Simple(Base):
def __repr__(self): def __repr__(self):
code = self.get_code().replace('\n', ' ') code = self.get_code().replace('\n', ' ')
# TODO (this todo doesn't belong here) positions are not added right.
return "<%s: %s@%s,%s>" % \ return "<%s: %s@%s,%s>" % \
(type(self).__name__, code, self.start_pos[0], self.start_pos[0]) (type(self).__name__, code, self.start_pos[0], self.start_pos[1])
class IsScope(Base): class IsScope(Base):
@@ -1174,13 +1175,13 @@ class Name(Simple):
class ListComprehension(Base): class ListComprehension(Base):
""" Helper class for list comprehensions """ """ Helper class for list comprehensions """
def __init__(self, stmt, middle, input): def __init__(self, stmt, middle, input, parent):
self.stmt = stmt self.stmt = stmt
self.middle = middle self.middle = middle
self.input = input self.input = input
for s in [stmt, middle, input]: for s in [stmt, middle, input]:
s.parent = self s.parent = self
self.parent = None self.parent = parent
def get_parent_until(self, *args, **kwargs): def get_parent_until(self, *args, **kwargs):
return Simple.get_parent_until(self, *args, **kwargs) return Simple.get_parent_until(self, *args, **kwargs)