MCPcopy Create free account
hub / github.com/astral-sh/ruff / parse_delete_statement

Method parse_delete_statement

crates/ruff_python_parser/src/parser/statement.rs:399–443  ·  view source on GitHub ↗

Parses a delete statement. # Panics If the parser isn't positioned at a `del` token. See:

(&mut self)

Source from the content-addressed store, hash-verified

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 ///

Callers 1

Calls 10

set_expr_ctxFunction · 0.85
node_startMethod · 0.80
current_token_rangeMethod · 0.80
node_rangeMethod · 0.80
bumpMethod · 0.45
is_emptyMethod · 0.45
add_errorMethod · 0.45

Tested by

no test coverage detected