Remove parentheses around some walrus operators (#6173)

## Summary

Closes https://github.com/astral-sh/ruff/issues/5781

## Test Plan

Added cases to
`crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/named_expr.py`
one-by-one and adjusted the condition as needed.
This commit is contained in:
Charlie Marsh 2023-07-29 10:06:26 -04:00 committed by GitHub
parent 1d7ad30188
commit 5d9814d84d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 93 additions and 215 deletions

View file

@ -1,196 +0,0 @@
---
source: crates/ruff_python_formatter/tests/fixtures.rs
input_file: crates/ruff_python_formatter/resources/test/fixtures/black/py_38/pep_572.py
---
## Input
```py
(a := 1)
(a := a)
if (match := pattern.search(data)) is None:
pass
if match := pattern.search(data):
pass
[y := f(x), y**2, y**3]
filtered_data = [y for x in data if (y := f(x)) is None]
(y := f(x))
y0 = (y1 := f(x))
foo(x=(y := f(x)))
def foo(answer=(p := 42)):
pass
def foo(answer: (p := 42) = 5):
pass
lambda: (x := 1)
(x := lambda: 1)
(x := lambda: (y := 1))
lambda line: (m := re.match(pattern, line)) and m.group(1)
x = (y := 0)
(z := (y := (x := 0)))
(info := (name, phone, *rest))
(x := 1, 2)
(total := total + tax)
len(lines := f.readlines())
foo(x := 3, cat="vector")
foo(cat=(category := "vector"))
if any(len(longline := l) >= 100 for l in lines):
print(longline)
if env_base := os.environ.get("PYTHONUSERBASE", None):
return env_base
if self._is_special and (ans := self._check_nans(context=context)):
return ans
foo(b := 2, a=1)
foo((b := 2), a=1)
foo(c=(b := 2), a=1)
while x := f(x):
pass
while x := f(x):
pass
```
## Black Differences
```diff
--- Black
+++ Ruff
@@ -2,7 +2,7 @@
(a := a)
if (match := pattern.search(data)) is None:
pass
-if match := pattern.search(data):
+if (match := pattern.search(data)):
pass
[y := f(x), y**2, y**3]
filtered_data = [y for x in data if (y := f(x)) is None]
@@ -33,7 +33,7 @@
foo(cat=(category := "vector"))
if any(len(longline := l) >= 100 for l in lines):
print(longline)
-if env_base := os.environ.get("PYTHONUSERBASE", None):
+if (env_base := os.environ.get("PYTHONUSERBASE", None)):
return env_base
if self._is_special and (ans := self._check_nans(context=context)):
return ans
@@ -41,7 +41,7 @@
foo((b := 2), a=1)
foo(c=(b := 2), a=1)
-while x := f(x):
+while (x := f(x)):
pass
-while x := f(x):
+while (x := f(x)):
pass
```
## Ruff Output
```py
(a := 1)
(a := a)
if (match := pattern.search(data)) is None:
pass
if (match := pattern.search(data)):
pass
[y := f(x), y**2, y**3]
filtered_data = [y for x in data if (y := f(x)) is None]
(y := f(x))
y0 = (y1 := f(x))
foo(x=(y := f(x)))
def foo(answer=(p := 42)):
pass
def foo(answer: (p := 42) = 5):
pass
lambda: (x := 1)
(x := lambda: 1)
(x := lambda: (y := 1))
lambda line: (m := re.match(pattern, line)) and m.group(1)
x = (y := 0)
(z := (y := (x := 0)))
(info := (name, phone, *rest))
(x := 1, 2)
(total := total + tax)
len(lines := f.readlines())
foo(x := 3, cat="vector")
foo(cat=(category := "vector"))
if any(len(longline := l) >= 100 for l in lines):
print(longline)
if (env_base := os.environ.get("PYTHONUSERBASE", None)):
return env_base
if self._is_special and (ans := self._check_nans(context=context)):
return ans
foo(b := 2, a=1)
foo((b := 2), a=1)
foo(c=(b := 2), a=1)
while (x := f(x)):
pass
while (x := f(x)):
pass
```
## Black Output
```py
(a := 1)
(a := a)
if (match := pattern.search(data)) is None:
pass
if match := pattern.search(data):
pass
[y := f(x), y**2, y**3]
filtered_data = [y for x in data if (y := f(x)) is None]
(y := f(x))
y0 = (y1 := f(x))
foo(x=(y := f(x)))
def foo(answer=(p := 42)):
pass
def foo(answer: (p := 42) = 5):
pass
lambda: (x := 1)
(x := lambda: 1)
(x := lambda: (y := 1))
lambda line: (m := re.match(pattern, line)) and m.group(1)
x = (y := 0)
(z := (y := (x := 0)))
(info := (name, phone, *rest))
(x := 1, 2)
(total := total + tax)
len(lines := f.readlines())
foo(x := 3, cat="vector")
foo(cat=(category := "vector"))
if any(len(longline := l) >= 100 for l in lines):
print(longline)
if env_base := os.environ.get("PYTHONUSERBASE", None):
return env_base
if self._is_special and (ans := self._check_nans(context=context)):
return ans
foo(b := 2, a=1)
foo((b := 2), a=1)
foo(c=(b := 2), a=1)
while x := f(x):
pass
while x := f(x):
pass
```

View file

@ -32,19 +32,6 @@ def f():
@relaxed_decorator[0]
def f():
...
@@ -13,8 +12,10 @@
...
-@extremely_long_variable_name_that_doesnt_fit := complex.expression(
- with_long="arguments_value_that_wont_fit_at_the_end_of_the_line"
+@(
+ extremely_long_variable_name_that_doesnt_fit := complex.expression(
+ with_long="arguments_value_that_wont_fit_at_the_end_of_the_line"
+ )
)
def f():
...
```
## Ruff Output
@ -64,10 +51,8 @@ def f():
...
@(
extremely_long_variable_name_that_doesnt_fit := complex.expression(
with_long="arguments_value_that_wont_fit_at_the_end_of_the_line"
)
@extremely_long_variable_name_that_doesnt_fit := complex.expression(
with_long="arguments_value_that_wont_fit_at_the_end_of_the_line"
)
def f():
...

View file

@ -17,6 +17,31 @@ if (
y0 = (y1 := f(x))
f(x:=y, z=True)
assert (x := 1)
def f():
return (x := 1)
for x in (y := [1, 2, 3]):
pass
async for x in (y := [1, 2, 3]):
pass
del (x := 1)
try:
pass
except (e := Exception):
if x := 1:
pass
(x := 1)
(x := 1) + (y := 2)
```
## Output
@ -32,6 +57,31 @@ if (
y0 = (y1 := f(x))
f(x := y, z=True)
assert (x := 1)
def f():
return (x := 1)
for x in (y := [1, 2, 3]):
pass
async for x in (y := [1, 2, 3]):
pass
del (x := 1)
try:
pass
except (e := Exception):
if x := 1:
pass
(x := 1)
(x := 1) + (y := 2)
```