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

Method parse_assert_statement

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

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

(&mut self)

Source from the content-addressed store, hash-verified

910 ///
911 /// See: <https://docs.python.org/3/reference/simple_stmts.html#the-assert-statement>
912 fn parse_assert_statement(&mut self) -> ast::StmtAssert {
913 let start = self.node_start();
914 self.bump(TokenKind::Assert);
915
916 // test_err assert_empty_test
917 // assert
918
919 // test_err assert_invalid_test_expr
920 // assert *x
921 // assert assert x
922 // assert yield x
923 // assert x := 1
924 let test = self.parse_conditional_expression_or_higher();
925
926 let msg = if self.eat(TokenKind::Comma) {
927 if self.at_expr() {
928 // test_err assert_invalid_msg_expr
929 // assert False, *x
930 // assert False, assert x
931 // assert False, yield x
932 // assert False, x := 1
933 Some(Box::new(self.parse_conditional_expression_or_higher().expr))
934 } else {
935 // test_err assert_empty_msg
936 // assert x,
937 self.add_error(
938 ParseErrorType::ExpectedExpression,
939 self.current_token_range(),
940 );
941 None
942 }
943 } else {
944 None
945 };
946
947 ast::StmtAssert {
948 test: Box::new(test.expr),
949 msg,
950 range: self.node_range(start),
951 node_index: AtomicNodeIndex::NONE,
952 }
953 }
954
955 /// Parses a global statement.
956 ///

Callers 1

Calls 8

node_startMethod · 0.80
at_exprMethod · 0.80
current_token_rangeMethod · 0.80
node_rangeMethod · 0.80
bumpMethod · 0.45
eatMethod · 0.45
add_errorMethod · 0.45

Tested by

no test coverage detected