Move eval_subscript_list to the syntax_tree module.

This commit is contained in:
Dave Halter
2017-09-28 14:17:37 +02:00
parent 65ef6a3166
commit 612ad2f491
2 changed files with 32 additions and 32 deletions

View File

@@ -786,33 +786,3 @@ class Slice(context.Context):
return slice(get(self._start), get(self._stop), get(self._step))
except IndexError:
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)

View File

@@ -118,7 +118,6 @@ def eval_trailer(context, base_contexts, trailer):
node = ()
if trailer_op == '[':
from jedi.evaluate import iterable
from jedi.evaluate.representation import ClassContext
from jedi.evaluate.instance import TreeInstance
@@ -137,7 +136,7 @@ def eval_trailer(context, base_contexts, trailer):
result |= typing_module_types
return result | base_contexts.get_item(
iterable.create_index_types(context.evaluator, context, node),
eval_subscript_list(context.evaluator, context, node),
ContextualizedNode(context, trailer)
)
else:
@@ -582,3 +581,34 @@ def check_tuple_assignments(evaluator, contextualized_name, context_set):
return ContextSet()
context_set = lazy_context.infer()
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)