MCPcopy Create free account
hub / github.com/astral-sh/ruff / parse_match_pattern_inner

Method parse_match_pattern_inner

crates/ruff_python_parser/src/parser/pattern.rs:112–159  ·  view source on GitHub ↗
(&mut self, allow_star_pattern: AllowStarPattern)

Source from the content-addressed store, hash-verified

110 }
111
112 fn parse_match_pattern_inner(&mut self, allow_star_pattern: AllowStarPattern) -> Pattern {
113 let start = self.node_start();
114
115 // We don't yet know if it's an or pattern or an as pattern, so use whatever
116 // was passed in.
117 let mut lhs = self.parse_match_pattern_lhs(allow_star_pattern);
118
119 // Or pattern
120 if self.at(TokenKind::Vbar) {
121 // We know it's an `or` pattern now, so check for star pattern usage.
122 if lhs.is_match_star() {
123 self.add_error(ParseErrorType::InvalidStarPatternUsage, &lhs);
124 }
125
126 let mut patterns = vec![lhs];
127 let mut progress = ParserProgress::default();
128
129 while self.eat(TokenKind::Vbar) {
130 progress.assert_progressing(self);
131 let pattern = self.parse_match_pattern_lhs(AllowStarPattern::No);
132 patterns.push(pattern);
133 }
134
135 lhs = Pattern::MatchOr(ast::PatternMatchOr {
136 range: self.node_range(start),
137 patterns,
138 node_index: AtomicNodeIndex::NONE,
139 });
140 }
141
142 // As pattern
143 if self.eat(TokenKind::As) {
144 // We know it's an `as` pattern now, so check for star pattern usage.
145 if lhs.is_match_star() {
146 self.add_error(ParseErrorType::InvalidStarPatternUsage, &lhs);
147 }
148
149 let ident = self.parse_match_pattern_target();
150 lhs = Pattern::MatchAs(ast::PatternMatchAs {
151 range: self.node_range(start),
152 name: Some(ident),
153 pattern: Some(Box::new(lhs)),
154 node_index: AtomicNodeIndex::NONE,
155 });
156 }
157
158 lhs
159 }
160
161 /// Parses a pattern.
162 ///

Callers 1

parse_match_patternMethod · 0.80

Calls 11

node_startMethod · 0.80
is_match_starMethod · 0.80
assert_progressingMethod · 0.80
node_rangeMethod · 0.80
defaultFunction · 0.50
atMethod · 0.45
add_errorMethod · 0.45
eatMethod · 0.45
pushMethod · 0.45

Tested by

no test coverage detected