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

Method parse_closed_pattern

parser/src/parser/parser.rs:843–887  ·  view source on GitHub ↗
(&mut self)

Source from the content-addressed store, hash-verified

841 }
842
843 fn parse_closed_pattern(&mut self) -> Result<MatchPattern, ParsingError> {
844 match self.cur_kind() {
845 Kind::LeftParen => self.parse_sequence_pattern(),
846 Kind::LeftBrace => self.parse_sequence_pattern(),
847 Kind::LeftBracket => self.parse_mapping_pattern(),
848 Kind::Match | Kind::Type | Kind::Identifier => {
849 if matches!(self.peek_kind(), Ok(Kind::Dot)) {
850 let node = self.start_node();
851 let value = self.parse_attr()?;
852 if self.at(Kind::LeftParen) {
853 self.parse_class_pattern(value)
854 } else {
855 self.parse_value_pattern(value, node)
856 }
857 } else if matches!(self.peek_kind(), Ok(Kind::LeftParen)) {
858 let value = self.parse_attr()?;
859 self.parse_class_pattern(value)
860 } else {
861 self.parse_capture_or_wildcard_pattern()
862 }
863 },
864 Kind::Integer
865 | Kind::Binary
866 | Kind::Octal
867 | Kind::Hexadecimal
868 | Kind::PointFloat
869 | Kind::ExponentFloat
870 | Kind::ImaginaryInteger
871 | Kind::ImaginaryPointFloat
872 | Kind::ImaginaryExponentFloat
873 | Kind::None
874 | Kind::True
875 | Kind::False
876 | Kind::StringLiteral | Kind::RawBytes | Kind::Bytes
877 // The signed numbers are also allowed
878 | Kind::Minus | Kind::Plus => {
879 self.parse_literal_pattern()
880
881 },
882 _ => {
883 let node = self.start_node();
884 panic!("Unexpected token {:?}", self.cur_kind());
885 },
886 }
887 }
888
889 // https://docs.python.org/3/reference/compound_stmts.html#literal-patterns
890 fn parse_literal_pattern(&mut self) -> Result<MatchPattern, ParsingError> {

Callers 1

parse_or_patternMethod · 0.80

Calls 10

cur_kindMethod · 0.80
parse_mapping_patternMethod · 0.80
start_nodeMethod · 0.80
parse_attrMethod · 0.80
atMethod · 0.80
parse_class_patternMethod · 0.80
parse_value_patternMethod · 0.80
parse_literal_patternMethod · 0.80

Tested by

no test coverage detected