From 43e54b6173ee20272815520f6672bcd30acdf8f0 Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Wed, 11 Jun 2014 21:54:18 +0200 Subject: [PATCH] list comprehensions should be able to serve as an input for dynamic params as well. --- jedi/evaluate/__init__.py | 9 +++++---- jedi/evaluate/helpers.py | 3 +++ test/completion/dynamic.py | 10 ++++++++++ 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/jedi/evaluate/__init__.py b/jedi/evaluate/__init__.py index b6ec7b49..ea76ed76 100644 --- a/jedi/evaluate/__init__.py +++ b/jedi/evaluate/__init__.py @@ -206,10 +206,10 @@ class Evaluator(object): # The string tokens are just operations (+, -, etc.) elif isinstance(element, compiled.CompiledObject): return [element] - elif not isinstance(element, Token): - return self.eval_call(element) - else: + elif isinstance(element, Token): return [] + else: + return self.eval_call(element) def eval_call(self, call): """Follow a call is following a function, variable, string, etc.""" @@ -219,7 +219,8 @@ class Evaluator(object): s = call while not s.parent.isinstance(pr.IsScope): s = s.parent - return self.eval_call_path(path, s.parent, s.start_pos) + par = s.parent + return self.eval_call_path(path, par, s.start_pos) def eval_call_path(self, path, scope, position): """ diff --git a/jedi/evaluate/helpers.py b/jedi/evaluate/helpers.py index 5e3d7d60..315a6842 100644 --- a/jedi/evaluate/helpers.py +++ b/jedi/evaluate/helpers.py @@ -161,6 +161,9 @@ def scan_statement_for_calls(stmt, search_name, assignment_details=False): if s_new.execution is not None: result += scan_array(s_new.execution, search_name) s_new = s_new.next + elif isinstance(c, pr.ListComprehension): + for s in c.stmt, c.middle, c.input: + result += scan_statement_for_calls(s, search_name) return result diff --git a/test/completion/dynamic.py b/test/completion/dynamic.py index 50a4ea9d..7214af13 100644 --- a/test/completion/dynamic.py +++ b/test/completion/dynamic.py @@ -394,3 +394,13 @@ def third(): return list(b) #? third()[0] + +# ----------------- +# list comprehensions +# ----------------- + +def from_comprehension(foo): + #? float() + return foo + +[from_comprehension(1.0) for n in (1,)]