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:2831–2871  ·  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

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

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