mirror of
				https://github.com/astral-sh/ruff.git
				synced 2025-10-31 20:08:19 +00:00 
			
		
		
		
	 0eeb02c0c1
			
		
	
	
		0eeb02c0c1
		
			
		
	
	
	
	
		
			
			## Summary Part of #17412 Starred expressions cannot be used as values in assignment expressions. Add a new semantic syntax error to catch such instances. Note that we already have `ParseErrorType::InvalidStarredExpressionUsage` to catch some starred expression errors during parsing, but that does not cover top level assignment expressions. ## Test Plan - Added new inline tests for the new rule - Found some examples marked as "valid" in existing tests (`_ = *data`), which are not really valid (per this new rule) and updated them - There was an existing inline test - `assign_stmt_invalid_value_expr` which had instances of `*` expression which would be deemed invalid by this new rule. Converted these to tuples, so that they do not trigger this new rule.
		
			
				
	
	
		
			43 lines
		
	
	
		
			No EOL
		
	
	
		
			729 B
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			No EOL
		
	
	
		
			729 B
		
	
	
	
		
			Python
		
	
	
	
	
	
| x = (1, 2, 3)
 | |
| 
 | |
| (x, y) = (1, 2, 3)
 | |
| 
 | |
| [x, y] = (1, 2, 3)
 | |
| 
 | |
| x.y = (1, 2, 3)
 | |
| 
 | |
| x[y] = (1, 2, 3)
 | |
| 
 | |
| (x, *y) = (1, 2, 3)
 | |
| 
 | |
| 
 | |
| # This last group of tests checks that assignments we expect to be parsed
 | |
| # (including some interesting ones) continue to be parsed successfully.
 | |
| 
 | |
| [x, y, z] = [1, 2, 3]
 | |
| 
 | |
| (x, y, z) = (1, 2, 3)
 | |
| x[0] = 42
 | |
| 
 | |
| # This is actually a type error, not a syntax error. So check that it
 | |
| # doesn't fail parsing.
 | |
| 
 | |
| 5[0] = 42
 | |
| x[1:2] = [42]
 | |
| 
 | |
| # This is actually a type error, not a syntax error. So check that it
 | |
| # doesn't fail parsing.
 | |
| 5[1:2] = [42]
 | |
| 
 | |
| foo.bar = 42
 | |
| 
 | |
| # This is actually an attribute error, not a syntax error. So check that
 | |
| # it doesn't fail parsing.
 | |
| "foo".y = 42
 | |
| 
 | |
| foo = 42
 | |
| 
 | |
| [] = (*data,)
 | |
| () = (*data,)
 | |
| a, b = ab
 | |
| a = b = c |