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

Method parse_clauses

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

Parses a sequence of clauses. The parser only continues for as long as it sees the token indicating the start of the specific clause. Unlike [`Parser::parse_list`], this method does not perform error recovery when the next token is not a list terminator or the start of a list element. The special method is necessary because Python uses indentation over explicit delimiters to indicate the end of

(&mut self, clause: Clause, mut parse_clause: impl FnMut(&mut Parser<'src>))

Source from the content-addressed store, hash-verified

4018 /// `Else`) to the recovery context so that expression recovery stops when it encounters an
4019 /// `else` token.
4020 fn parse_clauses(&mut self, clause: Clause, mut parse_clause: impl FnMut(&mut Parser<'src>)) {
4021 let mut progress = ParserProgress::default();
4022
4023 let recovery_kind = match clause {
4024 Clause::ElIf => RecoveryContextKind::Elif,
4025 Clause::Except => RecoveryContextKind::Except,
4026 _ => unreachable!("Clause is not supported"),
4027 };
4028
4029 let saved_context = self.recovery_context;
4030 self.recovery_context = self
4031 .recovery_context
4032 .union(RecoveryContext::from_kind(recovery_kind));
4033
4034 while recovery_kind.is_list_element(self) {
4035 progress.assert_progressing(self);
4036
4037 parse_clause(self);
4038 }
4039
4040 self.recovery_context = saved_context;
4041 }
4042}
4043
4044#[derive(Copy, Clone)]

Callers 2

parse_if_statementMethod · 0.80
parse_try_statementMethod · 0.80

Calls 4

is_list_elementMethod · 0.80
assert_progressingMethod · 0.80
defaultFunction · 0.50
unionMethod · 0.45

Tested by

no test coverage detected