diff --git a/parso/python/normalizer.py b/parso/python/normalizer.py index 8af4dfb..046e6f5 100644 --- a/parso/python/normalizer.py +++ b/parso/python/normalizer.py @@ -473,9 +473,17 @@ class ErrorFinder(Normalizer): self._add_syntax_error(message, node) elif type_ == 'test': error = 'conditional expression' - elif type_ == 'atom_expr': + elif type_ in ('atom_expr', 'power'): if node.children[0] == 'await': error = 'await expression' + elif node.children[-2] == '**': + error = 'operator' + else: + # Has a trailer + trailer = node.children[-1] + assert trailer.type == 'trailer' + if trailer.children[0] == '(': + error = 'function call' elif type_ in ('testlist_star_expr', 'exprlist'): for child in node.children[::2]: self._check_assignment(child, is_deletion) diff --git a/test/test_python_errors.py b/test/test_python_errors.py index dd44307..10183c2 100644 --- a/test/test_python_errors.py +++ b/test/test_python_errors.py @@ -100,6 +100,7 @@ def test_indentation_errors(code, positions): 'f(x=2, y)', 'f(**x, *y)', 'f(**x, y=3, z)', + # All assignment tests 'lambda a: 1 = 1', '[x for x in y] = 1', '{x for x in y} = 1', @@ -116,6 +117,7 @@ def test_indentation_errors(code, positions): 'b"" = 1', '"" "" = 1', '1 | 1 = 3', + '1**1 = 3', '~ 1 = 3', 'not 1 = 3', '1 and 1 = 3', @@ -126,6 +128,7 @@ def test_indentation_errors(code, positions): '(True,) = x', '([False], a) = x', 'a, 1 = x', + 'foo() = 1', # SyntaxErrors from Python/symtable.c 'def f(x, x): pass',