From ccc325616af340ee8195302c1c8634d58e8ade81 Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Mon, 19 Sep 2016 05:28:35 +0200 Subject: [PATCH] Temporarily fix an issue with list comprehensions. --- jedi/evaluate/finder.py | 13 +++++++++---- jedi/settings.py | 2 +- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/jedi/evaluate/finder.py b/jedi/evaluate/finder.py index 2095959e..b9d9609d 100644 --- a/jedi/evaluate/finder.py +++ b/jedi/evaluate/finder.py @@ -36,7 +36,7 @@ from jedi.evaluate import helpers from jedi.evaluate.cache import memoize_default -def filter_after_position(names, position): +def filter_after_position(names, position, origin=None): """ Removes all names after a certain position. If position is None, just returns the names list. @@ -47,8 +47,13 @@ def filter_after_position(names, position): names_new = [] for n in names: # Filter positions and also allow list comprehensions and lambdas. - if n.start_pos[0] is not None and n.start_pos < position \ - or isinstance(n.get_definition(), (tree.CompFor, tree.Lambda)): + if n.start_pos[0] is not None and n.start_pos < position: + names_new.append(n) + elif isinstance(n.get_definition(), (tree.CompFor, tree.Lambda)): + if origin is not None and origin.get_definition() != n.get_definition(): + # This is extremely hacky. A transition that we have to use + # until we get rid of names_dicts. + continue names_new.append(n) return names_new @@ -67,7 +72,7 @@ def filter_definition_names(names, origin, position=None): if not (isinstance(scope, er.FunctionExecution) and isinstance(scope.base, er.LambdaWrapper)): - names = filter_after_position(names, position) + names = filter_after_position(names, position, origin) names = [name for name in names if name.is_definition()] # Private name mangling (compile.c) disallows access on names diff --git a/jedi/settings.py b/jedi/settings.py index b5e15759..13dcfd45 100644 --- a/jedi/settings.py +++ b/jedi/settings.py @@ -130,7 +130,7 @@ On Linux, if environment variable ``$XDG_CACHE_HOME`` is set, # parser # ---------------- -fast_parser = False +fast_parser = True """ Use the fast parser. This means that reparsing is only being done if something has been changed e.g. to a function. If this happens, only the