forked from VimPlug/jedi
iterable cleanup.
This commit is contained in:
@@ -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))
|
|
||||||
|
|||||||
Reference in New Issue
Block a user