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:2833–2873  ·  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

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

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