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

Method parse_class_definition

parser/src/parser/parser.rs:667–704  ·  view source on GitHub ↗
(
        &mut self,
        decorators: Vec<Expression>,
        node: Option<Node>,
    )

Source from the content-addressed store, hash-verified

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> {

Calls 12

internFunction · 0.85
ClassDefClass · 0.85
start_nodeMethod · 0.80
expectMethod · 0.80
as_strMethod · 0.80
cur_tokenMethod · 0.80
atMethod · 0.80
parse_type_parametersMethod · 0.80
eatMethod · 0.80
parse_argument_listMethod · 0.80
parse_suiteMethod · 0.80
finish_nodeMethod · 0.80

Tested by

no test coverage detected