mirror of
https://github.com/davidhalter/jedi.git
synced 2025-12-09 15:24:46 +08:00
start using precedences, working good with only a few test fails
This commit is contained in:
@@ -142,13 +142,27 @@ class Evaluator(object):
|
||||
"""
|
||||
debug.dbg('eval_expression_list: %s', expression_list)
|
||||
result = []
|
||||
p = precedence.create_precedence(expression_list)
|
||||
return self._process_precedence_element(p)
|
||||
calls_iterator = iter(expression_list)
|
||||
for each in calls_iterator:
|
||||
result += self.eval_element(each)
|
||||
return set(result)
|
||||
|
||||
def _eval_precedence(evaluator, precedence):
|
||||
evaluator
|
||||
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_element(el)
|
||||
|
||||
def _eval_precedence(self, _precedence):
|
||||
left = self._process_precedence_element(_precedence.left)
|
||||
right = self._process_precedence_element(_precedence.right)
|
||||
return precedence.calculate(left, _precedence.operator, right)
|
||||
|
||||
def eval_element(self, element):
|
||||
if pr.Array.is_type(element, pr.Array.NOARRAY):
|
||||
|
||||
@@ -73,7 +73,7 @@ class Precedence(object):
|
||||
|
||||
|
||||
def create_precedence(expression_list):
|
||||
iterator = PushBackIterator(expression_list)
|
||||
iterator = PushBackIterator(iter(expression_list))
|
||||
return _check_operator(iterator)
|
||||
|
||||
|
||||
@@ -149,3 +149,7 @@ def _check_operator(iterator, priority=PythonGrammar.LOWEST_PRIORITY):
|
||||
else:
|
||||
left = Precedence(left, str(operator), right)
|
||||
return left
|
||||
|
||||
|
||||
def calculate(left, operator, right):
|
||||
return left + right
|
||||
|
||||
@@ -8,7 +8,7 @@ def parse_tree(statement_string, is_slice=False):
|
||||
if is_slice:
|
||||
# get the part of the execution that is the slice
|
||||
stmt = stmt.expression_list()[0].execution[0]
|
||||
iterable = iter(stmt.expression_list())
|
||||
iterable = stmt.expression_list()
|
||||
pr = precedence.create_precedence(iterable)
|
||||
if isinstance(pr, precedence.Precedence):
|
||||
return pr.parse_tree(strip_literals=True)
|
||||
|
||||
Reference in New Issue
Block a user