mirror of
https://github.com/davidhalter/jedi.git
synced 2025-12-08 23:04:48 +08:00
Move process_precedence_element from the Evaluator to the precedence module.
This commit is contained in:
@@ -169,22 +169,7 @@ class Evaluator(object):
|
|||||||
"""
|
"""
|
||||||
debug.dbg('eval_expression_list: %s', expression_list)
|
debug.dbg('eval_expression_list: %s', expression_list)
|
||||||
p = precedence.create_precedence(expression_list)
|
p = precedence.create_precedence(expression_list)
|
||||||
return self.process_precedence_element(p) or []
|
return precedence.process_precedence_element(self, p) or []
|
||||||
|
|
||||||
def process_precedence_element(self, el):
|
|
||||||
if el is None:
|
|
||||||
return None
|
|
||||||
else:
|
|
||||||
if isinstance(el, precedence.Precedence):
|
|
||||||
return self._eval_precedence(el)
|
|
||||||
else:
|
|
||||||
# normal element, no operators
|
|
||||||
return self.eval_statement_element(el)
|
|
||||||
|
|
||||||
def _eval_precedence(self, _precedence):
|
|
||||||
left = self.process_precedence_element(_precedence.left)
|
|
||||||
right = self.process_precedence_element(_precedence.right)
|
|
||||||
return precedence.calculate(self, left, _precedence.operator, right)
|
|
||||||
|
|
||||||
def eval_statement_element(self, element):
|
def eval_statement_element(self, element):
|
||||||
if pr.Array.is_type(element, pr.Array.NOARRAY):
|
if pr.Array.is_type(element, pr.Array.NOARRAY):
|
||||||
|
|||||||
@@ -490,7 +490,7 @@ class Slice(object):
|
|||||||
if element is None:
|
if element is None:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
result = self._evaluator.process_precedence_element(element)
|
result = precedence.process_precedence_element(self._evaluator, element)
|
||||||
if len(result) != 1:
|
if len(result) != 1:
|
||||||
# We want slices to be clear defined with just one type.
|
# We want slices to be clear defined with just one type.
|
||||||
# Otherwise we will return an empty slice object.
|
# Otherwise we will return an empty slice object.
|
||||||
@@ -528,4 +528,4 @@ def create_indexes_or_slices(evaluator, index_array):
|
|||||||
step = None
|
step = None
|
||||||
return (Slice(evaluator, start, stop, step),)
|
return (Slice(evaluator, start, stop, step),)
|
||||||
else:
|
else:
|
||||||
return tuple(evaluator.process_precedence_element(prec))
|
return tuple(precedence.process_precedence_element(evaluator, prec))
|
||||||
|
|||||||
@@ -214,6 +214,19 @@ def _literals_to_types(evaluator, result):
|
|||||||
return list(set(result))
|
return list(set(result))
|
||||||
|
|
||||||
|
|
||||||
|
def process_precedence_element(evaluator, precedence):
|
||||||
|
if precedence is None:
|
||||||
|
return None
|
||||||
|
else:
|
||||||
|
if isinstance(precedence, Precedence):
|
||||||
|
left = process_precedence_element(evaluator, precedence.left)
|
||||||
|
right = process_precedence_element(evaluator, precedence.right)
|
||||||
|
return calculate(evaluator, left, precedence.operator, right)
|
||||||
|
else:
|
||||||
|
# normal element, no operators
|
||||||
|
return evaluator.eval_statement_element(precedence)
|
||||||
|
|
||||||
|
|
||||||
def calculate(evaluator, left_result, operator, right_result):
|
def calculate(evaluator, left_result, operator, right_result):
|
||||||
result = []
|
result = []
|
||||||
if left_result is None and right_result:
|
if left_result is None and right_result:
|
||||||
|
|||||||
@@ -172,6 +172,10 @@ def isinst(x):
|
|||||||
isinst(A())
|
isinst(A())
|
||||||
#? set
|
#? set
|
||||||
isinst(True)
|
isinst(True)
|
||||||
|
#? set
|
||||||
|
isinst(1)
|
||||||
|
#? int
|
||||||
|
isinst(2)
|
||||||
#? list
|
#? list
|
||||||
isinst(1.0)
|
isinst(1.0)
|
||||||
#? list
|
#? list
|
||||||
|
|||||||
Reference in New Issue
Block a user