Parses a set expression. See:
(&mut self, first_element: ParsedExpr, start: TextSize)
| 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 | /// |
no test coverage detected