From 1625834f81826a3f620b4f3b7268e07434b0237c Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Sat, 8 Apr 2017 14:16:00 +0200 Subject: [PATCH] Move get_comp_fors out of the parser. --- jedi/evaluate/iterable.py | 3 ++- jedi/parser/python/tree.py | 10 ---------- jedi/parser_utils.py | 13 +++++++++++++ 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/jedi/evaluate/iterable.py b/jedi/evaluate/iterable.py index f482fac4..800dbcdc 100644 --- a/jedi/evaluate/iterable.py +++ b/jedi/evaluate/iterable.py @@ -35,6 +35,7 @@ from jedi.evaluate import recursion from jedi.evaluate.cache import memoize_default from jedi.evaluate.filters import DictFilter, AbstractNameDefinition, \ ParserTreeFilter +from jedi.parser_utils import get_comp_fors class AbstractSequence(context.Context): @@ -264,7 +265,7 @@ class Comprehension(AbstractSequence): @memoize_default(default=[]) @common.to_list def _iterate(self): - comp_fors = tuple(self._get_comp_for().get_comp_fors()) + comp_fors = tuple(get_comp_fors(self._get_comp_for())) for result in self._nested(comp_fors): yield result diff --git a/jedi/parser/python/tree.py b/jedi/parser/python/tree.py index 6d052f3d..df77311e 100644 --- a/jedi/parser/python/tree.py +++ b/jedi/parser/python/tree.py @@ -1120,16 +1120,6 @@ class CompFor(PythonBaseNode): type = 'comp_for' __slots__ = () - def get_comp_fors(self): - yield self - last = self.children[-1] - while True: - if isinstance(last, CompFor): - yield last - elif not last.type == 'comp_if': - break - last = last.children[-1] - def is_scope(self): return True diff --git a/jedi/parser_utils.py b/jedi/parser_utils.py index 5feb6518..285b4913 100644 --- a/jedi/parser_utils.py +++ b/jedi/parser_utils.py @@ -1,3 +1,5 @@ +from jedi.parser.python import tree + _EXECUTE_NODES = set([ 'funcdef', 'classdef', 'import_from', 'import_name', 'test', 'or_test', 'and_test', 'not_test', 'comparison', 'expr', 'xor_expr', 'and_expr', @@ -45,3 +47,14 @@ def get_executable_nodes(node, last_added=False): result += get_executable_nodes(child, last_added) return result + + +def get_comp_fors(comp_for): + yield comp_for + last = comp_for.children[-1] + while True: + if last.type == 'comp_for': + yield last + elif not last.type == 'comp_if': + break + last = last.children[-1]