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

Method parse_set_expression

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

Parses a set expression. See:

(&mut self, first_element: ParsedExpr, start: TextSize)

Source from the content-addressed store, hash-verified

2504 ///
2505 /// See: <https://docs.python.org/3/reference/expressions.html#set-displays>
2506 fn parse_set_expression(&mut self, first_element: ParsedExpr, start: TextSize) -> ast::ExprSet {
2507 if !self.at_sequence_end() {
2508 self.expect(TokenKind::Comma);
2509 }
2510
2511 // test_err unparenthesized_named_expr_set_literal_py38
2512 // # parse_options: {"target-version": "3.8"}
2513 // {x := 1, 2, 3}
2514 // {1, x := 2, 3}
2515 // {1, 2, x := 3}
2516
2517 if first_element.is_unparenthesized_named_expr() {
2518 self.add_unsupported_syntax_error(
2519 UnsupportedSyntaxErrorKind::UnparenthesizedNamedExpr(
2520 UnparenthesizedNamedExprKind::SetLiteral,
2521 ),
2522 first_element.range(),
2523 );
2524 }
2525
2526 let elts_snapshot = self.expr_scratch.snapshot();
2527 self.expr_scratch.push(first_element.expr);
2528
2529 self.parse_comma_separated_list(RecoveryContextKind::SetElements, |parser| {
2530 let parsed_expr =
2531 parser.parse_named_expression_or_higher(ExpressionContext::starred_bitwise_or());
2532
2533 if parsed_expr.is_unparenthesized_named_expr() {
2534 parser.add_unsupported_syntax_error(
2535 UnsupportedSyntaxErrorKind::UnparenthesizedNamedExpr(
2536 UnparenthesizedNamedExprKind::SetLiteral,
2537 ),
2538 parsed_expr.range(),
2539 );
2540 }
2541
2542 parser.expr_scratch.push(parsed_expr.expr);
2543 });
2544
2545 self.expect(TokenKind::Rbrace);
2546
2547 ast::ExprSet {
2548 range: self.node_range(start),
2549 node_index: AtomicNodeIndex::NONE,
2550 elts: self.expr_scratch.take(elts_snapshot),
2551 }
2552 }
2553
2554 /// Parses a dictionary expression.
2555 ///

Callers 1

Calls 11

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

Tested by

no test coverage detected