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

Method parse_tuple_expression

crates/ruff_python_parser/src/parser/expression.rs:2441–2474  ·  view source on GitHub ↗

Parses multiple items separated by a comma into a tuple expression. Uses the `parse_func` to parse each item in the tuple.

(
        &mut self,
        first_element: Expr,
        start: TextSize,
        parenthesized: Parenthesized,
        mut parse_func: impl FnMut(&mut Parser<'src>) -> ParsedExpr,
    )

Source from the content-addressed store, hash-verified

2439 ///
2440 /// Uses the `parse_func` to parse each item in the tuple.
2441 pub(super) fn parse_tuple_expression(
2442 &mut self,
2443 first_element: Expr,
2444 start: TextSize,
2445 parenthesized: Parenthesized,
2446 mut parse_func: impl FnMut(&mut Parser<'src>) -> ParsedExpr,
2447 ) -> ast::ExprTuple {
2448 // TODO(dhruvmanila): Can we remove `parse_func` and use `parenthesized` to
2449 // determine the parsing function?
2450
2451 if !self.at_sequence_end() {
2452 self.expect(TokenKind::Comma);
2453 }
2454
2455 let elts_snapshot = self.expr_scratch.snapshot();
2456 self.expr_scratch.push(first_element);
2457
2458 self.parse_comma_separated_list(RecoveryContextKind::TupleElements(parenthesized), |p| {
2459 let element = parse_func(p).expr;
2460 p.expr_scratch.push(element);
2461 });
2462
2463 if parenthesized.is_yes() {
2464 self.expect(TokenKind::Rpar);
2465 }
2466
2467 ast::ExprTuple {
2468 elts: self.expr_scratch.take(elts_snapshot),
2469 ctx: ExprContext::Load,
2470 range: self.node_range(start),
2471 node_index: AtomicNodeIndex::NONE,
2472 parenthesized: parenthesized.is_yes(),
2473 }
2474 }
2475
2476 /// Parses a list expression.
2477 ///

Calls 8

at_sequence_endMethod · 0.80
expectMethod · 0.80
node_rangeMethod · 0.80
snapshotMethod · 0.45
pushMethod · 0.45
is_yesMethod · 0.45
takeMethod · 0.45

Tested by

no test coverage detected