first step in refactoring call_signature_array_for_pos, use original_call as a param.

This commit is contained in:
Dave Halter
2014-08-18 13:39:01 +02:00
parent 9f38f10366
commit 542648f5a0
+8 -10
View File
@@ -79,7 +79,7 @@ def call_signature_array_for_pos(stmt, pos):
""" """
Searches for the array and position of a tuple. Searches for the array and position of a tuple.
""" """
def search_array(arr, pos): def search_array(arr, pos, origin_call=None):
accepted_types = pr.Array.TUPLE, pr.Array.NOARRAY accepted_types = pr.Array.TUPLE, pr.Array.NOARRAY
if arr.type == 'dict': if arr.type == 'dict':
for stmt in arr.values + arr.keys: for stmt in arr.values + arr.keys:
@@ -94,22 +94,20 @@ def call_signature_array_for_pos(stmt, pos):
# TODO couldn't we merge with the len(arr) == 0 check? # TODO couldn't we merge with the len(arr) == 0 check?
if arr.start_pos < pos <= stmt.end_pos: if arr.start_pos < pos <= stmt.end_pos:
if arr.type in accepted_types and isinstance(arr.parent, pr.Call): if arr.type in accepted_types and isinstance(origin_call, pr.Call):
return arr, i return arr, i
if len(arr) == 0 and arr.start_pos < pos < arr.end_pos: if len(arr) == 0 and arr.start_pos < pos < arr.end_pos:
if arr.type in accepted_types and isinstance(arr.parent, pr.Call): if arr.type in accepted_types and isinstance(origin_call, pr.Call):
return arr, 0 return arr, 0
return None, 0 return None, 0
def search_call(call, pos): def search_call(call, pos, origin_call=None):
arr, index = None, 0 arr, index = None, 0
if call.next is not None: if call.next is not None:
if isinstance(call.next, pr.Array): method = search_array if isinstance(call.next, pr.Array) else search_call
arr, index = search_array(call.next, pos) arr, index = method(call.next, pos, origin_call or call)
else:
arr, index = search_call(call.next, pos)
if not arr and call.execution is not None: if not arr and call.execution is not None:
arr, index = search_array(call.execution, pos) arr, index = search_array(call.execution, pos, origin_call)
return arr, index return arr, index
if stmt.start_pos >= pos >= stmt.end_pos: if stmt.start_pos >= pos >= stmt.end_pos:
@@ -120,7 +118,7 @@ def call_signature_array_for_pos(stmt, pos):
if isinstance(command, pr.Array): if isinstance(command, pr.Array):
arr, index = search_array(command, pos) arr, index = search_array(command, pos)
elif isinstance(command, pr.StatementElement): elif isinstance(command, pr.StatementElement):
arr, index = search_call(command, pos) arr, index = search_call(command, pos, command)
if arr is not None: if arr is not None:
return arr, index return arr, index
return None, 0 return None, 0