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:2834–2874  ·  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

2832 ///
2833 /// See: <https://docs.python.org/3/reference/expressions.html#yield-expressions>
2834 fn parse_yield_expression(&mut self) -> Expr {
2835 let start = self.node_start();
2836 self.bump(TokenKind::Yield);
2837
2838 if self.eat(TokenKind::From) {
2839 return self.parse_yield_from_expression(start);
2840 }
2841
2842 let value = self.at_expr().then(|| {
2843 let parsed_expr = self.parse_expression_list(ExpressionContext::starred_bitwise_or());
2844
2845 // test_ok iter_unpack_yield_py37
2846 // # parse_options: {"target-version": "3.7"}
2847 // rest = (4, 5, 6)
2848 // def g(): yield (1, 2, 3, *rest)
2849
2850 // test_ok iter_unpack_yield_py38
2851 // # parse_options: {"target-version": "3.8"}
2852 // rest = (4, 5, 6)
2853 // def g(): yield 1, 2, 3, *rest
2854 // def h(): yield 1, (yield 2, *rest), 3
2855
2856 // test_err iter_unpack_yield_py37
2857 // # parse_options: {"target-version": "3.7"}
2858 // rest = (4, 5, 6)
2859 // def g(): yield 1, 2, 3, *rest
2860 // def h(): yield 1, (yield 2, *rest), 3
2861 self.check_tuple_unpacking(
2862 &parsed_expr,
2863 UnsupportedSyntaxErrorKind::StarTuple(StarTupleKind::Yield),
2864 );
2865
2866 Box::new(parsed_expr.expr)
2867 });
2868
2869 Expr::Yield(ast::ExprYield {
2870 value,
2871 range: self.node_range(start),
2872 node_index: AtomicNodeIndex::NONE,
2873 })
2874 }
2875
2876 /// Parses a `yield from` expression.
2877 ///

Callers 1

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