Parses a delete statement. # Panics If the parser isn't positioned at a `del` token. See:
(&mut self)
| 398 | /// |
| 399 | /// See: <https://docs.python.org/3/reference/simple_stmts.html#grammar-token-python-grammar-del_stmt> |
| 400 | fn parse_delete_statement(&mut self) -> ast::StmtDelete { |
| 401 | let start = self.node_start(); |
| 402 | self.bump(TokenKind::Del); |
| 403 | |
| 404 | // test_err del_incomplete_target |
| 405 | // del x, y. |
| 406 | // z |
| 407 | // del x, y[ |
| 408 | // z |
| 409 | let targets = self.parse_comma_separated_list_into_vec( |
| 410 | RecoveryContextKind::DeleteTargets, |
| 411 | |parser| { |
| 412 | // Allow starred expression to raise a better error message for |
| 413 | // an invalid delete target later. |
| 414 | let mut target = parser.parse_conditional_expression_or_higher_impl( |
| 415 | ExpressionContext::starred_conditional(), |
| 416 | ); |
| 417 | helpers::set_expr_ctx(&mut target.expr, ExprContext::Del); |
| 418 | |
| 419 | // test_err invalid_del_target |
| 420 | // del x + 1 |
| 421 | // del {'x': 1} |
| 422 | // del {'x', 'y'} |
| 423 | // del None, True, False, 1, 1.0, "abc" |
| 424 | parser.validate_delete_target(&target.expr); |
| 425 | |
| 426 | target.expr |
| 427 | }, |
| 428 | ); |
| 429 | |
| 430 | if targets.is_empty() { |
| 431 | // test_err del_stmt_empty |
| 432 | // del |
| 433 | self.add_error( |
| 434 | ParseErrorType::EmptyDeleteTargets, |
| 435 | self.current_token_range(), |
| 436 | ); |
| 437 | } |
| 438 | |
| 439 | ast::StmtDelete { |
| 440 | targets, |
| 441 | range: self.node_range(start), |
| 442 | node_index: AtomicNodeIndex::NONE, |
| 443 | } |
| 444 | } |
| 445 | |
| 446 | /// Parses a `return` statement. |
| 447 | /// |
no test coverage detected