mirror of
				https://github.com/astral-sh/ruff.git
				synced 2025-11-03 21:24:29 +00:00 
			
		
		
		
	Fix instability with await fluent style (#8676)
Fix an instability where await was followed by a breaking fluent style
expression:
```python
test_data = await (
    Stream.from_async(async_data)
    .flat_map_async()
    .map()
    .filter_async(is_valid_data)
    .to_list()
)
```
Note that this technically a minor style change (see ecosystem check)
			
			
This commit is contained in:
		
							parent
							
								
									841e6c889e
								
							
						
					
					
						commit
						dca430f4d2
					
				
					 5 changed files with 42 additions and 4 deletions
				
			
		| 
						 | 
					@ -48,3 +48,12 @@ await (
 | 
				
			||||||
    # comment
 | 
					    # comment
 | 
				
			||||||
    [foo]
 | 
					    [foo]
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# https://github.com/astral-sh/ruff/issues/8644
 | 
				
			||||||
 | 
					test_data = await (
 | 
				
			||||||
 | 
					    Stream.from_async(async_data)
 | 
				
			||||||
 | 
					    .flat_map_async()
 | 
				
			||||||
 | 
					    .map()
 | 
				
			||||||
 | 
					    .filter_async(is_valid_data)
 | 
				
			||||||
 | 
					    .to_list()
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -20,7 +20,7 @@ impl FormatNodeRule<ExprAwait> for FormatExprAwait {
 | 
				
			||||||
            [
 | 
					            [
 | 
				
			||||||
                token("await"),
 | 
					                token("await"),
 | 
				
			||||||
                space(),
 | 
					                space(),
 | 
				
			||||||
                maybe_parenthesize_expression(value, item, Parenthesize::IfRequired)
 | 
					                maybe_parenthesize_expression(value, item, Parenthesize::IfBreaks)
 | 
				
			||||||
            ]
 | 
					            ]
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -14,6 +14,7 @@ use crate::comments::{
 | 
				
			||||||
use crate::context::{NodeLevel, WithNodeLevel};
 | 
					use crate::context::{NodeLevel, WithNodeLevel};
 | 
				
			||||||
use crate::prelude::*;
 | 
					use crate::prelude::*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// From the perspective of the expression, under which circumstances does it need parentheses
 | 
				
			||||||
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
 | 
					#[derive(Copy, Clone, Debug, Eq, PartialEq)]
 | 
				
			||||||
pub(crate) enum OptionalParentheses {
 | 
					pub(crate) enum OptionalParentheses {
 | 
				
			||||||
    /// Add parentheses if the expression expands over multiple lines
 | 
					    /// Add parentheses if the expression expands over multiple lines
 | 
				
			||||||
| 
						 | 
					@ -41,7 +42,8 @@ pub(crate) trait NeedsParentheses {
 | 
				
			||||||
    ) -> OptionalParentheses;
 | 
					    ) -> OptionalParentheses;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// Configures if the expression should be parenthesized.
 | 
					/// From the perspective of the parent statement or expression, when should the child expression
 | 
				
			||||||
 | 
					/// get parentheses?
 | 
				
			||||||
#[derive(Copy, Clone, Debug, PartialEq)]
 | 
					#[derive(Copy, Clone, Debug, PartialEq)]
 | 
				
			||||||
pub(crate) enum Parenthesize {
 | 
					pub(crate) enum Parenthesize {
 | 
				
			||||||
    /// Parenthesizes the expression if it doesn't fit on a line OR if the expression is parenthesized in the source code.
 | 
					    /// Parenthesizes the expression if it doesn't fit on a line OR if the expression is parenthesized in the source code.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -93,7 +93,7 @@ async def main():
 | 
				
			||||||
```diff
 | 
					```diff
 | 
				
			||||||
--- Black
 | 
					--- Black
 | 
				
			||||||
+++ Ruff
 | 
					+++ Ruff
 | 
				
			||||||
@@ -21,7 +21,9 @@
 | 
					@@ -21,11 +21,15 @@
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 # Check comments
 | 
					 # Check comments
 | 
				
			||||||
 async def main():
 | 
					 async def main():
 | 
				
			||||||
| 
						 | 
					@ -103,6 +103,13 @@ async def main():
 | 
				
			||||||
+    )
 | 
					+    )
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 | 
					 async def main():
 | 
				
			||||||
 | 
					-    await asyncio.sleep(1)  # Hello
 | 
				
			||||||
 | 
					+    await (
 | 
				
			||||||
 | 
					+        asyncio.sleep(1)  # Hello
 | 
				
			||||||
 | 
					+    )
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 async def main():
 | 
					 async def main():
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -138,7 +145,9 @@ async def main():
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
async def main():
 | 
					async def main():
 | 
				
			||||||
    await asyncio.sleep(1)  # Hello
 | 
					    await (
 | 
				
			||||||
 | 
					        asyncio.sleep(1)  # Hello
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
async def main():
 | 
					async def main():
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -54,6 +54,15 @@ await (
 | 
				
			||||||
    # comment
 | 
					    # comment
 | 
				
			||||||
    [foo]
 | 
					    [foo]
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# https://github.com/astral-sh/ruff/issues/8644
 | 
				
			||||||
 | 
					test_data = await (
 | 
				
			||||||
 | 
					    Stream.from_async(async_data)
 | 
				
			||||||
 | 
					    .flat_map_async()
 | 
				
			||||||
 | 
					    .map()
 | 
				
			||||||
 | 
					    .filter_async(is_valid_data)
 | 
				
			||||||
 | 
					    .to_list()
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Output
 | 
					## Output
 | 
				
			||||||
| 
						 | 
					@ -122,6 +131,15 @@ await (
 | 
				
			||||||
    # comment
 | 
					    # comment
 | 
				
			||||||
    [foo]
 | 
					    [foo]
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# https://github.com/astral-sh/ruff/issues/8644
 | 
				
			||||||
 | 
					test_data = await (
 | 
				
			||||||
 | 
					    Stream.from_async(async_data)
 | 
				
			||||||
 | 
					    .flat_map_async()
 | 
				
			||||||
 | 
					    .map()
 | 
				
			||||||
 | 
					    .filter_async(is_valid_data)
 | 
				
			||||||
 | 
					    .to_list()
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue