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

Method parse_class_pattern

parser/src/parser/parser.rs:1016–1055  ·  view source on GitHub ↗
(
        &mut self,
        class_name: Expression,
    )

Source from the content-addressed store, hash-verified

1014 }
1015
1016 fn parse_class_pattern(
1017 &mut self,
1018 class_name: Expression,
1019 ) -> Result<MatchPattern, ParsingError> {
1020 let node = self.start_node();
1021 let class = class_name;
1022 self.expect(Kind::LeftParen)?;
1023 let mut patterns = vec![];
1024 let mut kwd_attrs = vec![];
1025 let mut kwd_patterns = vec![];
1026 let mut seen_keyword_pattern = false;
1027 loop {
1028 if self.eat(Kind::RightParen) {
1029 break;
1030 }
1031
1032 if self.at(Kind::Identifier) && matches!(self.peek_kind(), Ok(Kind::Assign)) {
1033 seen_keyword_pattern = true;
1034 kwd_attrs.push(self.cur_token().to_string(self.source));
1035 self.bump(Kind::Identifier);
1036 self.bump(Kind::Assign);
1037 kwd_patterns.push(self.parse_pattern()?);
1038 } else {
1039 if seen_keyword_pattern {
1040 panic!("Positional arguments cannot come after keyword arguments.");
1041 }
1042 patterns.push(self.parse_pattern()?);
1043 }
1044 if !self.at(Kind::RightParen) {
1045 self.expect(Kind::Comma)?;
1046 }
1047 }
1048 Ok(MatchPattern::MatchClass(MatchClass {
1049 node: self.finish_node(node),
1050 cls: class,
1051 patterns,
1052 kwd_attrs,
1053 kwd_patterns,
1054 }))
1055 }
1056
1057 fn parse_sequence_pattern(&mut self) -> Result<MatchPattern, ParsingError> {
1058 let node = self.start_node();

Callers 1

parse_closed_patternMethod · 0.80

Calls 10

MatchClassClass · 0.85
start_nodeMethod · 0.80
expectMethod · 0.80
eatMethod · 0.80
atMethod · 0.80
to_stringMethod · 0.80
cur_tokenMethod · 0.80
bumpMethod · 0.80
parse_patternMethod · 0.80
finish_nodeMethod · 0.80

Tested by

no test coverage detected