1
0
forked from VimPlug/jedi

also moved scan_statement away from dynamic

This commit is contained in:
Dave Halter
2014-01-07 15:06:11 +01:00
parent a5fa739960
commit 359f3ed4a9
4 changed files with 41 additions and 43 deletions

View File

@@ -31,7 +31,6 @@ from jedi.evaluate import Evaluator, filter_private_variable
from jedi.evaluate import representation as er from jedi.evaluate import representation as er
from jedi.evaluate import builtin from jedi.evaluate import builtin
from jedi.evaluate import imports from jedi.evaluate import imports
from jedi.evaluate import dynamic
from jedi.evaluate import helpers from jedi.evaluate import helpers
@@ -767,7 +766,7 @@ def usages(evaluator, definitions, search_name, mods):
if set(f) & set(definitions): if set(f) & set(definitions):
names.append(api_classes.Usage(evaluator, name_part, stmt)) names.append(api_classes.Usage(evaluator, name_part, stmt))
else: else:
for call in dynamic._scan_statement(stmt, search_name, for call in helpers.scan_statement(stmt, search_name,
assignment_details=True): assignment_details=True):
names += check_call(call) names += check_call(call)
return names return names

View File

@@ -103,7 +103,7 @@ def search_params(evaluator, param):
for stmt in possible_stmts: for stmt in possible_stmts:
if isinstance(stmt, pr.Import): if isinstance(stmt, pr.Import):
continue continue
calls = _scan_statement(stmt, func_name) calls = helpers.scan_statement(stmt, func_name)
for c in calls: for c in calls:
# no execution means that params cannot be set # no execution means that params cannot be set
call_path = list(c.generate_call_path()) call_path = list(c.generate_call_path())
@@ -182,39 +182,3 @@ def search_params(evaluator, param):
func.listeners.remove(listener) func.listeners.remove(listener)
return result 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

View File

@@ -168,3 +168,39 @@ def search_call_signatures(stmt, pos):
arr.parent.execution = None arr.parent.execution = None
return call if isinstance(call, pr.Call) else None, index, False return call if isinstance(call, pr.Call) else None, index, False
return None, 0, 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

View File

@@ -6,6 +6,7 @@ from jedi import settings
from jedi._compatibility import use_metaclass, is_py3k from jedi._compatibility import use_metaclass, is_py3k
from jedi.parser import representation as pr from jedi.parser import representation as pr
from jedi.evaluate import builtin from jedi.evaluate import builtin
from jedi.evaluate import helpers
from jedi.evaluate.cache import CachedMetaClass, memoize_default from jedi.evaluate.cache import CachedMetaClass, memoize_default
@@ -329,9 +330,7 @@ def _check_array_additions(evaluator, compare_array, module, is_list):
# check recursion # check recursion
continue continue
# TODO should be deleted in the future res += check_calls(helpers.scan_statement(stmt, n), n)
from jedi.evaluate import dynamic
res += check_calls(dynamic._scan_statement(stmt, n), n)
evaluator.recursion_detector.pop_stmt() evaluator.recursion_detector.pop_stmt()
# reset settings # reset settings
settings.dynamic_params_for_other_modules = temp_param_add settings.dynamic_params_for_other_modules = temp_param_add