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:154–185  ·  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

152 /// After parsing a single expression, an error is reported and all remaining tokens are
153 /// dropped by the parser.
154 fn parse_single_expression(&mut self) -> ModExpression {
155 let start = self.node_start();
156 let parsed_expr = self.parse_expression_list(ExpressionContext::default());
157
158 // All remaining newlines are actually going to be non-logical newlines.
159 self.eat(TokenKind::Newline);
160
161 if !self.at(TokenKind::EndOfFile) {
162 self.add_error(
163 ParseErrorType::UnexpectedExpressionToken,
164 self.current_token_range(),
165 );
166
167 // TODO(dhruvmanila): How should error recovery work here? Just truncate after the expression?
168 let mut progress = ParserProgress::default();
169 loop {
170 progress.assert_progressing(self);
171 if self.at(TokenKind::EndOfFile) {
172 break;
173 }
174 self.bump_any();
175 }
176 }
177
178 self.bump(TokenKind::EndOfFile);
179
180 ModExpression {
181 body: Box::new(parsed_expr.expr),
182 range: self.node_range(start),
183 node_index: AtomicNodeIndex::NONE,
184 }
185 }
186
187 /// Parses a Python module.
188 ///

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