(
&mut self,
node: Node,
decorators: Vec<Expression>,
is_async: bool,
)
| 590 | } |
| 591 | |
| 592 | fn parse_function_definition( |
| 593 | &mut self, |
| 594 | node: Node, |
| 595 | decorators: Vec<Expression>, |
| 596 | is_async: bool, |
| 597 | ) -> Result<Statement, ParsingError> { |
| 598 | let name = intern(self.cur_token().as_str(self.source)); |
| 599 | self.expect(Kind::Identifier)?; |
| 600 | let type_params = if self.at(Kind::LeftBrace) { |
| 601 | self.parse_type_parameters()? |
| 602 | } else { |
| 603 | vec![] |
| 604 | }; |
| 605 | self.expect(Kind::LeftParen)?; |
| 606 | let args = self.parse_parameters(false)?; |
| 607 | self.expect(Kind::RightParen)?; |
| 608 | |
| 609 | let return_type = if self.eat(Kind::Arrow) { |
| 610 | Some(self.parse_expression()?) |
| 611 | } else { |
| 612 | None |
| 613 | }; |
| 614 | |
| 615 | self.expect(Kind::Colon)?; |
| 616 | let body = self.parse_suite()?; |
| 617 | if is_async { |
| 618 | Ok(Statement::AsyncFunctionDef(Arc::new( |
| 619 | AsyncFunctionDef::new( |
| 620 | self.finish_node_chomped(node), |
| 621 | name, |
| 622 | args, |
| 623 | body, |
| 624 | decorators, |
| 625 | return_type, |
| 626 | None, |
| 627 | type_params, |
| 628 | ), |
| 629 | ))) |
| 630 | } else { |
| 631 | Ok(Statement::FunctionDef(Arc::new(FunctionDef::new( |
| 632 | self.finish_node_chomped(node), |
| 633 | name, |
| 634 | args, |
| 635 | body, |
| 636 | decorators, |
| 637 | return_type, |
| 638 | // TODO: type comment |
| 639 | None, |
| 640 | type_params, |
| 641 | )))) |
| 642 | } |
| 643 | } |
| 644 | |
| 645 | fn parse_decorated_function_def_or_class_def(&mut self) -> Result<Statement, ParsingError> { |
| 646 | let node = self.start_node(); |
no test coverage detected