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

Method parse_clauses

crates/ruff_python_parser/src/parser/statement.rs:4030–4051  ·  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

4028 /// `Else`) to the recovery context so that expression recovery stops when it encounters an
4029 /// `else` token.
4030 fn parse_clauses(&mut self, clause: Clause, mut parse_clause: impl FnMut(&mut Parser<'src>)) {
4031 let mut progress = ParserProgress::default();
4032
4033 let recovery_kind = match clause {
4034 Clause::ElIf => RecoveryContextKind::Elif,
4035 Clause::Except => RecoveryContextKind::Except,
4036 _ => unreachable!("Clause is not supported"),
4037 };
4038
4039 let saved_context = self.recovery_context;
4040 self.recovery_context = self
4041 .recovery_context
4042 .union(RecoveryContext::from_kind(recovery_kind));
4043
4044 while recovery_kind.is_list_element(self) {
4045 progress.assert_progressing(self);
4046
4047 parse_clause(self);
4048 }
4049
4050 self.recovery_context = saved_context;
4051 }
4052}
4053
4054#[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