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:919–960  ·  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

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

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