diff --git a/jedi/evaluate/interfaces.py b/jedi/evaluate/interfaces.py new file mode 100644 index 00000000..cee5b244 --- /dev/null +++ b/jedi/evaluate/interfaces.py @@ -0,0 +1,3 @@ +class Iterable(): + """Parent class of Generator and Array, exists due to import restrictions.""" + pass diff --git a/jedi/evaluate/recursion.py b/jedi/evaluate/recursion.py index d9407e51..baa1bc9d 100644 --- a/jedi/evaluate/recursion.py +++ b/jedi/evaluate/recursion.py @@ -11,6 +11,7 @@ from jedi.parser import representation as pr from jedi import debug from jedi import settings from jedi.evaluate import builtin +from jedi.evaluate import interfaces class RecursionDecorator(object): @@ -131,7 +132,7 @@ class ExecutionRecursionDecorator(object): if cls.execution_count > settings.max_executions: return True - if isinstance(execution.base, (er.Generator, er.Array)): + if isinstance(execution.base, interfaces.Iterable): return False module = execution.get_parent_until() if evaluate_generator or module == builtin.Builtin.scope: diff --git a/jedi/evaluate/representation.py b/jedi/evaluate/representation.py index 3ef1f4f1..983efb0c 100644 --- a/jedi/evaluate/representation.py +++ b/jedi/evaluate/representation.py @@ -25,6 +25,7 @@ from jedi.evaluate import builtin from jedi.evaluate import recursion from jedi import docstrings from jedi import dynamic +from jedi.evaluate.interfaces import Iterable class Executable(pr.IsScope): @@ -778,7 +779,7 @@ class Execution(Executable): (type(self).__name__, self._decorated) -class Generator(use_metaclass(cache.CachedMetaClass, pr.Base)): +class Generator(use_metaclass(cache.CachedMetaClass, pr.Base, Iterable)): """ Cares for `yield` statements. """ def __init__(self, func, var_args): super(Generator, self).__init__() @@ -824,7 +825,7 @@ class Generator(use_metaclass(cache.CachedMetaClass, pr.Base)): return "<%s of %s>" % (type(self).__name__, self.func) -class Array(use_metaclass(cache.CachedMetaClass, pr.Base)): +class Array(use_metaclass(cache.CachedMetaClass, pr.Base, Iterable)): """ Used as a mirror to pr.Array, if needed. It defines some getter methods which are important in this module.