(&mut self)
| 761 | } |
| 762 | |
| 763 | fn parse_cases(&mut self) -> Result<Vec<MatchCase>, ParsingError> { |
| 764 | let mut cases = vec![]; |
| 765 | loop { |
| 766 | if self.at(Kind::Dedent) || self.at(Kind::Eof) { |
| 767 | break; |
| 768 | } |
| 769 | let node = self.start_node(); |
| 770 | |
| 771 | // This identifier is case word |
| 772 | self.expect(Kind::Identifier)?; |
| 773 | let pattern = self.parse_patterns()?; |
| 774 | let guard = if self.at(Kind::If) { |
| 775 | Some(self.parse_guard()?) |
| 776 | } else { |
| 777 | None |
| 778 | }; |
| 779 | self.expect(Kind::Colon)?; |
| 780 | let body = self.parse_suite()?; |
| 781 | cases.push(MatchCase { |
| 782 | node: self.finish_node(node), |
| 783 | pattern, |
| 784 | guard, |
| 785 | body, |
| 786 | }); |
| 787 | } |
| 788 | |
| 789 | Ok(cases) |
| 790 | } |
| 791 | |
| 792 | fn parse_guard(&mut self) -> Result<Expression, ParsingError> { |
| 793 | self.expect(Kind::If)?; |
no test coverage detected