Skip to content

Commit

Permalink
Fix incorrect space before colon in if/while stmts (#1655)
Browse files Browse the repository at this point in the history
* Fix incorrect space before colon in if/while stmts

Previously Black would format this code

```
if (foo := True):
	print(foo)
```

as

```
if (foo := True) :
	print(foo)
```

adding an incorrect space after the RPAR. Buggy code in the
normalize_invisible_parens function caused the colon to be wrapped in
invisible parentheses. The LPAR of that pair was then prefixed with a
single space at the request of the whitespace function.

This commit fixes the accidental skipping of a pre-condition check
which must return True before parenthesis normalization of a specific
child Leaf or Node can happen. The pre-condition check being skipped
was why the colon was wrapped in invisible parentheses.

* Add an entry in CHANGES.md
  • Loading branch information
ichard26 committed Aug 31, 2020
1 parent 573b8de commit 1d2d726
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 2 deletions.
3 changes: 3 additions & 0 deletions CHANGES.md
Expand Up @@ -7,6 +7,9 @@
- `Black` now respects `--skip-string-normalization` when normalizing multiline
docstring quotes (#1637)

- `Black` no longer adds an incorrect space after a parenthesized assignment expression
in if/while statements (#1655)

- fixed a crash when PWD=/ on POSIX (#1631)

### 20.8b1
Expand Down
5 changes: 5 additions & 0 deletions docs/change_log.md
Expand Up @@ -9,6 +9,11 @@
- `Black` now respects `--skip-string-normalization` when normalizing multiline
docstring quotes (#1637)

- `Black` no longer adds an incorrect space after a parenthesized assignment expression
in if/while statements (#1655)

- fixed a crash when PWD=/ on POSIX (#1631)

### 20.8b1

#### _Packaging_
Expand Down
4 changes: 2 additions & 2 deletions src/black/__init__.py
Expand Up @@ -5190,9 +5190,9 @@ def normalize_invisible_parens(node: Node, parens_after: Set[str]) -> None:

if check_lpar:
if is_walrus_assignment(child):
continue
pass

if child.type == syms.atom:
elif child.type == syms.atom:
if maybe_make_parens_invisible_in_atom(child, parent=node):
wrap_in_parentheses(node, child, visible=False)
elif is_one_tuple(child):
Expand Down
4 changes: 4 additions & 0 deletions tests/data/pep_572.py
Expand Up @@ -2,6 +2,8 @@
(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))
Expand Down Expand Up @@ -41,3 +43,5 @@ def foo(answer: (p := 42) = 5):

while x := f(x):
pass
while (x := f(x)):
pass

1 comment on commit 1d2d726

@ThatXliner
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i love the walrus

Please sign in to comment.