From 359f3ed4a989a963d02559d69e068d642d6877f8 Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Tue, 7 Jan 2014 15:06:11 +0100 Subject: [PATCH] also moved scan_statement away from dynamic --- jedi/api.py | 5 ++--- jedi/evaluate/dynamic.py | 38 +------------------------------------- jedi/evaluate/helpers.py | 36 ++++++++++++++++++++++++++++++++++++ jedi/evaluate/iterable.py | 5 ++--- 4 files changed, 41 insertions(+), 43 deletions(-) diff --git a/jedi/api.py b/jedi/api.py index 3ce5d174..2d9ae7ba 100644 --- a/jedi/api.py +++ b/jedi/api.py @@ -31,7 +31,6 @@ from jedi.evaluate import Evaluator, filter_private_variable from jedi.evaluate import representation as er from jedi.evaluate import builtin from jedi.evaluate import imports -from jedi.evaluate import dynamic from jedi.evaluate import helpers @@ -767,8 +766,8 @@ def usages(evaluator, definitions, search_name, mods): if set(f) & set(definitions): names.append(api_classes.Usage(evaluator, name_part, stmt)) else: - for call in dynamic._scan_statement(stmt, search_name, - assignment_details=True): + for call in helpers.scan_statement(stmt, search_name, + assignment_details=True): names += check_call(call) return names diff --git a/jedi/evaluate/dynamic.py b/jedi/evaluate/dynamic.py index 4a59ca1c..8489de07 100644 --- a/jedi/evaluate/dynamic.py +++ b/jedi/evaluate/dynamic.py @@ -103,7 +103,7 @@ def search_params(evaluator, param): for stmt in possible_stmts: if isinstance(stmt, pr.Import): continue - calls = _scan_statement(stmt, func_name) + calls = helpers.scan_statement(stmt, func_name) for c in calls: # no execution means that params cannot be set call_path = list(c.generate_call_path()) @@ -182,39 +182,3 @@ def search_params(evaluator, param): func.listeners.remove(listener) return result - - -def _scan_statement(stmt, search_name, assignment_details=False): - """ Returns the function Call that match search_name in an Array. """ - def scan_array(arr, search_name): - result = [] - if arr.type == pr.Array.DICT: - for key_stmt, value_stmt in arr.items(): - result += _scan_statement(key_stmt, search_name) - result += _scan_statement(value_stmt, search_name) - else: - for stmt in arr: - result += _scan_statement(stmt, search_name) - return result - - check = list(stmt.expression_list()) - if assignment_details: - for expression_list, op in stmt.assignment_details: - check += expression_list - - result = [] - for c in check: - if isinstance(c, pr.Array): - result += scan_array(c, search_name) - elif isinstance(c, pr.Call): - s_new = c - while s_new is not None: - n = s_new.name - if isinstance(n, pr.Name) and search_name in n.names: - result.append(c) - - if s_new.execution is not None: - result += scan_array(s_new.execution, search_name) - s_new = s_new.next - - return result diff --git a/jedi/evaluate/helpers.py b/jedi/evaluate/helpers.py index 5e195b48..f2df44ca 100644 --- a/jedi/evaluate/helpers.py +++ b/jedi/evaluate/helpers.py @@ -168,3 +168,39 @@ def search_call_signatures(stmt, pos): arr.parent.execution = None return call if isinstance(call, pr.Call) else None, index, False return None, 0, False + + +def scan_statement(stmt, search_name, assignment_details=False): + """ Returns the function Call that match search_name in an Array. """ + def scan_array(arr, search_name): + result = [] + if arr.type == pr.Array.DICT: + for key_stmt, value_stmt in arr.items(): + result += scan_statement(key_stmt, search_name) + result += scan_statement(value_stmt, search_name) + else: + for stmt in arr: + result += scan_statement(stmt, search_name) + return result + + check = list(stmt.expression_list()) + if assignment_details: + for expression_list, op in stmt.assignment_details: + check += expression_list + + result = [] + for c in check: + if isinstance(c, pr.Array): + result += scan_array(c, search_name) + elif isinstance(c, pr.Call): + s_new = c + while s_new is not None: + n = s_new.name + if isinstance(n, pr.Name) and search_name in n.names: + result.append(c) + + if s_new.execution is not None: + result += scan_array(s_new.execution, search_name) + s_new = s_new.next + + return result diff --git a/jedi/evaluate/iterable.py b/jedi/evaluate/iterable.py index 84d1b6ee..ec1fafc6 100644 --- a/jedi/evaluate/iterable.py +++ b/jedi/evaluate/iterable.py @@ -6,6 +6,7 @@ from jedi import settings from jedi._compatibility import use_metaclass, is_py3k from jedi.parser import representation as pr from jedi.evaluate import builtin +from jedi.evaluate import helpers from jedi.evaluate.cache import CachedMetaClass, memoize_default @@ -329,9 +330,7 @@ def _check_array_additions(evaluator, compare_array, module, is_list): # check recursion continue - # TODO should be deleted in the future - from jedi.evaluate import dynamic - res += check_calls(dynamic._scan_statement(stmt, n), n) + res += check_calls(helpers.scan_statement(stmt, n), n) evaluator.recursion_detector.pop_stmt() # reset settings settings.dynamic_params_for_other_modules = temp_param_add