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:530–598  ·  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

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

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