Skip to content

Commit 343ccb5

Browse files
author
hauntsaninja
committed
pegen: further improve del error messages
Outputs specialised error messages for more cases, better caret placement
1 parent c2219f7 commit 343ccb5

File tree

2 files changed

+6
-6
lines changed

2 files changed

+6
-6
lines changed

Grammar/python.gram

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -122,9 +122,7 @@ yield_stmt[stmt_ty]: y=yield_expr { _Py_Expr(y, EXTRA) }
122122

123123
assert_stmt[stmt_ty]: 'assert' a=expression b=[',' z=expression { z }] { _Py_Assert(a, b, EXTRA) }
124124

125-
del_stmt[stmt_ty]:
126-
| 'del' a=del_targets { _Py_Delete(a, EXTRA) }
127-
| invalid_delete
125+
del_stmt[stmt_ty]: 'del' a=del_targets { _Py_Delete(a, EXTRA) }
128126

129127
import_stmt[stmt_ty]: import_name | import_from
130128
import_name[stmt_ty]: 'import' a=dotted_as_names { _Py_Import(a, EXTRA) }
@@ -589,6 +587,7 @@ del_target[expr_ty] (memo):
589587
| a=t_primary '.' b=NAME !t_lookahead { _Py_Attribute(a, b->v.Name.id, Del, EXTRA) }
590588
| a=t_primary '[' b=slices ']' !t_lookahead { _Py_Subscript(a, b, Del, EXTRA) }
591589
| del_t_atom
590+
| invalid_del_target
592591
del_t_atom[expr_ty]:
593592
| a=NAME !t_lookahead { _PyPegen_set_expr_context(p, a, Del) }
594593
| '(' a=del_target ')' { _PyPegen_set_expr_context(p, a, Del) }
@@ -651,6 +650,6 @@ invalid_lambda_star_etc:
651650
invalid_double_type_comments:
652651
| TYPE_COMMENT NEWLINE TYPE_COMMENT NEWLINE INDENT {
653652
RAISE_SYNTAX_ERROR("Cannot have two type comments on def") }
654-
invalid_delete:
655-
| 'del' a=star_expressions {
656-
RAISE_SYNTAX_ERROR_NO_COL_OFFSET("cannot delete %s", _PyPegen_get_expr_name(a)) }
653+
invalid_del_target:
654+
| a=star_expression {
655+
RAISE_SYNTAX_ERROR("cannot delete %s", _PyPegen_get_expr_name(a)) }

Lib/test/test_syntax.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -681,6 +681,7 @@ def test_assign_del(self):
681681
self._check_error("del f()", "delete")
682682
self._check_error("del 1", "delete")
683683
self._check_error("del *x", "delete")
684+
self._check_error("del x, f()", "delete")
684685

685686
def test_global_param_err_first(self):
686687
source = """if 1:

0 commit comments

Comments
 (0)