1
0
forked from VimPlug/jedi

parser.Tree.ForStmt got more utility functions.

This commit is contained in:
Dave Halter
2015-11-08 22:29:49 +01:00
parent 99739aa640
commit 4549157d39
2 changed files with 17 additions and 2 deletions

View File

@@ -151,11 +151,11 @@ class Evaluator(object):
for_stmt = stmt.get_parent_until(tree.ForStmt) for_stmt = stmt.get_parent_until(tree.ForStmt)
if isinstance(for_stmt, tree.ForStmt) and types \ if isinstance(for_stmt, tree.ForStmt) and types \
and isinstance(for_stmt.children[1], tree.Name): and for_stmt.defines_one_name():
# Iterate through result and add the values, that's possible # Iterate through result and add the values, that's possible
# only in for loops without clutter, because they are # only in for loops without clutter, because they are
# predictable. Also only do it, if the variable is not a tuple. # predictable. Also only do it, if the variable is not a tuple.
for_iterable = self.eval_element(for_stmt.children[3]) for_iterable = self.eval_element(for_stmt.get_input_node())
ordered = iterable.ordered_elements_of_iterable(self, for_iterable, types) ordered = iterable.ordered_elements_of_iterable(self, for_iterable, types)
for index_types in ordered: for index_types in ordered:

View File

@@ -988,6 +988,21 @@ class ForStmt(Flow):
for node_to_execute in child.nodes_to_execute(): for node_to_execute in child.nodes_to_execute():
yield node_to_execute yield node_to_execute
def get_input_node(self):
"""
Returns the input node ``y`` from: ``for x in y:``.
"""
return self.children[3]
def defines_one_name(self):
"""
Returns True if only one name is returned: ``for x in y``.
Returns False if the for loop is more complicated: ``for x, z in y``.
:returns: bool
"""
return self.children[1].type == 'name'
class TryStmt(Flow): class TryStmt(Flow):
type = 'try_stmt' type = 'try_stmt'