(
&mut self,
decorators: Vec<Expression>,
node: Option<Node>,
)
| 665 | } |
| 666 | |
| 667 | fn parse_class_definition( |
| 668 | &mut self, |
| 669 | decorators: Vec<Expression>, |
| 670 | node: Option<Node>, |
| 671 | ) -> Result<Statement, ParsingError> { |
| 672 | let node = if let Some(node) = node { |
| 673 | node |
| 674 | } else { |
| 675 | self.start_node() |
| 676 | }; |
| 677 | self.expect(Kind::Class)?; |
| 678 | let name = intern(self.cur_token().as_str(self.source)); |
| 679 | self.expect(Kind::Identifier)?; |
| 680 | let type_params = if self.at(Kind::LeftBrace) { |
| 681 | self.parse_type_parameters()? |
| 682 | } else { |
| 683 | vec![] |
| 684 | }; |
| 685 | let (bases, keywords) = if self.eat(Kind::LeftParen) { |
| 686 | let (bases, keywords) = self.parse_argument_list()?; |
| 687 | self.expect(Kind::RightParen)?; |
| 688 | (bases, keywords) |
| 689 | } else { |
| 690 | (vec![], vec![]) |
| 691 | }; |
| 692 | self.expect(Kind::Colon)?; |
| 693 | let body = self.parse_suite()?; |
| 694 | |
| 695 | Ok(Statement::ClassDef(Arc::new(ClassDef::new( |
| 696 | self.finish_node(node), |
| 697 | name, |
| 698 | bases, |
| 699 | keywords, |
| 700 | body, |
| 701 | decorators, |
| 702 | type_params, |
| 703 | )))) |
| 704 | } |
| 705 | |
| 706 | // https://peps.python.org/pep-0622/#appendix-a-full-grammar |
| 707 | fn parse_match_statement(&mut self) -> Result<Statement, ParsingError> { |
no test coverage detected