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