(&mut self)
| 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> { |
no test coverage detected