1
0
forked from VimPlug/jedi

iterable cleanup.

This commit is contained in:
Dave Halter
2014-12-16 17:45:01 +01:00
parent 580dcb06ff
commit f702a91813
+2 -94
View File
@@ -29,7 +29,6 @@ from jedi._compatibility import use_metaclass, is_py3, unicode
from jedi.parser import tree as pr from jedi.parser import tree as pr
from jedi.evaluate import compiled from jedi.evaluate import compiled
from jedi.evaluate import helpers from jedi.evaluate import helpers
from jedi.evaluate import precedence
from jedi.evaluate.cache import CachedMetaClass, memoize_default, NO_DEFAULT from jedi.evaluate.cache import CachedMetaClass, memoize_default, NO_DEFAULT
from jedi.cache import underscore_memoization from jedi.cache import underscore_memoization
from jedi.evaluate import analysis from jedi.evaluate import analysis
@@ -450,33 +449,7 @@ def _check_array_additions(evaluator, compare_array, module, is_list):
if not settings.dynamic_array_additions or isinstance(module, compiled.CompiledObject): if not settings.dynamic_array_additions or isinstance(module, compiled.CompiledObject):
return [] return []
def check_power(power): def check_additions(arglist, add_name):
"""
The power node is compared with the original Array.
"""
# TODO remove unused.
result = []
x = evaluator.eval_element(power)
#print(power, compare_array in x, x, compare_array)
if 0:
call_path = list(c.generate_call_path())
call_path_simple = [unicode(n) if isinstance(n, pr.Name) else n
for n in call_path]
separate_index = call_path_simple.index(add_name)
if add_name == call_path_simple[-1] or separate_index == 0:
# this means that there is no execution -> [].append
# or the keyword is at the start -> append()
continue
backtrack_path = iter(call_path[:separate_index])
position = c.start_pos
scope = c.get_parent_scope()
found = evaluator.eval_call_path(backtrack_path, scope, position)
if not compare_array in found:
continue
def get_additions(arglist, add_name):
params = list(param.Arguments(evaluator, arglist).unpack()) params = list(param.Arguments(evaluator, arglist).unpack())
result = [] result = []
if add_name in ['insert']: if add_name in ['insert']:
@@ -489,30 +462,6 @@ def _check_array_additions(evaluator, compare_array, module, is_list):
iterators = unite(evaluator.eval_element(node) for node in nodes) iterators = unite(evaluator.eval_element(node) for node in nodes)
result += get_iterator_types(iterators) result += get_iterator_types(iterators)
return result return result
# TODO REMOVE
"""
params = call_path[separate_index + 1]
if not params.values:
#continue # no params: just ignore it
pass
if add_name in ['append', 'add']:
for p in params:
result += evaluator.eval_statement(p)
elif add_name in ['insert']:
try:
second_param = params[1]
except IndexError:
#continue
pass
else:
result += evaluator.eval_statement(second_param)
elif add_name in ['extend', 'update']:
for p in params:
iterators = evaluator.eval_statement(p)
result += get_iterator_types(iterators)
return result
"""
from jedi.evaluate import representation as er, param from jedi.evaluate import representation as er, param
@@ -580,7 +529,7 @@ def _check_array_additions(evaluator, compare_array, module, is_list):
continue continue
if compare_array in evaluator.eval_element(power): if compare_array in evaluator.eval_element(power):
# The arrays match. Now add the results # The arrays match. Now add the results
added_types += get_additions(execution_trailer.children[1], add_name) added_types += check_additions(execution_trailer.children[1], add_name)
evaluator.recursion_detector.pop_stmt() evaluator.recursion_detector.pop_stmt()
# reset settings # reset settings
@@ -615,30 +564,11 @@ class ArrayInstance(IterableWrapper):
lists/sets are too complicated too handle that. lists/sets are too complicated too handle that.
""" """
items = [] items = []
from jedi.evaluate.representation import Instance
for key, nodes in self.var_args.unpack(): for key, nodes in self.var_args.unpack():
for node in nodes: for node in nodes:
for typ in self._evaluator.eval_element(node): for typ in self._evaluator.eval_element(node):
# TODO remove?
"""
if isinstance(typ, Instance) and len(typ.var_args):
array = typ.var_args[0]
if isinstance(array, ArrayInstance):
# Certain combinations can cause recursions, see tests.
if not self._evaluator.recursion_detector.push_stmt(self.var_args):
items += array.iter_content()
self._evaluator.recursion_detector.pop_stmt()
"""
items += get_iterator_types([typ]) items += get_iterator_types([typ])
# TODO remove?
"""
# TODO check if exclusion of tuple is a problem here.
if isinstance(self.var_args, tuple) or self.var_args.parent is None:
return [] # generated var_args should not be checked for arrays
"""
module = self.var_args.get_parent_until() module = self.var_args.get_parent_until()
is_list = str(self.instance.name) == 'list' is_list = str(self.instance.name) == 'list'
items += _check_array_additions(self._evaluator, self.instance, module, is_list) items += _check_array_additions(self._evaluator, self.instance, module, is_list)
@@ -696,25 +626,3 @@ def create_indexes_or_slices(evaluator, index):
return (Slice(evaluator, *result),) return (Slice(evaluator, *result),)
return evaluator.eval_element(index) return evaluator.eval_element(index)
# TODO delete the rest?
# Just take the first part of the "array", because this is Python stdlib
# behavior. Numpy et al. perform differently, but Jedi won't understand
# that anyway.
expression_list = index[0].expression_list()
prec = precedence.create_precedence(expression_list)
# check for slices
if isinstance(prec, precedence.Precedence) and prec.operator == ':':
start = prec.left
if isinstance(start, precedence.Precedence) and start.operator == ':':
stop = start.right
start = start.left
step = prec.right
else:
stop = prec.right
step = None
return (Slice(evaluator, start, stop, step),)
else:
return tuple(precedence.process_precedence_element(evaluator, prec))