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

Method parse_yield_expression

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

Parses a `yield` expression. # Panics If the parser isn't positioned at a `yield` token. See:

(&mut self)

Source from the content-addressed store, hash-verified

2765 ///
2766 /// See: <https://docs.python.org/3/reference/expressions.html#yield-expressions>
2767 fn parse_yield_expression(&mut self) -> Expr {
2768 let start = self.node_start();
2769 self.bump(TokenKind::Yield);
2770
2771 if self.eat(TokenKind::From) {
2772 return self.parse_yield_from_expression(start);
2773 }
2774
2775 let value = self.at_expr().then(|| {
2776 let parsed_expr = self.parse_expression_list(ExpressionContext::starred_bitwise_or());
2777
2778 // test_ok iter_unpack_yield_py37
2779 // # parse_options: {"target-version": "3.7"}
2780 // rest = (4, 5, 6)
2781 // def g(): yield (1, 2, 3, *rest)
2782
2783 // test_ok iter_unpack_yield_py38
2784 // # parse_options: {"target-version": "3.8"}
2785 // rest = (4, 5, 6)
2786 // def g(): yield 1, 2, 3, *rest
2787 // def h(): yield 1, (yield 2, *rest), 3
2788
2789 // test_err iter_unpack_yield_py37
2790 // # parse_options: {"target-version": "3.7"}
2791 // rest = (4, 5, 6)
2792 // def g(): yield 1, 2, 3, *rest
2793 // def h(): yield 1, (yield 2, *rest), 3
2794 self.check_tuple_unpacking(
2795 &parsed_expr,
2796 UnsupportedSyntaxErrorKind::StarTuple(StarTupleKind::Yield),
2797 );
2798
2799 Box::new(parsed_expr.expr)
2800 });
2801
2802 Expr::Yield(ast::ExprYield {
2803 value,
2804 range: self.node_range(start),
2805 node_index: AtomicNodeIndex::NONE,
2806 })
2807 }
2808
2809 /// Parses a `yield from` expression.
2810 ///

Callers 1

parse_lhs_expressionMethod · 0.80

Calls 8

node_startMethod · 0.80
at_exprMethod · 0.80
parse_expression_listMethod · 0.80
check_tuple_unpackingMethod · 0.80
node_rangeMethod · 0.80
bumpMethod · 0.45
eatMethod · 0.45

Tested by

no test coverage detected