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
+1 -37
View File
@@ -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
+36
View File
@@ -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
+2 -3
View File
@@ -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