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

Method parse_single_expression

crates/ruff_python_parser/src/parser/mod.rs:181–212  ·  view source on GitHub ↗

Parses a single expression. This is to be used for [`Mode::Expression`]. ## Recovery After parsing a single expression, an error is reported and all remaining tokens are dropped by the parser.

(&mut self)

Source from the content-addressed store, hash-verified

179 /// After parsing a single expression, an error is reported and all remaining tokens are
180 /// dropped by the parser.
181 fn parse_single_expression(&mut self) -> ModExpression {
182 let start = self.node_start();
183 let parsed_expr = self.parse_expression_list(ExpressionContext::default());
184
185 // All remaining newlines are actually going to be non-logical newlines.
186 self.eat(TokenKind::Newline);
187
188 if !self.at(TokenKind::EndOfFile) {
189 self.add_error(
190 ParseErrorType::UnexpectedExpressionToken,
191 self.current_token_range(),
192 );
193
194 // TODO(dhruvmanila): How should error recovery work here? Just truncate after the expression?
195 let mut progress = ParserProgress::default();
196 loop {
197 progress.assert_progressing(self);
198 if self.at(TokenKind::EndOfFile) {
199 break;
200 }
201 self.bump_any();
202 }
203 }
204
205 self.bump(TokenKind::EndOfFile);
206
207 ModExpression {
208 body: Box::new(parsed_expr.expr),
209 range: self.node_range(start),
210 node_index: AtomicNodeIndex::NONE,
211 }
212 }
213
214 /// Parses a Python module.
215 ///

Callers 1

parseMethod · 0.80

Calls 11

node_startMethod · 0.80
parse_expression_listMethod · 0.80
current_token_rangeMethod · 0.80
assert_progressingMethod · 0.80
bump_anyMethod · 0.80
node_rangeMethod · 0.80
defaultFunction · 0.50
eatMethod · 0.45
atMethod · 0.45
add_errorMethod · 0.45
bumpMethod · 0.45

Tested by

no test coverage detected