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:202–233  ·  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

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

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