mirror of
				https://github.com/astral-sh/ruff.git
				synced 2025-10-30 19:47:52 +00:00 
			
		
		
		
	Formatter: Improve single-with item formatting for Python 3.8 or older (#10276)
## Summary
This PR changes how we format `with` statements with a single with item
for Python 3.8 or older. This change is not compatible with Black.
This is how we format a single-item with statement today 
```python
def run(data_path, model_uri):
    with pyspark.sql.SparkSession.builder.config(
        key="spark.python.worker.reuse", value=True
    ).config(key="spark.ui.enabled", value=False).master(
        "local-cluster[2, 1, 1024]"
    ).getOrCreate():
        # ignore spark log output
        spark.sparkContext.setLogLevel("OFF")
        print(score_model(spark, data_path, model_uri))
```
This is different than how we would format the same expression if it is
inside any other clause header (`while`, `if`, ...):
```python
def run(data_path, model_uri):
    while (
        pyspark.sql.SparkSession.builder.config(
            key="spark.python.worker.reuse", value=True
        )
        .config(key="spark.ui.enabled", value=False)
        .master("local-cluster[2, 1, 1024]")
        .getOrCreate()
    ):
        # ignore spark log output
        spark.sparkContext.setLogLevel("OFF")
        print(score_model(spark, data_path, model_uri))
```
Which seems inconsistent to me. 
This PR changes the formatting of the single-item with Python 3.8 or
older to match that of other clause headers.
```python
def run(data_path, model_uri):
    with (
        pyspark.sql.SparkSession.builder.config(
            key="spark.python.worker.reuse", value=True
        )
        .config(key="spark.ui.enabled", value=False)
        .master("local-cluster[2, 1, 1024]")
        .getOrCreate()
    ):
        # ignore spark log output
        spark.sparkContext.setLogLevel("OFF")
        print(score_model(spark, data_path, model_uri))
```
According to our versioning policy, this style change is gated behind a
preview flag.
## Test Plan
See added tests.
Added
			
			
This commit is contained in:
		
							parent
							
								
									4bce801065
								
							
						
					
					
						commit
						b64f2ea401
					
				
					 5 changed files with 167 additions and 4 deletions
				
			
		|  | @ -104,7 +104,9 @@ impl FormatNodeRule<StmtWith> for FormatStmtWith { | |||
|                             WithItemsLayout::Python38OrOlder => f | ||||
|                                 .join_with(format_args![token(","), space()]) | ||||
|                                 .entries(with_stmt.items.iter().map(|item| { | ||||
|                                     item.format().with_options(WithItemLayout::Python38OrOlder) | ||||
|                                     item.format().with_options(WithItemLayout::Python38OrOlder { | ||||
|                                         single: with_stmt.items.len() == 1, | ||||
|                                     }) | ||||
|                                 })) | ||||
|                                 .finish(), | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Micha Reiser
						Micha Reiser