forked from VimPlug/jedi
Move eval_subscript_list to the syntax_tree module.
This commit is contained in:
@@ -786,33 +786,3 @@ class Slice(context.Context):
|
|||||||
return slice(get(self._start), get(self._stop), get(self._step))
|
return slice(get(self._start), get(self._stop), get(self._step))
|
||||||
except IndexError:
|
except IndexError:
|
||||||
return slice(None, None, None)
|
return slice(None, None, None)
|
||||||
|
|
||||||
|
|
||||||
def create_index_types(evaluator, context, index):
|
|
||||||
"""
|
|
||||||
Handles slices in subscript nodes.
|
|
||||||
"""
|
|
||||||
if index == ':':
|
|
||||||
# Like array[:]
|
|
||||||
return ContextSet(Slice(context, None, None, None))
|
|
||||||
|
|
||||||
elif index.type == 'subscript' and not index.children[0] == '.':
|
|
||||||
# subscript basically implies a slice operation, except for Python 2's
|
|
||||||
# Ellipsis.
|
|
||||||
# e.g. array[:3]
|
|
||||||
result = []
|
|
||||||
for el in index.children:
|
|
||||||
if el == ':':
|
|
||||||
if not result:
|
|
||||||
result.append(None)
|
|
||||||
elif el.type == 'sliceop':
|
|
||||||
if len(el.children) == 2:
|
|
||||||
result.append(el.children[1])
|
|
||||||
else:
|
|
||||||
result.append(el)
|
|
||||||
result += [None] * (3 - len(result))
|
|
||||||
|
|
||||||
return ContextSet(Slice(context, *result))
|
|
||||||
|
|
||||||
# No slices
|
|
||||||
return context.eval_node(index)
|
|
||||||
|
|||||||
@@ -118,7 +118,6 @@ def eval_trailer(context, base_contexts, trailer):
|
|||||||
node = ()
|
node = ()
|
||||||
|
|
||||||
if trailer_op == '[':
|
if trailer_op == '[':
|
||||||
from jedi.evaluate import iterable
|
|
||||||
from jedi.evaluate.representation import ClassContext
|
from jedi.evaluate.representation import ClassContext
|
||||||
from jedi.evaluate.instance import TreeInstance
|
from jedi.evaluate.instance import TreeInstance
|
||||||
|
|
||||||
@@ -137,7 +136,7 @@ def eval_trailer(context, base_contexts, trailer):
|
|||||||
result |= typing_module_types
|
result |= typing_module_types
|
||||||
|
|
||||||
return result | base_contexts.get_item(
|
return result | base_contexts.get_item(
|
||||||
iterable.create_index_types(context.evaluator, context, node),
|
eval_subscript_list(context.evaluator, context, node),
|
||||||
ContextualizedNode(context, trailer)
|
ContextualizedNode(context, trailer)
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
@@ -582,3 +581,34 @@ def check_tuple_assignments(evaluator, contextualized_name, context_set):
|
|||||||
return ContextSet()
|
return ContextSet()
|
||||||
context_set = lazy_context.infer()
|
context_set = lazy_context.infer()
|
||||||
return context_set
|
return context_set
|
||||||
|
|
||||||
|
|
||||||
|
def eval_subscript_list(evaluator, context, index):
|
||||||
|
"""
|
||||||
|
Handles slices in subscript nodes.
|
||||||
|
"""
|
||||||
|
from jedi.evaluate.iterable import Slice
|
||||||
|
if index == ':':
|
||||||
|
# Like array[:]
|
||||||
|
return ContextSet(Slice(context, None, None, None))
|
||||||
|
|
||||||
|
elif index.type == 'subscript' and not index.children[0] == '.':
|
||||||
|
# subscript basically implies a slice operation, except for Python 2's
|
||||||
|
# Ellipsis.
|
||||||
|
# e.g. array[:3]
|
||||||
|
result = []
|
||||||
|
for el in index.children:
|
||||||
|
if el == ':':
|
||||||
|
if not result:
|
||||||
|
result.append(None)
|
||||||
|
elif el.type == 'sliceop':
|
||||||
|
if len(el.children) == 2:
|
||||||
|
result.append(el.children[1])
|
||||||
|
else:
|
||||||
|
result.append(el)
|
||||||
|
result += [None] * (3 - len(result))
|
||||||
|
|
||||||
|
return ContextSet(Slice(context, *result))
|
||||||
|
|
||||||
|
# No slices
|
||||||
|
return context.eval_node(index)
|
||||||
|
|||||||
Reference in New Issue
Block a user