mirror of
				https://github.com/astral-sh/ruff.git
				synced 2025-11-03 21:24:29 +00:00 
			
		
		
		
	Summary -- Fixes https://github.com/astral-sh/ruff/issues/16520 by flagging single, starred expressions in `return`, `yield`, and `for` statements. I thought `yield from` would also be included here, but that error is emitted by the CPython parser: ```pycon >>> ast.parse("def f(): yield from *x") Traceback (most recent call last): File "<python-input-214>", line 1, in <module> ast.parse("def f(): yield from *x") ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.13/ast.py", line 54, in parse return compile(source, filename, mode, flags, _feature_version=feature_version, optimize=optimize) File "<unknown>", line 1 def f(): yield from *x ^ SyntaxError: invalid syntax ``` And we also already catch it in our parser. Test Plan -- New inline tests and updates to existing tests.
		
			
				
	
	
		
			463 lines
		
	
	
	
		
			20 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			463 lines
		
	
	
	
		
			20 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
---
 | 
						|
source: crates/ruff_python_parser/tests/fixtures.rs
 | 
						|
input_file: crates/ruff_python_parser/resources/valid/expressions/yield.py
 | 
						|
---
 | 
						|
## AST
 | 
						|
 | 
						|
```
 | 
						|
Module(
 | 
						|
    ModModule {
 | 
						|
        range: 0..166,
 | 
						|
        body: [
 | 
						|
            Expr(
 | 
						|
                StmtExpr {
 | 
						|
                    range: 0..5,
 | 
						|
                    value: Yield(
 | 
						|
                        ExprYield {
 | 
						|
                            range: 0..5,
 | 
						|
                            value: None,
 | 
						|
                        },
 | 
						|
                    ),
 | 
						|
                },
 | 
						|
            ),
 | 
						|
            Expr(
 | 
						|
                StmtExpr {
 | 
						|
                    range: 6..13,
 | 
						|
                    value: Yield(
 | 
						|
                        ExprYield {
 | 
						|
                            range: 6..13,
 | 
						|
                            value: Some(
 | 
						|
                                Name(
 | 
						|
                                    ExprName {
 | 
						|
                                        range: 12..13,
 | 
						|
                                        id: Name("x"),
 | 
						|
                                        ctx: Load,
 | 
						|
                                    },
 | 
						|
                                ),
 | 
						|
                            ),
 | 
						|
                        },
 | 
						|
                    ),
 | 
						|
                },
 | 
						|
            ),
 | 
						|
            Expr(
 | 
						|
                StmtExpr {
 | 
						|
                    range: 14..25,
 | 
						|
                    value: Yield(
 | 
						|
                        ExprYield {
 | 
						|
                            range: 14..25,
 | 
						|
                            value: Some(
 | 
						|
                                BinOp(
 | 
						|
                                    ExprBinOp {
 | 
						|
                                        range: 20..25,
 | 
						|
                                        left: Name(
 | 
						|
                                            ExprName {
 | 
						|
                                                range: 20..21,
 | 
						|
                                                id: Name("x"),
 | 
						|
                                                ctx: Load,
 | 
						|
                                            },
 | 
						|
                                        ),
 | 
						|
                                        op: Add,
 | 
						|
                                        right: NumberLiteral(
 | 
						|
                                            ExprNumberLiteral {
 | 
						|
                                                range: 24..25,
 | 
						|
                                                value: Int(
 | 
						|
                                                    1,
 | 
						|
                                                ),
 | 
						|
                                            },
 | 
						|
                                        ),
 | 
						|
                                    },
 | 
						|
                                ),
 | 
						|
                            ),
 | 
						|
                        },
 | 
						|
                    ),
 | 
						|
                },
 | 
						|
            ),
 | 
						|
            Expr(
 | 
						|
                StmtExpr {
 | 
						|
                    range: 26..39,
 | 
						|
                    value: Yield(
 | 
						|
                        ExprYield {
 | 
						|
                            range: 26..39,
 | 
						|
                            value: Some(
 | 
						|
                                BoolOp(
 | 
						|
                                    ExprBoolOp {
 | 
						|
                                        range: 32..39,
 | 
						|
                                        op: And,
 | 
						|
                                        values: [
 | 
						|
                                            Name(
 | 
						|
                                                ExprName {
 | 
						|
                                                    range: 32..33,
 | 
						|
                                                    id: Name("x"),
 | 
						|
                                                    ctx: Load,
 | 
						|
                                                },
 | 
						|
                                            ),
 | 
						|
                                            Name(
 | 
						|
                                                ExprName {
 | 
						|
                                                    range: 38..39,
 | 
						|
                                                    id: Name("y"),
 | 
						|
                                                    ctx: Load,
 | 
						|
                                                },
 | 
						|
                                            ),
 | 
						|
                                        ],
 | 
						|
                                    },
 | 
						|
                                ),
 | 
						|
                            ),
 | 
						|
                        },
 | 
						|
                    ),
 | 
						|
                },
 | 
						|
            ),
 | 
						|
            Expr(
 | 
						|
                StmtExpr {
 | 
						|
                    range: 40..52,
 | 
						|
                    value: Yield(
 | 
						|
                        ExprYield {
 | 
						|
                            range: 40..52,
 | 
						|
                            value: Some(
 | 
						|
                                Call(
 | 
						|
                                    ExprCall {
 | 
						|
                                        range: 46..52,
 | 
						|
                                        func: Name(
 | 
						|
                                            ExprName {
 | 
						|
                                                range: 46..50,
 | 
						|
                                                id: Name("call"),
 | 
						|
                                                ctx: Load,
 | 
						|
                                            },
 | 
						|
                                        ),
 | 
						|
                                        arguments: Arguments {
 | 
						|
                                            range: 50..52,
 | 
						|
                                            args: [],
 | 
						|
                                            keywords: [],
 | 
						|
                                        },
 | 
						|
                                    },
 | 
						|
                                ),
 | 
						|
                            ),
 | 
						|
                        },
 | 
						|
                    ),
 | 
						|
                },
 | 
						|
            ),
 | 
						|
            Expr(
 | 
						|
                StmtExpr {
 | 
						|
                    range: 53..65,
 | 
						|
                    value: Yield(
 | 
						|
                        ExprYield {
 | 
						|
                            range: 53..65,
 | 
						|
                            value: Some(
 | 
						|
                                List(
 | 
						|
                                    ExprList {
 | 
						|
                                        range: 59..65,
 | 
						|
                                        elts: [
 | 
						|
                                            NumberLiteral(
 | 
						|
                                                ExprNumberLiteral {
 | 
						|
                                                    range: 60..61,
 | 
						|
                                                    value: Int(
 | 
						|
                                                        1,
 | 
						|
                                                    ),
 | 
						|
                                                },
 | 
						|
                                            ),
 | 
						|
                                            NumberLiteral(
 | 
						|
                                                ExprNumberLiteral {
 | 
						|
                                                    range: 63..64,
 | 
						|
                                                    value: Int(
 | 
						|
                                                        2,
 | 
						|
                                                    ),
 | 
						|
                                                },
 | 
						|
                                            ),
 | 
						|
                                        ],
 | 
						|
                                        ctx: Load,
 | 
						|
                                    },
 | 
						|
                                ),
 | 
						|
                            ),
 | 
						|
                        },
 | 
						|
                    ),
 | 
						|
                },
 | 
						|
            ),
 | 
						|
            Expr(
 | 
						|
                StmtExpr {
 | 
						|
                    range: 66..78,
 | 
						|
                    value: Yield(
 | 
						|
                        ExprYield {
 | 
						|
                            range: 66..78,
 | 
						|
                            value: Some(
 | 
						|
                                Set(
 | 
						|
                                    ExprSet {
 | 
						|
                                        range: 72..78,
 | 
						|
                                        elts: [
 | 
						|
                                            NumberLiteral(
 | 
						|
                                                ExprNumberLiteral {
 | 
						|
                                                    range: 73..74,
 | 
						|
                                                    value: Int(
 | 
						|
                                                        3,
 | 
						|
                                                    ),
 | 
						|
                                                },
 | 
						|
                                            ),
 | 
						|
                                            NumberLiteral(
 | 
						|
                                                ExprNumberLiteral {
 | 
						|
                                                    range: 76..77,
 | 
						|
                                                    value: Int(
 | 
						|
                                                        4,
 | 
						|
                                                    ),
 | 
						|
                                                },
 | 
						|
                                            ),
 | 
						|
                                        ],
 | 
						|
                                    },
 | 
						|
                                ),
 | 
						|
                            ),
 | 
						|
                        },
 | 
						|
                    ),
 | 
						|
                },
 | 
						|
            ),
 | 
						|
            Expr(
 | 
						|
                StmtExpr {
 | 
						|
                    range: 79..91,
 | 
						|
                    value: Yield(
 | 
						|
                        ExprYield {
 | 
						|
                            range: 79..91,
 | 
						|
                            value: Some(
 | 
						|
                                Dict(
 | 
						|
                                    ExprDict {
 | 
						|
                                        range: 85..91,
 | 
						|
                                        items: [
 | 
						|
                                            DictItem {
 | 
						|
                                                key: Some(
 | 
						|
                                                    Name(
 | 
						|
                                                        ExprName {
 | 
						|
                                                            range: 86..87,
 | 
						|
                                                            id: Name("x"),
 | 
						|
                                                            ctx: Load,
 | 
						|
                                                        },
 | 
						|
                                                    ),
 | 
						|
                                                ),
 | 
						|
                                                value: NumberLiteral(
 | 
						|
                                                    ExprNumberLiteral {
 | 
						|
                                                        range: 89..90,
 | 
						|
                                                        value: Int(
 | 
						|
                                                            5,
 | 
						|
                                                        ),
 | 
						|
                                                    },
 | 
						|
                                                ),
 | 
						|
                                            },
 | 
						|
                                        ],
 | 
						|
                                    },
 | 
						|
                                ),
 | 
						|
                            ),
 | 
						|
                        },
 | 
						|
                    ),
 | 
						|
                },
 | 
						|
            ),
 | 
						|
            Expr(
 | 
						|
                StmtExpr {
 | 
						|
                    range: 92..102,
 | 
						|
                    value: Yield(
 | 
						|
                        ExprYield {
 | 
						|
                            range: 92..102,
 | 
						|
                            value: Some(
 | 
						|
                                Tuple(
 | 
						|
                                    ExprTuple {
 | 
						|
                                        range: 98..102,
 | 
						|
                                        elts: [
 | 
						|
                                            Name(
 | 
						|
                                                ExprName {
 | 
						|
                                                    range: 98..99,
 | 
						|
                                                    id: Name("x"),
 | 
						|
                                                    ctx: Load,
 | 
						|
                                                },
 | 
						|
                                            ),
 | 
						|
                                            Name(
 | 
						|
                                                ExprName {
 | 
						|
                                                    range: 101..102,
 | 
						|
                                                    id: Name("y"),
 | 
						|
                                                    ctx: Load,
 | 
						|
                                                },
 | 
						|
                                            ),
 | 
						|
                                        ],
 | 
						|
                                        ctx: Load,
 | 
						|
                                        parenthesized: false,
 | 
						|
                                    },
 | 
						|
                                ),
 | 
						|
                            ),
 | 
						|
                        },
 | 
						|
                    ),
 | 
						|
                },
 | 
						|
            ),
 | 
						|
            Expr(
 | 
						|
                StmtExpr {
 | 
						|
                    range: 103..115,
 | 
						|
                    value: Yield(
 | 
						|
                        ExprYield {
 | 
						|
                            range: 103..115,
 | 
						|
                            value: Some(
 | 
						|
                                Tuple(
 | 
						|
                                    ExprTuple {
 | 
						|
                                        range: 109..115,
 | 
						|
                                        elts: [
 | 
						|
                                            Name(
 | 
						|
                                                ExprName {
 | 
						|
                                                    range: 110..111,
 | 
						|
                                                    id: Name("x"),
 | 
						|
                                                    ctx: Load,
 | 
						|
                                                },
 | 
						|
                                            ),
 | 
						|
                                            Name(
 | 
						|
                                                ExprName {
 | 
						|
                                                    range: 113..114,
 | 
						|
                                                    id: Name("y"),
 | 
						|
                                                    ctx: Load,
 | 
						|
                                                },
 | 
						|
                                            ),
 | 
						|
                                        ],
 | 
						|
                                        ctx: Load,
 | 
						|
                                        parenthesized: true,
 | 
						|
                                    },
 | 
						|
                                ),
 | 
						|
                            ),
 | 
						|
                        },
 | 
						|
                    ),
 | 
						|
                },
 | 
						|
            ),
 | 
						|
            Expr(
 | 
						|
                StmtExpr {
 | 
						|
                    range: 116..128,
 | 
						|
                    value: Yield(
 | 
						|
                        ExprYield {
 | 
						|
                            range: 116..128,
 | 
						|
                            value: Some(
 | 
						|
                                Compare(
 | 
						|
                                    ExprCompare {
 | 
						|
                                        range: 122..128,
 | 
						|
                                        left: Name(
 | 
						|
                                            ExprName {
 | 
						|
                                                range: 122..123,
 | 
						|
                                                id: Name("x"),
 | 
						|
                                                ctx: Load,
 | 
						|
                                            },
 | 
						|
                                        ),
 | 
						|
                                        ops: [
 | 
						|
                                            Eq,
 | 
						|
                                        ],
 | 
						|
                                        comparators: [
 | 
						|
                                            Name(
 | 
						|
                                                ExprName {
 | 
						|
                                                    range: 127..128,
 | 
						|
                                                    id: Name("y"),
 | 
						|
                                                    ctx: Load,
 | 
						|
                                                },
 | 
						|
                                            ),
 | 
						|
                                        ],
 | 
						|
                                    },
 | 
						|
                                ),
 | 
						|
                            ),
 | 
						|
                        },
 | 
						|
                    ),
 | 
						|
                },
 | 
						|
            ),
 | 
						|
            Expr(
 | 
						|
                StmtExpr {
 | 
						|
                    range: 129..143,
 | 
						|
                    value: Yield(
 | 
						|
                        ExprYield {
 | 
						|
                            range: 129..143,
 | 
						|
                            value: Some(
 | 
						|
                                Named(
 | 
						|
                                    ExprNamed {
 | 
						|
                                        range: 136..142,
 | 
						|
                                        target: Name(
 | 
						|
                                            ExprName {
 | 
						|
                                                range: 136..137,
 | 
						|
                                                id: Name("x"),
 | 
						|
                                                ctx: Store,
 | 
						|
                                            },
 | 
						|
                                        ),
 | 
						|
                                        value: NumberLiteral(
 | 
						|
                                            ExprNumberLiteral {
 | 
						|
                                                range: 141..142,
 | 
						|
                                                value: Int(
 | 
						|
                                                    1,
 | 
						|
                                                ),
 | 
						|
                                            },
 | 
						|
                                        ),
 | 
						|
                                    },
 | 
						|
                                ),
 | 
						|
                            ),
 | 
						|
                        },
 | 
						|
                    ),
 | 
						|
                },
 | 
						|
            ),
 | 
						|
            Expr(
 | 
						|
                StmtExpr {
 | 
						|
                    range: 144..155,
 | 
						|
                    value: Yield(
 | 
						|
                        ExprYield {
 | 
						|
                            range: 144..155,
 | 
						|
                            value: Some(
 | 
						|
                                Tuple(
 | 
						|
                                    ExprTuple {
 | 
						|
                                        range: 150..155,
 | 
						|
                                        elts: [
 | 
						|
                                            Name(
 | 
						|
                                                ExprName {
 | 
						|
                                                    range: 150..151,
 | 
						|
                                                    id: Name("x"),
 | 
						|
                                                    ctx: Load,
 | 
						|
                                                },
 | 
						|
                                            ),
 | 
						|
                                            Starred(
 | 
						|
                                                ExprStarred {
 | 
						|
                                                    range: 153..155,
 | 
						|
                                                    value: Name(
 | 
						|
                                                        ExprName {
 | 
						|
                                                            range: 154..155,
 | 
						|
                                                            id: Name("y"),
 | 
						|
                                                            ctx: Load,
 | 
						|
                                                        },
 | 
						|
                                                    ),
 | 
						|
                                                    ctx: Load,
 | 
						|
                                                },
 | 
						|
                                            ),
 | 
						|
                                        ],
 | 
						|
                                        ctx: Load,
 | 
						|
                                        parenthesized: false,
 | 
						|
                                    },
 | 
						|
                                ),
 | 
						|
                            ),
 | 
						|
                        },
 | 
						|
                    ),
 | 
						|
                },
 | 
						|
            ),
 | 
						|
            Expr(
 | 
						|
                StmtExpr {
 | 
						|
                    range: 156..165,
 | 
						|
                    value: Yield(
 | 
						|
                        ExprYield {
 | 
						|
                            range: 156..165,
 | 
						|
                            value: Some(
 | 
						|
                                Tuple(
 | 
						|
                                    ExprTuple {
 | 
						|
                                        range: 162..165,
 | 
						|
                                        elts: [
 | 
						|
                                            Starred(
 | 
						|
                                                ExprStarred {
 | 
						|
                                                    range: 162..164,
 | 
						|
                                                    value: Name(
 | 
						|
                                                        ExprName {
 | 
						|
                                                            range: 163..164,
 | 
						|
                                                            id: Name("x"),
 | 
						|
                                                            ctx: Load,
 | 
						|
                                                        },
 | 
						|
                                                    ),
 | 
						|
                                                    ctx: Load,
 | 
						|
                                                },
 | 
						|
                                            ),
 | 
						|
                                        ],
 | 
						|
                                        ctx: Load,
 | 
						|
                                        parenthesized: false,
 | 
						|
                                    },
 | 
						|
                                ),
 | 
						|
                            ),
 | 
						|
                        },
 | 
						|
                    ),
 | 
						|
                },
 | 
						|
            ),
 | 
						|
        ],
 | 
						|
    },
 | 
						|
)
 | 
						|
```
 |