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:212–243  ·  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

210 /// After parsing a single expression, an error is reported and all remaining tokens are
211 /// dropped by the parser.
212 fn parse_single_expression(&mut self) -> ModExpression {
213 let start = self.node_start();
214 let parsed_expr = self.parse_expression_list(ExpressionContext::default());
215
216 // All remaining newlines are actually going to be non-logical newlines.
217 self.eat(TokenKind::Newline);
218
219 if !self.at(TokenKind::EndOfFile) {
220 self.add_error(
221 ParseErrorType::UnexpectedExpressionToken,
222 self.current_token_range(),
223 );
224
225 // TODO(dhruvmanila): How should error recovery work here? Just truncate after the expression?
226 let mut progress = ParserProgress::default();
227 loop {
228 progress.assert_progressing(self);
229 if self.at(TokenKind::EndOfFile) {
230 break;
231 }
232 self.bump_any();
233 }
234 }
235
236 self.bump(TokenKind::EndOfFile);
237
238 ModExpression {
239 body: Box::new(parsed_expr.expr),
240 range: self.node_range(start),
241 node_index: AtomicNodeIndex::NONE,
242 }
243 }
244
245 /// Parses a Python module.
246 ///

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