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:2843–2883  ·  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

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

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