MCPcopy Create free account
hub / github.com/Glyphack/enderpy / parse_compound_statement

Method parse_compound_statement

parser/src/parser/parser.rs:275–316  ·  view source on GitHub ↗
(&mut self)

Source from the content-addressed store, hash-verified

273 }
274
275 fn parse_compound_statement(&mut self) -> Result<Statement, ParsingError> {
276 match self.cur_kind() {
277 Kind::If => self.parse_if_statement(),
278 Kind::While => self.parse_while_statement(),
279 Kind::For => self.parse_for_statement(),
280 Kind::Try => self.parse_try_statement(),
281 Kind::With => self.parse_with_statement(),
282 Kind::Def => {
283 let node = self.start_node();
284 self.bump_any();
285 self.parse_function_definition(node, vec![], false)
286 }
287 Kind::MatrixMul => self.parse_decorated_function_def_or_class_def(),
288 Kind::Class => self.parse_class_definition(vec![], None),
289 Kind::Async => {
290 if matches!(self.peek_kind(), Ok(Kind::Def)) {
291 let node = self.start_node();
292 self.bump_any();
293 self.bump_any();
294 self.parse_function_definition(node, vec![], true)
295 } else if matches!(self.peek_kind(), Ok(Kind::For)) {
296 self.parse_for_statement()
297 } else if matches!(self.peek_kind(), Ok(Kind::With)) {
298 self.parse_with_statement()
299 } else {
300 panic!("");
301 }
302 }
303 other => {
304 // type & match are a soft keywords
305 // https://docs.python.org/3/reference/lexical_analysis.html#soft-keywords
306 let peeked = self.peek_kind()?;
307 if other == Kind::Type && peeked == Kind::Identifier {
308 self.parse_type_alias_statement()
309 } else if other == Kind::Match && matches!(peeked, Kind::Identifier | Kind::Mul) {
310 self.parse_match_statement()
311 } else {
312 self.parse_assignment_or_expression_statement()
313 }
314 }
315 }
316 }
317
318 fn err_if_statement_not_ending_in_new_line_or_semicolon(
319 &mut self,

Callers 2

parseMethod · 0.80
parse_statementMethod · 0.80

Calls 15

cur_kindMethod · 0.80
parse_if_statementMethod · 0.80
parse_while_statementMethod · 0.80
parse_for_statementMethod · 0.80
parse_try_statementMethod · 0.80
parse_with_statementMethod · 0.80
start_nodeMethod · 0.80
bump_anyMethod · 0.80
peek_kindMethod · 0.80

Tested by

no test coverage detected