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:1951–1990  ·  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

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

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