Skip to content

Fix #4653 If guard explosion in case statement#4884

Merged
cobaltt7 merged 15 commits intopsf:mainfrom
rxjacob:rxjacob-patch-1-bug-4653
Mar 2, 2026
Merged

Fix #4653 If guard explosion in case statement#4884
cobaltt7 merged 15 commits intopsf:mainfrom
rxjacob:rxjacob-patch-1-bug-4653

Conversation

@rxjacob
Copy link
Contributor

@rxjacob rxjacob commented Dec 5, 2025

Description

Black is exploding the if guard in case patterns which have trailing commas in them, even if the guard expression fits in one line. The trailing comma logic should apply only to the case pattern, not the if guard.

Checklist - did you ...

  • Implement any code style changes under the --preview style, following the
    stability policy?
  • Add an entry in CHANGES.md if necessary?
  • Add / update tests if necessary?
  • Add new / update outdated documentation?

@cobaltt7
Copy link
Collaborator

cobaltt7 commented Dec 6, 2025

This code doesn't build.

@rxjacob rxjacob force-pushed the rxjacob-patch-1-bug-4653 branch from 95d50bb to fa2598e Compare December 7, 2025 21:14
@github-actions
Copy link
Contributor

github-actions bot commented Dec 7, 2025

diff-shades results comparing this PR (56abf99) to main (ff094ac):

--preview style (View full diff):
╭─────────────────────── Summary ────────────────────────╮
│ 1 projects & 1 files changed / 4 changes [+1/-3]       │
│                                                        │
│ ... out of 2 885 468 lines, 13 632 files & 22 projects │
╰────────────────────────────────────────────────────────╯

Differences found.

--stable style: no changes


What is this? | Workflow run | diff-shades documentation

@rxjacob
Copy link
Contributor Author

rxjacob commented Dec 7, 2025

This code doesn't build.

Updated the PR with the fix.

@rxjacob rxjacob changed the title Rxjacob patch 1 bug 4653 Fixed #4653: If guard explosion in case statement Dec 8, 2025
@rxjacob rxjacob changed the title Fixed #4653: If guard explosion in case statement Fix #4653 If guard explosion in case statement Dec 8, 2025
@cobaltt7 cobaltt7 linked an issue Jan 1, 2026 that may be closed by this pull request
@cobaltt7
Copy link
Collaborator

cobaltt7 commented Jan 1, 2026

Thanks! Can you gate this change to the preview style, since it changes previous formatting?

@rxjacob rxjacob force-pushed the rxjacob-patch-1-bug-4653 branch from e975650 to 2080318 Compare January 3, 2026 21:40
@rxjacob
Copy link
Contributor Author

rxjacob commented Jan 3, 2026

Thanks! Can you gate this change to the preview style, since it changes previous formatting?

Done.

@cobaltt7
Copy link
Collaborator

cobaltt7 commented Jan 4, 2026

Sorry, please add and check for a specific preview style, instead of the entire preview style as a whole. Here's a recent example: https://github.com/psf/black/pull/4865/changes. To test it, add the line # flags: --preview to the top of the test file.

Also, it looks like there's some unintentional formatting changes in one of the other tests

@cobaltt7 cobaltt7 merged commit 01c29bd into psf:main Mar 2, 2026
56 checks passed
cobaltt7 added a commit that referenced this pull request Mar 2, 2026
* Updated changelog to resolve conflict

* Gating change to preview style, fixed merge conflict

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* removed extra entries

* added test case

* Fixed preview style and unintentional formatting changes

* removed extra line in mode.py

* added unstable change

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Apply suggestion from @cobaltt7

* Move docs to preview style

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Reorder enum values in black.schema.json

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: cobalt <61329810+cobaltt7@users.noreply.github.com>
luketainton pushed a commit to luketainton/repos_webexmemebot that referenced this pull request Mar 6, 2026
This PR contains the following updates:

| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [black](https://github.com/psf/black) ([changelog](https://github.com/psf/black/blob/main/CHANGES.md)) | `<26.1.1,>=26.1.0` → `<26.3.1,>=26.3.0` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/black/26.3.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/black/26.1.0/26.3.0?slim=true) |

---

### Release Notes

<details>
<summary>psf/black (black)</summary>

### [`v26.3.0`](https://github.com/psf/black/blob/HEAD/CHANGES.md#2630)

[Compare Source](psf/black@26.1.0...26.3.0)

##### Stable style

- Don't double-decode input, causing non-UTF-8 files to be corrupted ([#&#8203;4964](psf/black#4964))
- Fix crash on standalone comment in lambda default arguments ([#&#8203;4993](psf/black#4993))
- Preserve parentheses when `# type: ignore` comments would be merged with other
  comments on the same line, preventing AST equivalence failures ([#&#8203;4888](psf/black#4888))

##### Preview style

- Fix bug where `if` guards in `case` blocks were incorrectly split when the pattern had
  a trailing comma ([#&#8203;4884](psf/black#4884))
- Fix `string_processing` crashing on unassigned long string literals with trailing
  commas (one-item tuples) ([#&#8203;4929](psf/black#4929))
- Simplify implementation of the power operator "hugging" logic ([#&#8203;4918](psf/black#4918))

##### Packaging

- Fix shutdown errors in PyInstaller builds on macOS by disabling multiprocessing in
  frozen environments ([#&#8203;4930](psf/black#4930))

##### Performance

- Introduce winloop for windows as an alternative to uvloop ([#&#8203;4996](psf/black#4996))
- Remove deprecated function `uvloop.install()` in favor of `uvloop.new_event_loop()`
  ([#&#8203;4996](psf/black#4996))
- Rename `maybe_install_uvloop` function to `maybe_use_uvloop` to simplify loop
  installation and creation of either a uvloop/winloop evenloop or default eventloop
  ([#&#8203;4996](psf/black#4996))

##### Output

- Emit a clear warning when the target Python version is newer than the running Python
  version, since AST safety checks cannot parse newer syntax. Also replace the
  misleading "INTERNAL ERROR" message with an actionable error explaining the version
  mismatch ([#&#8203;4983](psf/black#4983))

##### *Blackd*

- Introduce winloop to be used when windows in use which enables blackd to run faster on
  windows when winloop is installed. ([#&#8203;4996](psf/black#4996))

##### Integrations

- Remove unused gallery script ([#&#8203;5030](psf/black#5030))
- Harden parsing of `black` requirements in the GitHub Action when `use_pyproject` is
  enabled so that only version specifiers are accepted and direct references such as
  `black @&#8203; https://...` are rejected. Users should upgrade to the latest version of the
  action as soon as possible. This update is received automatically when using
  `psf/black@stable`, and is independent of the version of Black installed by the
  action. ([#&#8203;5031](psf/black#5031))

##### Documentation

- Expand preview style documentation with detailed examples for `wrap_comprehension_in`,
  `simplify_power_operator_hugging`, and `wrap_long_dict_values_in_parens` features
  ([#&#8203;4987](psf/black#4987))
- Add detailed documentation for formatting Jupyter Notebooks ([#&#8203;5009](psf/black#5009))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My41OC4wIiwidXBkYXRlZEluVmVyIjoiNDMuNTguMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsidHlwZS9kZXBlbmRlbmNpZXMiXX0=-->

Reviewed-on: https://git.tainton.uk/repos/webexmemebot/pulls/571
Co-authored-by: renovate[bot] <renovate-bot@git.tainton.uk>
Co-committed-by: renovate[bot] <renovate-bot@git.tainton.uk>
luketainton pushed a commit to luketainton/repos_pypilot that referenced this pull request Mar 6, 2026
This PR contains the following updates:

| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [black](https://github.com/psf/black) ([changelog](https://github.com/psf/black/blob/main/CHANGES.md)) | `<26.1.1,>=26.1.0` → `<26.3.1,>=26.3.0` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/black/26.3.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/black/26.1.0/26.3.0?slim=true) |

---

### Release Notes

<details>
<summary>psf/black (black)</summary>

### [`v26.3.0`](https://github.com/psf/black/blob/HEAD/CHANGES.md#2630)

[Compare Source](psf/black@26.1.0...26.3.0)

##### Stable style

- Don't double-decode input, causing non-UTF-8 files to be corrupted ([#&#8203;4964](psf/black#4964))
- Fix crash on standalone comment in lambda default arguments ([#&#8203;4993](psf/black#4993))
- Preserve parentheses when `# type: ignore` comments would be merged with other
  comments on the same line, preventing AST equivalence failures ([#&#8203;4888](psf/black#4888))

##### Preview style

- Fix bug where `if` guards in `case` blocks were incorrectly split when the pattern had
  a trailing comma ([#&#8203;4884](psf/black#4884))
- Fix `string_processing` crashing on unassigned long string literals with trailing
  commas (one-item tuples) ([#&#8203;4929](psf/black#4929))
- Simplify implementation of the power operator "hugging" logic ([#&#8203;4918](psf/black#4918))

##### Packaging

- Fix shutdown errors in PyInstaller builds on macOS by disabling multiprocessing in
  frozen environments ([#&#8203;4930](psf/black#4930))

##### Performance

- Introduce winloop for windows as an alternative to uvloop ([#&#8203;4996](psf/black#4996))
- Remove deprecated function `uvloop.install()` in favor of `uvloop.new_event_loop()`
  ([#&#8203;4996](psf/black#4996))
- Rename `maybe_install_uvloop` function to `maybe_use_uvloop` to simplify loop
  installation and creation of either a uvloop/winloop evenloop or default eventloop
  ([#&#8203;4996](psf/black#4996))

##### Output

- Emit a clear warning when the target Python version is newer than the running Python
  version, since AST safety checks cannot parse newer syntax. Also replace the
  misleading "INTERNAL ERROR" message with an actionable error explaining the version
  mismatch ([#&#8203;4983](psf/black#4983))

##### *Blackd*

- Introduce winloop to be used when windows in use which enables blackd to run faster on
  windows when winloop is installed. ([#&#8203;4996](psf/black#4996))

##### Integrations

- Remove unused gallery script ([#&#8203;5030](psf/black#5030))
- Harden parsing of `black` requirements in the GitHub Action when `use_pyproject` is
  enabled so that only version specifiers are accepted and direct references such as
  `black @&#8203; https://...` are rejected. Users should upgrade to the latest version of the
  action as soon as possible. This update is received automatically when using
  `psf/black@stable`, and is independent of the version of Black installed by the
  action. ([#&#8203;5031](psf/black#5031))

##### Documentation

- Expand preview style documentation with detailed examples for `wrap_comprehension_in`,
  `simplify_power_operator_hugging`, and `wrap_long_dict_values_in_parens` features
  ([#&#8203;4987](psf/black#4987))
- Add detailed documentation for formatting Jupyter Notebooks ([#&#8203;5009](psf/black#5009))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My41OC4wIiwidXBkYXRlZEluVmVyIjoiNDMuNTguMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsidHlwZS9kZXBlbmRlbmNpZXMiXX0=-->

Reviewed-on: https://git.tainton.uk/repos/pypilot/pulls/421
Reviewed-by: Luke Tainton <luke@tainton.uk>
Co-authored-by: renovate[bot] <renovate-bot@git.tainton.uk>
Co-committed-by: renovate[bot] <renovate-bot@git.tainton.uk>
luketainton pushed a commit to luketainton/luke_instant-msg-api that referenced this pull request Mar 6, 2026
This PR contains the following updates:

| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [black](https://github.com/psf/black) ([changelog](https://github.com/psf/black/blob/main/CHANGES.md)) | `<26.1.1,>=26.1.0` → `<26.3.1,>=26.3.0` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/black/26.3.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/black/26.1.0/26.3.0?slim=true) |

---

### Release Notes

<details>
<summary>psf/black (black)</summary>

### [`v26.3.0`](https://github.com/psf/black/blob/HEAD/CHANGES.md#2630)

[Compare Source](psf/black@26.1.0...26.3.0)

##### Stable style

- Don't double-decode input, causing non-UTF-8 files to be corrupted ([#&#8203;4964](psf/black#4964))
- Fix crash on standalone comment in lambda default arguments ([#&#8203;4993](psf/black#4993))
- Preserve parentheses when `# type: ignore` comments would be merged with other
  comments on the same line, preventing AST equivalence failures ([#&#8203;4888](psf/black#4888))

##### Preview style

- Fix bug where `if` guards in `case` blocks were incorrectly split when the pattern had
  a trailing comma ([#&#8203;4884](psf/black#4884))
- Fix `string_processing` crashing on unassigned long string literals with trailing
  commas (one-item tuples) ([#&#8203;4929](psf/black#4929))
- Simplify implementation of the power operator "hugging" logic ([#&#8203;4918](psf/black#4918))

##### Packaging

- Fix shutdown errors in PyInstaller builds on macOS by disabling multiprocessing in
  frozen environments ([#&#8203;4930](psf/black#4930))

##### Performance

- Introduce winloop for windows as an alternative to uvloop ([#&#8203;4996](psf/black#4996))
- Remove deprecated function `uvloop.install()` in favor of `uvloop.new_event_loop()`
  ([#&#8203;4996](psf/black#4996))
- Rename `maybe_install_uvloop` function to `maybe_use_uvloop` to simplify loop
  installation and creation of either a uvloop/winloop evenloop or default eventloop
  ([#&#8203;4996](psf/black#4996))

##### Output

- Emit a clear warning when the target Python version is newer than the running Python
  version, since AST safety checks cannot parse newer syntax. Also replace the
  misleading "INTERNAL ERROR" message with an actionable error explaining the version
  mismatch ([#&#8203;4983](psf/black#4983))

##### *Blackd*

- Introduce winloop to be used when windows in use which enables blackd to run faster on
  windows when winloop is installed. ([#&#8203;4996](psf/black#4996))

##### Integrations

- Remove unused gallery script ([#&#8203;5030](psf/black#5030))
- Harden parsing of `black` requirements in the GitHub Action when `use_pyproject` is
  enabled so that only version specifiers are accepted and direct references such as
  `black @&#8203; https://...` are rejected. Users should upgrade to the latest version of the
  action as soon as possible. This update is received automatically when using
  `psf/black@stable`, and is independent of the version of Black installed by the
  action. ([#&#8203;5031](psf/black#5031))

##### Documentation

- Expand preview style documentation with detailed examples for `wrap_comprehension_in`,
  `simplify_power_operator_hugging`, and `wrap_long_dict_values_in_parens` features
  ([#&#8203;4987](psf/black#4987))
- Add detailed documentation for formatting Jupyter Notebooks ([#&#8203;5009](psf/black#5009))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My41OC4wIiwidXBkYXRlZEluVmVyIjoiNDMuNTguMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsidHlwZS9kZXBlbmRlbmNpZXMiXX0=-->

Reviewed-on: https://git.tainton.uk/luke/instant-msg-api/pulls/246
Reviewed-by: Luke Tainton <luke@tainton.uk>
Co-authored-by: renovate[bot] <renovate-bot@git.tainton.uk>
Co-committed-by: renovate[bot] <renovate-bot@git.tainton.uk>
luketainton pushed a commit to luketainton/repos_epage that referenced this pull request Mar 6, 2026
This PR contains the following updates:

| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [black](https://github.com/psf/black) ([changelog](https://github.com/psf/black/blob/main/CHANGES.md)) | `<26.1.1,>=26.1.0` → `<26.3.1,>=26.3.0` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/black/26.3.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/black/26.1.0/26.3.0?slim=true) |

---

### Release Notes

<details>
<summary>psf/black (black)</summary>

### [`v26.3.0`](https://github.com/psf/black/blob/HEAD/CHANGES.md#2630)

[Compare Source](psf/black@26.1.0...26.3.0)

##### Stable style

- Don't double-decode input, causing non-UTF-8 files to be corrupted ([#&#8203;4964](psf/black#4964))
- Fix crash on standalone comment in lambda default arguments ([#&#8203;4993](psf/black#4993))
- Preserve parentheses when `# type: ignore` comments would be merged with other
  comments on the same line, preventing AST equivalence failures ([#&#8203;4888](psf/black#4888))

##### Preview style

- Fix bug where `if` guards in `case` blocks were incorrectly split when the pattern had
  a trailing comma ([#&#8203;4884](psf/black#4884))
- Fix `string_processing` crashing on unassigned long string literals with trailing
  commas (one-item tuples) ([#&#8203;4929](psf/black#4929))
- Simplify implementation of the power operator "hugging" logic ([#&#8203;4918](psf/black#4918))

##### Packaging

- Fix shutdown errors in PyInstaller builds on macOS by disabling multiprocessing in
  frozen environments ([#&#8203;4930](psf/black#4930))

##### Performance

- Introduce winloop for windows as an alternative to uvloop ([#&#8203;4996](psf/black#4996))
- Remove deprecated function `uvloop.install()` in favor of `uvloop.new_event_loop()`
  ([#&#8203;4996](psf/black#4996))
- Rename `maybe_install_uvloop` function to `maybe_use_uvloop` to simplify loop
  installation and creation of either a uvloop/winloop evenloop or default eventloop
  ([#&#8203;4996](psf/black#4996))

##### Output

- Emit a clear warning when the target Python version is newer than the running Python
  version, since AST safety checks cannot parse newer syntax. Also replace the
  misleading "INTERNAL ERROR" message with an actionable error explaining the version
  mismatch ([#&#8203;4983](psf/black#4983))

##### *Blackd*

- Introduce winloop to be used when windows in use which enables blackd to run faster on
  windows when winloop is installed. ([#&#8203;4996](psf/black#4996))

##### Integrations

- Remove unused gallery script ([#&#8203;5030](psf/black#5030))
- Harden parsing of `black` requirements in the GitHub Action when `use_pyproject` is
  enabled so that only version specifiers are accepted and direct references such as
  `black @&#8203; https://...` are rejected. Users should upgrade to the latest version of the
  action as soon as possible. This update is received automatically when using
  `psf/black@stable`, and is independent of the version of Black installed by the
  action. ([#&#8203;5031](psf/black#5031))

##### Documentation

- Expand preview style documentation with detailed examples for `wrap_comprehension_in`,
  `simplify_power_operator_hugging`, and `wrap_long_dict_values_in_parens` features
  ([#&#8203;4987](psf/black#4987))
- Add detailed documentation for formatting Jupyter Notebooks ([#&#8203;5009](psf/black#5009))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My41OC4wIiwidXBkYXRlZEluVmVyIjoiNDMuNTguMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsidHlwZS9kZXBlbmRlbmNpZXMiXX0=-->

Reviewed-on: https://git.tainton.uk/repos/epage/pulls/208
Reviewed-by: Luke Tainton <luke@tainton.uk>
Co-authored-by: renovate[bot] <renovate-bot@git.tainton.uk>
Co-committed-by: renovate[bot] <renovate-bot@git.tainton.uk>
luketainton pushed a commit to luketainton/repos_PwnedPW that referenced this pull request Mar 6, 2026
This PR contains the following updates:

| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [black](https://github.com/psf/black) ([changelog](https://github.com/psf/black/blob/main/CHANGES.md)) | `<26.1.1,>=26.1.0` → `<26.3.1,>=26.3.0` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/black/26.3.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/black/26.1.0/26.3.0?slim=true) |

---

### Release Notes

<details>
<summary>psf/black (black)</summary>

### [`v26.3.0`](https://github.com/psf/black/blob/HEAD/CHANGES.md#2630)

[Compare Source](psf/black@26.1.0...26.3.0)

##### Stable style

- Don't double-decode input, causing non-UTF-8 files to be corrupted ([#&#8203;4964](psf/black#4964))
- Fix crash on standalone comment in lambda default arguments ([#&#8203;4993](psf/black#4993))
- Preserve parentheses when `# type: ignore` comments would be merged with other
  comments on the same line, preventing AST equivalence failures ([#&#8203;4888](psf/black#4888))

##### Preview style

- Fix bug where `if` guards in `case` blocks were incorrectly split when the pattern had
  a trailing comma ([#&#8203;4884](psf/black#4884))
- Fix `string_processing` crashing on unassigned long string literals with trailing
  commas (one-item tuples) ([#&#8203;4929](psf/black#4929))
- Simplify implementation of the power operator "hugging" logic ([#&#8203;4918](psf/black#4918))

##### Packaging

- Fix shutdown errors in PyInstaller builds on macOS by disabling multiprocessing in
  frozen environments ([#&#8203;4930](psf/black#4930))

##### Performance

- Introduce winloop for windows as an alternative to uvloop ([#&#8203;4996](psf/black#4996))
- Remove deprecated function `uvloop.install()` in favor of `uvloop.new_event_loop()`
  ([#&#8203;4996](psf/black#4996))
- Rename `maybe_install_uvloop` function to `maybe_use_uvloop` to simplify loop
  installation and creation of either a uvloop/winloop evenloop or default eventloop
  ([#&#8203;4996](psf/black#4996))

##### Output

- Emit a clear warning when the target Python version is newer than the running Python
  version, since AST safety checks cannot parse newer syntax. Also replace the
  misleading "INTERNAL ERROR" message with an actionable error explaining the version
  mismatch ([#&#8203;4983](psf/black#4983))

##### *Blackd*

- Introduce winloop to be used when windows in use which enables blackd to run faster on
  windows when winloop is installed. ([#&#8203;4996](psf/black#4996))

##### Integrations

- Remove unused gallery script ([#&#8203;5030](psf/black#5030))
- Harden parsing of `black` requirements in the GitHub Action when `use_pyproject` is
  enabled so that only version specifiers are accepted and direct references such as
  `black @&#8203; https://...` are rejected. Users should upgrade to the latest version of the
  action as soon as possible. This update is received automatically when using
  `psf/black@stable`, and is independent of the version of Black installed by the
  action. ([#&#8203;5031](psf/black#5031))

##### Documentation

- Expand preview style documentation with detailed examples for `wrap_comprehension_in`,
  `simplify_power_operator_hugging`, and `wrap_long_dict_values_in_parens` features
  ([#&#8203;4987](psf/black#4987))
- Add detailed documentation for formatting Jupyter Notebooks ([#&#8203;5009](psf/black#5009))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My41OC4wIiwidXBkYXRlZEluVmVyIjoiNDMuNTguMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsibGludGluZyJdfQ==-->

Reviewed-on: https://git.tainton.uk/repos/PwnedPW/pulls/326
Reviewed-by: Luke Tainton <luke@tainton.uk>
Co-authored-by: renovate[bot] <renovate-bot@git.tainton.uk>
Co-committed-by: renovate[bot] <renovate-bot@git.tainton.uk>
luketainton pushed a commit to luketainton/repos_roboluke that referenced this pull request Mar 6, 2026
This PR contains the following updates:

| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [black](https://github.com/psf/black) ([changelog](https://github.com/psf/black/blob/main/CHANGES.md)) | `<26.1.1,>=26.1.0` → `<26.3.1,>=26.3.0` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/black/26.3.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/black/26.1.0/26.3.0?slim=true) |

---

### Release Notes

<details>
<summary>psf/black (black)</summary>

### [`v26.3.0`](https://github.com/psf/black/blob/HEAD/CHANGES.md#2630)

[Compare Source](psf/black@26.1.0...26.3.0)

##### Stable style

- Don't double-decode input, causing non-UTF-8 files to be corrupted ([#&#8203;4964](psf/black#4964))
- Fix crash on standalone comment in lambda default arguments ([#&#8203;4993](psf/black#4993))
- Preserve parentheses when `# type: ignore` comments would be merged with other
  comments on the same line, preventing AST equivalence failures ([#&#8203;4888](psf/black#4888))

##### Preview style

- Fix bug where `if` guards in `case` blocks were incorrectly split when the pattern had
  a trailing comma ([#&#8203;4884](psf/black#4884))
- Fix `string_processing` crashing on unassigned long string literals with trailing
  commas (one-item tuples) ([#&#8203;4929](psf/black#4929))
- Simplify implementation of the power operator "hugging" logic ([#&#8203;4918](psf/black#4918))

##### Packaging

- Fix shutdown errors in PyInstaller builds on macOS by disabling multiprocessing in
  frozen environments ([#&#8203;4930](psf/black#4930))

##### Performance

- Introduce winloop for windows as an alternative to uvloop ([#&#8203;4996](psf/black#4996))
- Remove deprecated function `uvloop.install()` in favor of `uvloop.new_event_loop()`
  ([#&#8203;4996](psf/black#4996))
- Rename `maybe_install_uvloop` function to `maybe_use_uvloop` to simplify loop
  installation and creation of either a uvloop/winloop evenloop or default eventloop
  ([#&#8203;4996](psf/black#4996))

##### Output

- Emit a clear warning when the target Python version is newer than the running Python
  version, since AST safety checks cannot parse newer syntax. Also replace the
  misleading "INTERNAL ERROR" message with an actionable error explaining the version
  mismatch ([#&#8203;4983](psf/black#4983))

##### *Blackd*

- Introduce winloop to be used when windows in use which enables blackd to run faster on
  windows when winloop is installed. ([#&#8203;4996](psf/black#4996))

##### Integrations

- Remove unused gallery script ([#&#8203;5030](psf/black#5030))
- Harden parsing of `black` requirements in the GitHub Action when `use_pyproject` is
  enabled so that only version specifiers are accepted and direct references such as
  `black @&#8203; https://...` are rejected. Users should upgrade to the latest version of the
  action as soon as possible. This update is received automatically when using
  `psf/black@stable`, and is independent of the version of Black installed by the
  action. ([#&#8203;5031](psf/black#5031))

##### Documentation

- Expand preview style documentation with detailed examples for `wrap_comprehension_in`,
  `simplify_power_operator_hugging`, and `wrap_long_dict_values_in_parens` features
  ([#&#8203;4987](psf/black#4987))
- Add detailed documentation for formatting Jupyter Notebooks ([#&#8203;5009](psf/black#5009))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My41OC4wIiwidXBkYXRlZEluVmVyIjoiNDMuNTguMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsidHlwZS9kZXBlbmRlbmNpZXMiXX0=-->

Reviewed-on: https://git.tainton.uk/repos/roboluke/pulls/431
Co-authored-by: renovate[bot] <renovate-bot@git.tainton.uk>
Co-committed-by: renovate[bot] <renovate-bot@git.tainton.uk>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Trailing comma in case pattern causes if guard to explode

2 participants