From 0a4e858d8843ff4370d9ad7176f4ec80fe7546ee Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Wed, 27 Jul 2016 19:15:03 +0200 Subject: [PATCH] Fix a recursion issue and add a test. --- jedi/evaluate/__init__.py | 2 +- jedi/evaluate/iterable.py | 1 - jedi/evaluate/recursion.py | 1 - test/completion/classes.py | 14 ++++++++++++++ test/completion/comprehensions.py | 2 -- 5 files changed, 15 insertions(+), 5 deletions(-) diff --git a/jedi/evaluate/__init__.py b/jedi/evaluate/__init__.py index 0ca47aee..37e0cd1c 100644 --- a/jedi/evaluate/__init__.py +++ b/jedi/evaluate/__init__.py @@ -275,7 +275,7 @@ class Evaluator(object): return self._eval_element_not_cached(element) return self._eval_element_cached(element) - @memoize_default(evaluator_is_first_arg=True) + @memoize_default(default=set(), evaluator_is_first_arg=True) def _eval_element_cached(self, element): return self._eval_element_not_cached(element) diff --git a/jedi/evaluate/iterable.py b/jedi/evaluate/iterable.py index 79adfcd2..9b06ab53 100644 --- a/jedi/evaluate/iterable.py +++ b/jedi/evaluate/iterable.py @@ -183,7 +183,6 @@ class Comprehension(IterableWrapper): last_comp = list(comp_for.get_comp_fors())[-1] return helpers.deep_ast_copy(self._get_comprehension().children[index], parent=last_comp) - @memoize_default() def _iterate(self): def nested(comp_fors): comp_for = comp_fors[0] diff --git a/jedi/evaluate/recursion.py b/jedi/evaluate/recursion.py index a95ba3e0..9b95fad5 100644 --- a/jedi/evaluate/recursion.py +++ b/jedi/evaluate/recursion.py @@ -15,7 +15,6 @@ from jedi.evaluate import iterable def recursion_decorator(func): def run(evaluator, stmt, *args, **kwargs): rec_detect = evaluator.recursion_detector - # print stmt, len(self.node_statements()) if rec_detect.push_stmt(stmt): return set() else: diff --git a/test/completion/classes.py b/test/completion/classes.py index 35b0619c..4308a1a5 100644 --- a/test/completion/classes.py +++ b/test/completion/classes.py @@ -308,6 +308,20 @@ Recursion().a #? Recursion().b + +class X(): + def __init__(self): + self.recursive = [1, 3] + + def annoying(self): + self.recursive = [self.recursive[0]] + + def recurse(self): + self.recursive = [self.recursive[1]] + +#? int() +X().recursive[0] + # ----------------- # ducktyping # ----------------- diff --git a/test/completion/comprehensions.py b/test/completion/comprehensions.py index 78e4f4b3..a5778a92 100644 --- a/test/completion/comprehensions.py +++ b/test/completion/comprehensions.py @@ -172,5 +172,3 @@ def x(): #? 22 [a for a in h if hio] if hio: pass - -