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

Method parse_while_statement

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

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

(&mut self)

Source from the content-addressed store, hash-verified

1951 ///
1952 /// See: <https://docs.python.org/3/reference/compound_stmts.html#the-while-statement>
1953 fn parse_while_statement(&mut self) -> ast::StmtWhile {
1954 let start = self.node_start();
1955 self.bump(TokenKind::While);
1956
1957 // test_err while_stmt_missing_test
1958 // while : ...
1959 // while :
1960 // a = 1
1961
1962 // test_err while_stmt_invalid_test_expr
1963 // while *x: ...
1964 // while yield x: ...
1965 // while a, b: ...
1966 // while a := 1, b: ...
1967 let test = self.parse_named_expression_or_higher(ExpressionContext::default());
1968
1969 // test_err while_stmt_missing_colon
1970 // while (
1971 // a < 30 # comment
1972 // )
1973 // pass
1974 self.expect(TokenKind::Colon);
1975
1976 let body = self.parse_body(Clause::While);
1977
1978 let orelse = if self.eat(TokenKind::Else) {
1979 self.expect(TokenKind::Colon);
1980 self.parse_body(Clause::Else)
1981 } else {
1982 Suite::new()
1983 };
1984
1985 ast::StmtWhile {
1986 test: Box::new(test.expr),
1987 body,
1988 orelse,
1989 range: self.node_range(start),
1990 node_index: AtomicNodeIndex::NONE,
1991 }
1992 }
1993
1994 /// Parses a function definition.
1995 ///

Callers 1

parse_statementMethod · 0.80

Calls 8

node_startMethod · 0.80
expectMethod · 0.80
parse_bodyMethod · 0.80
node_rangeMethod · 0.80
defaultFunction · 0.50
bumpMethod · 0.45
eatMethod · 0.45

Tested by

no test coverage detected