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

Method parse_raise_statement

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

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

(&mut self)

Source from the content-addressed store, hash-verified

529 ///
530 /// See: <https://docs.python.org/3/reference/simple_stmts.html#grammar-token-python-grammar-raise_stmt>
531 fn parse_raise_statement(&mut self) -> ast::StmtRaise {
532 let start = self.node_start();
533 self.bump(TokenKind::Raise);
534
535 let exc = match self.current_token_kind() {
536 TokenKind::Newline => None,
537 TokenKind::From => {
538 // test_err raise_stmt_from_without_exc
539 // raise from exc
540 // raise from None
541 self.add_error(
542 ParseErrorType::OtherError(
543 "Exception missing in `raise` statement with cause".to_string(),
544 ),
545 self.current_token_range(),
546 );
547 None
548 }
549 _ => {
550 // test_err raise_stmt_invalid_exc
551 // raise *x
552 // raise yield x
553 // raise x := 1
554 let exc = self.parse_expression_list(ExpressionContext::default());
555
556 if let Some(ast::ExprTuple {
557 parenthesized: false,
558 ..
559 }) = exc.as_tuple_expr()
560 {
561 // test_err raise_stmt_unparenthesized_tuple_exc
562 // raise x,
563 // raise x, y
564 // raise x, y from z
565 self.add_error(ParseErrorType::UnparenthesizedTupleExpression, &exc);
566 }
567
568 Some(Box::new(exc.expr))
569 }
570 };
571
572 let cause = self.eat(TokenKind::From).then(|| {
573 // test_err raise_stmt_invalid_cause
574 // raise x from *y
575 // raise x from yield y
576 // raise x from y := 1
577 let cause = self.parse_expression_list(ExpressionContext::default());
578
579 if let Some(ast::ExprTuple {
580 parenthesized: false,
581 ..
582 }) = cause.as_tuple_expr()
583 {
584 // test_err raise_stmt_unparenthesized_tuple_cause
585 // raise x from y,
586 // raise x from y, z
587 self.add_error(ParseErrorType::UnparenthesizedTupleExpression, &cause);
588 }

Callers 1

Calls 11

node_startMethod · 0.80
current_token_kindMethod · 0.80
current_token_rangeMethod · 0.80
parse_expression_listMethod · 0.80
as_tuple_exprMethod · 0.80
node_rangeMethod · 0.80
defaultFunction · 0.50
bumpMethod · 0.45
add_errorMethod · 0.45
to_stringMethod · 0.45
eatMethod · 0.45

Tested by

no test coverage detected