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:400–444  ·  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

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

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