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

Method parse_function_definition

parser/src/parser/parser.rs:592–643  ·  view source on GitHub ↗
(
        &mut self,
        node: Node,
        decorators: Vec<Expression>,
        is_async: bool,
    )

Source from the content-addressed store, hash-verified

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();

Calls 13

internFunction · 0.85
AsyncFunctionDefClass · 0.85
FunctionDefClass · 0.85
as_strMethod · 0.80
cur_tokenMethod · 0.80
expectMethod · 0.80
atMethod · 0.80
parse_type_parametersMethod · 0.80
parse_parametersMethod · 0.80
eatMethod · 0.80
parse_expressionMethod · 0.80
parse_suiteMethod · 0.80

Tested by

no test coverage detected