diff --git a/jedi/evaluate/__init__.py b/jedi/evaluate/__init__.py index 8fcd21a3..7a3afcb7 100644 --- a/jedi/evaluate/__init__.py +++ b/jedi/evaluate/__init__.py @@ -142,8 +142,6 @@ class Evaluator(object): debug.dbg('eval_expression_list: %s', expression_list) result = [] calls_iterator = iter(expression_list) - if len(expression_list) > 1: - print expression_list for call in calls_iterator: if pr.Array.is_type(call, pr.Array.NOARRAY): r = list(itertools.chain.from_iterable(self.eval_statement(s) diff --git a/jedi/evaluate/precedence.py b/jedi/evaluate/precedence.py index 9935bf43..3a174ede 100644 --- a/jedi/evaluate/precedence.py +++ b/jedi/evaluate/precedence.py @@ -3,6 +3,8 @@ Handles operator precedence. """ from jedi.parser import representation as pr +from jedi import debug +from jedi.common import PushBackIterator class PythonGrammar(object): @@ -44,14 +46,49 @@ class PythonGrammar(object): class Precedence(object): - def __init__(self, left, operator, right=None): + def __init__(self, left, operator, right): self.left = left self.operator = operator self.right = right -def create_precedence(expression_list, previous=None): - element = next(expression_list, None) +def create_precedence(expression_list): + def get_op(current, expression_list): + for element in expression_list: + return + if not isinstance(obj, str): + debug.warning('normal element in place of operator: %s', element) + continue + + def is_operator(obj): + if isinstance(obj, pr.Call): + element = str(obj.name) + for term in PythonGrammar.order: + pass + return element + + def tokenize(): + pass + + new + current = None + exp_iterator = PushBackIterator(expression_list) + for element in expression_list: + op_name = element + if isinstance(element, pr.Call): + op_name = str(element.name) + current = s + if isinstance(element, pr.Call): + x = str(element.name) + new = _process_element(element, expression_list) + if current is None: + current = new + else: + current = _process_element(element, expression_list) + return current + + +def _process_element(element, expression_list, previous=None): if element is None: return previous @@ -60,11 +97,11 @@ def create_precedence(expression_list, previous=None): elif not isinstance(element, str): if previous is None: previous = element - return create_precedence(expression_list, previous=previous) + return _process_element(expression_list, previous=previous) for term in PythonGrammar.order: if element in term: - right = create_precedence(expression_list) + right = _process_element(expression_list) if right is None: return previous else: diff --git a/test/test_evaluate/test_precedence.py b/test/test_evaluate/test_precedence.py index ec158a32..08cd3a63 100644 --- a/test/test_evaluate/test_precedence.py +++ b/test/test_evaluate/test_precedence.py @@ -1,13 +1,26 @@ +import pytest + from jedi.evaluate import precedence +cp = lambda *args: precedence.create_precedence(iter(args)) +@pytest.skip('sorry precedence stuff is still not implemented yet') def test_simple(): - p = precedence.create_precedence(iter([1, '+', 2])) + p = cp(1, '+', 2) assert p.left == 1 assert p.operator == '+' assert p.right == 2 + p = cp('+', 2) + assert p.left is None + assert p.operator == '+' + assert p.right == 2 + +@pytest.skip('sorry precedence stuff is still not implemented yet') def test_invalid(): - """Should just return a simple operation""" - assert precedence.create_precedence(iter([1, '+'])) == 1 + """Should just return a simple operation.""" + assert cp(1, '+') == 1 + assert cp('+') is None + + assert cp('*', 1) == 1