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:2512–2557  ·  view source on GitHub ↗

Parses a set expression. See:

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

Source from the content-addressed store, hash-verified

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

Callers 1

Calls 9

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

Tested by

no test coverage detected