Skip to content

Preserve multiline headers with fmt skip#5117

Merged
cobaltt7 merged 7 commits into
psf:mainfrom
17X61:fix-fmt-skip-class-header
May 12, 2026
Merged

Preserve multiline headers with fmt skip#5117
cobaltt7 merged 7 commits into
psf:mainfrom
17X61:fix-fmt-skip-class-header

Conversation

@17X61
Copy link
Copy Markdown
Contributor

@17X61 17X61 commented Apr 27, 2026

Fixes #5112, closes #5114
fixes #5122, closes #5123

Summary

  • Handle # fmt: skip on compound statement colon lines before same-line backtracking.
  • Preserve multiline class/function headers as a whole when the skip comment is on the colon line.
  • Add regression coverage for multiline class, function, async function, and parenthesized if headers.

Test Plan

  • python3 -m pytest tests/test_format.py -k fmtskip_class_header
  • Previously ran the full formatting suite on this branch before the extra edge-case fixture additions.

Copilot AI review requested due to automatic review settings April 27, 2026 15:15
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Fixes a regression in Black’s # fmt: skip handling where multiline class/function headers could be collapsed when the skip comment appears on the compound statement’s colon line (e.g. class ...): # fmt: skip).

Changes:

  • Prioritize detection of # fmt: skip on compound-statement colon lines before the generic “same physical line” backtracking logic to preserve multiline headers intact.
  • Keep special handling for async statements when collecting ignored nodes for colon-line skips.
  • Add a regression fixture covering a multiline class base list with # fmt: skip on the colon line.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated no comments.

File Description
tests/data/cases/fmtskip_class_header.py Adds a regression case ensuring multiline class headers remain unchanged when # fmt: skip is on the colon line.
src/black/comments.py Adjusts ignored-node generation ordering so colon-line # fmt: skip preserves entire multiline compound headers.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@cobaltt7
Copy link
Copy Markdown
Collaborator

cobaltt7 commented Apr 27, 2026

@17X61 Please expand the tests to include more edge cases

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 27, 2026

diff-shades results comparing this PR (8461baf) to main (aef52e0):

--preview style: no changes

--stable style: no changes


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

@17X61
Copy link
Copy Markdown
Contributor Author

17X61 commented May 4, 2026

Added more regression coverage for multiline colon-line # fmt: skip cases: function headers, async function headers, and parenthesized if headers, in addition to the original class header case.

Validation run locally:

python3 -m pytest tests/test_format.py -k fmtskip_class_header

@cobaltt7 cobaltt7 merged commit 2b13ea7 into psf:main May 12, 2026
57 checks passed
@cobaltt7
Copy link
Copy Markdown
Collaborator

Thanks!

luketainton pushed a commit to luketainton/repos_webexmemebot that referenced this pull request May 17, 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.3.2,>=26.3.1` → `<26.5.1,>=26.5.0` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/black/26.5.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/black/26.3.1/26.5.0?slim=true) |

---

### Release Notes

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

### [`v26.5.0`](https://github.com/psf/black/blob/HEAD/CHANGES.md#Version-2650)

[Compare Source](psf/black@26.3.1...26.5.0)

##### Highlights

- Add support for unpacking in comprehensions (PEP 798) and for lazy imports (PEP 810),
  both new syntactic features in Python 3.15 ([#&#8203;5048](psf/black#5048))
- Python 3.15 is now supported. Compiled wheels are not yet provided for Python 3.15, so
  performance may be slower than on existing Python versions. Wheels will be provided
  once Python 3.15 is later in its release cycle. ([#&#8203;5127](psf/black#5127))

##### Stable style

- Fix `# fmt: skip` being ignored in nested `if` expressions with parenthesized `in`
  clauses ([#&#8203;4903](psf/black#4903))
- Add syntactic support for Python 3.15 ([#&#8203;5048](psf/black#5048))
- Fix crash when an f-string follows a `# fmt: off` comment inside brackets ([#&#8203;5097](psf/black#5097))
- Preserve multiline compound statement headers when `# fmt: skip` is placed on the
  colon line ([#&#8203;5117](psf/black#5117))

##### Preview style

- Improve heuristics around whether blank lines should appear before, within and after
  groups of same-name decorated functions (such as `@overload` groups) in `.pyi` stub
  files ([#&#8203;5021](psf/black#5021))
- Fix blank lines being removed between a function and a decorated class in `.pyi` stub
  files ([#&#8203;5092](psf/black#5092))
- Prevent string merger from creating unsplittable long lines when a pragma comment
  (e.g. `# type: ignore`) follows the closing bracket ([#&#8203;5096](psf/black#5096))

##### Packaging

- Run CI on 3.15 ([#&#8203;5127](psf/black#5127))

##### Output

- Improve parse error readability by showing multi-line output with an error pointer.
  ([#&#8203;5068](psf/black#5068))
- Add `SourceASTParseError` to distinguish source parse failures from internal safety
  errors, improving error reporting when Black's lenient parser accepts input that
  `ast.parse()` rejects ([#&#8203;5080](psf/black#5080))

##### *Blackd*

- Return HTTP 400 (Bad Request) for source parse failures instead of HTTP 500, keeping
  HTTP 500 only for genuine internal safety errors ([#&#8203;5080](psf/black#5080))

##### Integrations

- Added documentation for doctest formatting tools and updated the integrations index to
  match ([#&#8203;4916](psf/black#4916))

##### Documentation

- Use "Version X.Y.Z" headings in changelog for stable permalink anchors on ReadTheDocs
  ([#&#8203;5063](psf/black#5063))
- Note in the editor integrations that the SublimeText `sublack` plugin is archived and
  unmaintained ([#&#8203;5082](psf/black#5082))

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- 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 [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xODEuMCIsInVwZGF0ZWRJblZlciI6IjQzLjE4MS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJ0eXBlL2RlcGVuZGVuY2llcyJdfQ==-->

Reviewed-on: https://git.tainton.uk/repos/webexmemebot/pulls/585
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 May 17, 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.3.2,>=26.3.1` → `<26.5.1,>=26.5.0` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/black/26.5.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/black/26.3.1/26.5.0?slim=true) |

---

### Release Notes

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

### [`v26.5.0`](https://github.com/psf/black/blob/HEAD/CHANGES.md#Version-2650)

[Compare Source](psf/black@26.3.1...26.5.0)

##### Highlights

- Add support for unpacking in comprehensions (PEP 798) and for lazy imports (PEP 810),
  both new syntactic features in Python 3.15 ([#&#8203;5048](psf/black#5048))
- Python 3.15 is now supported. Compiled wheels are not yet provided for Python 3.15, so
  performance may be slower than on existing Python versions. Wheels will be provided
  once Python 3.15 is later in its release cycle. ([#&#8203;5127](psf/black#5127))

##### Stable style

- Fix `# fmt: skip` being ignored in nested `if` expressions with parenthesized `in`
  clauses ([#&#8203;4903](psf/black#4903))
- Add syntactic support for Python 3.15 ([#&#8203;5048](psf/black#5048))
- Fix crash when an f-string follows a `# fmt: off` comment inside brackets ([#&#8203;5097](psf/black#5097))
- Preserve multiline compound statement headers when `# fmt: skip` is placed on the
  colon line ([#&#8203;5117](psf/black#5117))

##### Preview style

- Improve heuristics around whether blank lines should appear before, within and after
  groups of same-name decorated functions (such as `@overload` groups) in `.pyi` stub
  files ([#&#8203;5021](psf/black#5021))
- Fix blank lines being removed between a function and a decorated class in `.pyi` stub
  files ([#&#8203;5092](psf/black#5092))
- Prevent string merger from creating unsplittable long lines when a pragma comment
  (e.g. `# type: ignore`) follows the closing bracket ([#&#8203;5096](psf/black#5096))

##### Packaging

- Run CI on 3.15 ([#&#8203;5127](psf/black#5127))

##### Output

- Improve parse error readability by showing multi-line output with an error pointer.
  ([#&#8203;5068](psf/black#5068))
- Add `SourceASTParseError` to distinguish source parse failures from internal safety
  errors, improving error reporting when Black's lenient parser accepts input that
  `ast.parse()` rejects ([#&#8203;5080](psf/black#5080))

##### *Blackd*

- Return HTTP 400 (Bad Request) for source parse failures instead of HTTP 500, keeping
  HTTP 500 only for genuine internal safety errors ([#&#8203;5080](psf/black#5080))

##### Integrations

- Added documentation for doctest formatting tools and updated the integrations index to
  match ([#&#8203;4916](psf/black#4916))

##### Documentation

- Use "Version X.Y.Z" headings in changelog for stable permalink anchors on ReadTheDocs
  ([#&#8203;5063](psf/black#5063))
- Note in the editor integrations that the SublimeText `sublack` plugin is archived and
  unmaintained ([#&#8203;5082](psf/black#5082))

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- 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 [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xODEuMCIsInVwZGF0ZWRJblZlciI6IjQzLjE4MS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJsaW50aW5nIl19-->

Reviewed-on: https://git.tainton.uk/repos/PwnedPW/pulls/334
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 May 17, 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.3.2,>=26.3.1` → `<26.5.1,>=26.5.0` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/black/26.5.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/black/26.3.1/26.5.0?slim=true) |

---

### Release Notes

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

### [`v26.5.0`](https://github.com/psf/black/blob/HEAD/CHANGES.md#Version-2650)

[Compare Source](psf/black@26.3.1...26.5.0)

##### Highlights

- Add support for unpacking in comprehensions (PEP 798) and for lazy imports (PEP 810),
  both new syntactic features in Python 3.15 ([#&#8203;5048](psf/black#5048))
- Python 3.15 is now supported. Compiled wheels are not yet provided for Python 3.15, so
  performance may be slower than on existing Python versions. Wheels will be provided
  once Python 3.15 is later in its release cycle. ([#&#8203;5127](psf/black#5127))

##### Stable style

- Fix `# fmt: skip` being ignored in nested `if` expressions with parenthesized `in`
  clauses ([#&#8203;4903](psf/black#4903))
- Add syntactic support for Python 3.15 ([#&#8203;5048](psf/black#5048))
- Fix crash when an f-string follows a `# fmt: off` comment inside brackets ([#&#8203;5097](psf/black#5097))
- Preserve multiline compound statement headers when `# fmt: skip` is placed on the
  colon line ([#&#8203;5117](psf/black#5117))

##### Preview style

- Improve heuristics around whether blank lines should appear before, within and after
  groups of same-name decorated functions (such as `@overload` groups) in `.pyi` stub
  files ([#&#8203;5021](psf/black#5021))
- Fix blank lines being removed between a function and a decorated class in `.pyi` stub
  files ([#&#8203;5092](psf/black#5092))
- Prevent string merger from creating unsplittable long lines when a pragma comment
  (e.g. `# type: ignore`) follows the closing bracket ([#&#8203;5096](psf/black#5096))

##### Packaging

- Run CI on 3.15 ([#&#8203;5127](psf/black#5127))

##### Output

- Improve parse error readability by showing multi-line output with an error pointer.
  ([#&#8203;5068](psf/black#5068))
- Add `SourceASTParseError` to distinguish source parse failures from internal safety
  errors, improving error reporting when Black's lenient parser accepts input that
  `ast.parse()` rejects ([#&#8203;5080](psf/black#5080))

##### *Blackd*

- Return HTTP 400 (Bad Request) for source parse failures instead of HTTP 500, keeping
  HTTP 500 only for genuine internal safety errors ([#&#8203;5080](psf/black#5080))

##### Integrations

- Added documentation for doctest formatting tools and updated the integrations index to
  match ([#&#8203;4916](psf/black#4916))

##### Documentation

- Use "Version X.Y.Z" headings in changelog for stable permalink anchors on ReadTheDocs
  ([#&#8203;5063](psf/black#5063))
- Note in the editor integrations that the SublimeText `sublack` plugin is archived and
  unmaintained ([#&#8203;5082](psf/black#5082))

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- 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 [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xODEuMCIsInVwZGF0ZWRJblZlciI6IjQzLjE4MS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJ0eXBlL2RlcGVuZGVuY2llcyJdfQ==-->

Reviewed-on: https://git.tainton.uk/repos/epage/pulls/220
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 May 17, 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.3.2,>=26.3.1` → `<26.5.1,>=26.5.0` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/black/26.5.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/black/26.3.1/26.5.0?slim=true) |

---

### Release Notes

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

### [`v26.5.0`](https://github.com/psf/black/blob/HEAD/CHANGES.md#Version-2650)

[Compare Source](psf/black@26.3.1...26.5.0)

##### Highlights

- Add support for unpacking in comprehensions (PEP 798) and for lazy imports (PEP 810),
  both new syntactic features in Python 3.15 ([#&#8203;5048](psf/black#5048))
- Python 3.15 is now supported. Compiled wheels are not yet provided for Python 3.15, so
  performance may be slower than on existing Python versions. Wheels will be provided
  once Python 3.15 is later in its release cycle. ([#&#8203;5127](psf/black#5127))

##### Stable style

- Fix `# fmt: skip` being ignored in nested `if` expressions with parenthesized `in`
  clauses ([#&#8203;4903](psf/black#4903))
- Add syntactic support for Python 3.15 ([#&#8203;5048](psf/black#5048))
- Fix crash when an f-string follows a `# fmt: off` comment inside brackets ([#&#8203;5097](psf/black#5097))
- Preserve multiline compound statement headers when `# fmt: skip` is placed on the
  colon line ([#&#8203;5117](psf/black#5117))

##### Preview style

- Improve heuristics around whether blank lines should appear before, within and after
  groups of same-name decorated functions (such as `@overload` groups) in `.pyi` stub
  files ([#&#8203;5021](psf/black#5021))
- Fix blank lines being removed between a function and a decorated class in `.pyi` stub
  files ([#&#8203;5092](psf/black#5092))
- Prevent string merger from creating unsplittable long lines when a pragma comment
  (e.g. `# type: ignore`) follows the closing bracket ([#&#8203;5096](psf/black#5096))

##### Packaging

- Run CI on 3.15 ([#&#8203;5127](psf/black#5127))

##### Output

- Improve parse error readability by showing multi-line output with an error pointer.
  ([#&#8203;5068](psf/black#5068))
- Add `SourceASTParseError` to distinguish source parse failures from internal safety
  errors, improving error reporting when Black's lenient parser accepts input that
  `ast.parse()` rejects ([#&#8203;5080](psf/black#5080))

##### *Blackd*

- Return HTTP 400 (Bad Request) for source parse failures instead of HTTP 500, keeping
  HTTP 500 only for genuine internal safety errors ([#&#8203;5080](psf/black#5080))

##### Integrations

- Added documentation for doctest formatting tools and updated the integrations index to
  match ([#&#8203;4916](psf/black#4916))

##### Documentation

- Use "Version X.Y.Z" headings in changelog for stable permalink anchors on ReadTheDocs
  ([#&#8203;5063](psf/black#5063))
- Note in the editor integrations that the SublimeText `sublack` plugin is archived and
  unmaintained ([#&#8203;5082](psf/black#5082))

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- 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 [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xODEuMCIsInVwZGF0ZWRJblZlciI6IjQzLjE4MS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJ0eXBlL2RlcGVuZGVuY2llcyJdfQ==-->

Reviewed-on: https://git.tainton.uk/luke/instant-msg-api/pulls/258
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 May 17, 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.3.2,>=26.3.1` → `<26.5.1,>=26.5.0` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/black/26.5.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/black/26.3.1/26.5.0?slim=true) |

---

### Release Notes

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

### [`v26.5.0`](https://github.com/psf/black/blob/HEAD/CHANGES.md#Version-2650)

[Compare Source](psf/black@26.3.1...26.5.0)

##### Highlights

- Add support for unpacking in comprehensions (PEP 798) and for lazy imports (PEP 810),
  both new syntactic features in Python 3.15 ([#&#8203;5048](psf/black#5048))
- Python 3.15 is now supported. Compiled wheels are not yet provided for Python 3.15, so
  performance may be slower than on existing Python versions. Wheels will be provided
  once Python 3.15 is later in its release cycle. ([#&#8203;5127](psf/black#5127))

##### Stable style

- Fix `# fmt: skip` being ignored in nested `if` expressions with parenthesized `in`
  clauses ([#&#8203;4903](psf/black#4903))
- Add syntactic support for Python 3.15 ([#&#8203;5048](psf/black#5048))
- Fix crash when an f-string follows a `# fmt: off` comment inside brackets ([#&#8203;5097](psf/black#5097))
- Preserve multiline compound statement headers when `# fmt: skip` is placed on the
  colon line ([#&#8203;5117](psf/black#5117))

##### Preview style

- Improve heuristics around whether blank lines should appear before, within and after
  groups of same-name decorated functions (such as `@overload` groups) in `.pyi` stub
  files ([#&#8203;5021](psf/black#5021))
- Fix blank lines being removed between a function and a decorated class in `.pyi` stub
  files ([#&#8203;5092](psf/black#5092))
- Prevent string merger from creating unsplittable long lines when a pragma comment
  (e.g. `# type: ignore`) follows the closing bracket ([#&#8203;5096](psf/black#5096))

##### Packaging

- Run CI on 3.15 ([#&#8203;5127](psf/black#5127))

##### Output

- Improve parse error readability by showing multi-line output with an error pointer.
  ([#&#8203;5068](psf/black#5068))
- Add `SourceASTParseError` to distinguish source parse failures from internal safety
  errors, improving error reporting when Black's lenient parser accepts input that
  `ast.parse()` rejects ([#&#8203;5080](psf/black#5080))

##### *Blackd*

- Return HTTP 400 (Bad Request) for source parse failures instead of HTTP 500, keeping
  HTTP 500 only for genuine internal safety errors ([#&#8203;5080](psf/black#5080))

##### Integrations

- Added documentation for doctest formatting tools and updated the integrations index to
  match ([#&#8203;4916](psf/black#4916))

##### Documentation

- Use "Version X.Y.Z" headings in changelog for stable permalink anchors on ReadTheDocs
  ([#&#8203;5063](psf/black#5063))
- Note in the editor integrations that the SublimeText `sublack` plugin is archived and
  unmaintained ([#&#8203;5082](psf/black#5082))

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- 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 [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xODEuMCIsInVwZGF0ZWRJblZlciI6IjQzLjE4MS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJ0eXBlL2RlcGVuZGVuY2llcyJdfQ==-->

Reviewed-on: https://git.tainton.uk/repos/pypilot/pulls/446
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 May 17, 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.3.2,>=26.3.1` → `<26.5.1,>=26.5.0` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/black/26.5.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/black/26.3.1/26.5.0?slim=true) |

---

### Release Notes

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

### [`v26.5.0`](https://github.com/psf/black/blob/HEAD/CHANGES.md#Version-2650)

[Compare Source](psf/black@26.3.1...26.5.0)

##### Highlights

- Add support for unpacking in comprehensions (PEP 798) and for lazy imports (PEP 810),
  both new syntactic features in Python 3.15 ([#&#8203;5048](psf/black#5048))
- Python 3.15 is now supported. Compiled wheels are not yet provided for Python 3.15, so
  performance may be slower than on existing Python versions. Wheels will be provided
  once Python 3.15 is later in its release cycle. ([#&#8203;5127](psf/black#5127))

##### Stable style

- Fix `# fmt: skip` being ignored in nested `if` expressions with parenthesized `in`
  clauses ([#&#8203;4903](psf/black#4903))
- Add syntactic support for Python 3.15 ([#&#8203;5048](psf/black#5048))
- Fix crash when an f-string follows a `# fmt: off` comment inside brackets ([#&#8203;5097](psf/black#5097))
- Preserve multiline compound statement headers when `# fmt: skip` is placed on the
  colon line ([#&#8203;5117](psf/black#5117))

##### Preview style

- Improve heuristics around whether blank lines should appear before, within and after
  groups of same-name decorated functions (such as `@overload` groups) in `.pyi` stub
  files ([#&#8203;5021](psf/black#5021))
- Fix blank lines being removed between a function and a decorated class in `.pyi` stub
  files ([#&#8203;5092](psf/black#5092))
- Prevent string merger from creating unsplittable long lines when a pragma comment
  (e.g. `# type: ignore`) follows the closing bracket ([#&#8203;5096](psf/black#5096))

##### Packaging

- Run CI on 3.15 ([#&#8203;5127](psf/black#5127))

##### Output

- Improve parse error readability by showing multi-line output with an error pointer.
  ([#&#8203;5068](psf/black#5068))
- Add `SourceASTParseError` to distinguish source parse failures from internal safety
  errors, improving error reporting when Black's lenient parser accepts input that
  `ast.parse()` rejects ([#&#8203;5080](psf/black#5080))

##### *Blackd*

- Return HTTP 400 (Bad Request) for source parse failures instead of HTTP 500, keeping
  HTTP 500 only for genuine internal safety errors ([#&#8203;5080](psf/black#5080))

##### Integrations

- Added documentation for doctest formatting tools and updated the integrations index to
  match ([#&#8203;4916](psf/black#4916))

##### Documentation

- Use "Version X.Y.Z" headings in changelog for stable permalink anchors on ReadTheDocs
  ([#&#8203;5063](psf/black#5063))
- Note in the editor integrations that the SublimeText `sublack` plugin is archived and
  unmaintained ([#&#8203;5082](psf/black#5082))

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- 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 [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xODEuMCIsInVwZGF0ZWRJblZlciI6IjQzLjE4MS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJ0eXBlL2RlcGVuZGVuY2llcyJdfQ==-->

Reviewed-on: https://git.tainton.uk/repos/roboluke/pulls/448
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.

Fail to parse multiline case statement with # fmt: skip # fmt: skip regression

3 participants