Improve fmt:skip handling in nested expressions with checks#4903
Conversation
5a24ecc to
9832386
Compare
|
Hi @cobaltt7, can you have a look at this PR when you get time. |
| and 1 | ||
| in ( # fmt: skip |
There was a problem hiding this comment.
This line shouldn't be formatted due to the fmt:skip (that's the bug in the original issue)
There was a problem hiding this comment.
Sure, I will look into it
themavik
left a comment
There was a problem hiding this comment.
hasattr(leaf, bracket_depth) in is_line_short_enough avoids fmt:skip nested in (...) blowing up; fmtskip_nested_expression.py covers the formatter. nit: getattr(leaf, bracket_depth, None) might read clearer than continue/pass around comma tracking if you revisit this.
|
Hey @Nikhil172913832, are you still working on this PR? |
|
@cobaltt7 , I’ve tried a few different approaches, but haven’t been able to get it working yet. It likely needs a deeper fix. I’ll continue investigating, but I’m open to any suggestions if you have ideas. |
45e1280 to
99aae29
Compare
44cd9a8 to
e43cf9f
Compare
for more information, see https://pre-commit.ci
|
Hi @cobaltt7 , can you please review the pr. |
|
Thanks! |
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` |  |  | --- ### 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 ([#​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. ([#​5127](psf/black#5127)) ##### Stable style - Fix `# fmt: skip` being ignored in nested `if` expressions with parenthesized `in` clauses ([#​4903](psf/black#4903)) - Add syntactic support for Python 3.15 ([#​5048](psf/black#5048)) - Fix crash when an f-string follows a `# fmt: off` comment inside brackets ([#​5097](psf/black#5097)) - Preserve multiline compound statement headers when `# fmt: skip` is placed on the colon line ([#​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 ([#​5021](psf/black#5021)) - Fix blank lines being removed between a function and a decorated class in `.pyi` stub files ([#​5092](psf/black#5092)) - Prevent string merger from creating unsplittable long lines when a pragma comment (e.g. `# type: ignore`) follows the closing bracket ([#​5096](psf/black#5096)) ##### Packaging - Run CI on 3.15 ([#​5127](psf/black#5127)) ##### Output - Improve parse error readability by showing multi-line output with an error pointer. ([#​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 ([#​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 ([#​5080](psf/black#5080)) ##### Integrations - Added documentation for doctest formatting tools and updated the integrations index to match ([#​4916](psf/black#4916)) ##### Documentation - Use "Version X.Y.Z" headings in changelog for stable permalink anchors on ReadTheDocs ([#​5063](psf/black#5063)) - Note in the editor integrations that the SublimeText `sublack` plugin is archived and unmaintained ([#​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>
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` |  |  | --- ### 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 ([#​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. ([#​5127](psf/black#5127)) ##### Stable style - Fix `# fmt: skip` being ignored in nested `if` expressions with parenthesized `in` clauses ([#​4903](psf/black#4903)) - Add syntactic support for Python 3.15 ([#​5048](psf/black#5048)) - Fix crash when an f-string follows a `# fmt: off` comment inside brackets ([#​5097](psf/black#5097)) - Preserve multiline compound statement headers when `# fmt: skip` is placed on the colon line ([#​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 ([#​5021](psf/black#5021)) - Fix blank lines being removed between a function and a decorated class in `.pyi` stub files ([#​5092](psf/black#5092)) - Prevent string merger from creating unsplittable long lines when a pragma comment (e.g. `# type: ignore`) follows the closing bracket ([#​5096](psf/black#5096)) ##### Packaging - Run CI on 3.15 ([#​5127](psf/black#5127)) ##### Output - Improve parse error readability by showing multi-line output with an error pointer. ([#​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 ([#​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 ([#​5080](psf/black#5080)) ##### Integrations - Added documentation for doctest formatting tools and updated the integrations index to match ([#​4916](psf/black#4916)) ##### Documentation - Use "Version X.Y.Z" headings in changelog for stable permalink anchors on ReadTheDocs ([#​5063](psf/black#5063)) - Note in the editor integrations that the SublimeText `sublack` plugin is archived and unmaintained ([#​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>
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` |  |  | --- ### 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 ([#​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. ([#​5127](psf/black#5127)) ##### Stable style - Fix `# fmt: skip` being ignored in nested `if` expressions with parenthesized `in` clauses ([#​4903](psf/black#4903)) - Add syntactic support for Python 3.15 ([#​5048](psf/black#5048)) - Fix crash when an f-string follows a `# fmt: off` comment inside brackets ([#​5097](psf/black#5097)) - Preserve multiline compound statement headers when `# fmt: skip` is placed on the colon line ([#​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 ([#​5021](psf/black#5021)) - Fix blank lines being removed between a function and a decorated class in `.pyi` stub files ([#​5092](psf/black#5092)) - Prevent string merger from creating unsplittable long lines when a pragma comment (e.g. `# type: ignore`) follows the closing bracket ([#​5096](psf/black#5096)) ##### Packaging - Run CI on 3.15 ([#​5127](psf/black#5127)) ##### Output - Improve parse error readability by showing multi-line output with an error pointer. ([#​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 ([#​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 ([#​5080](psf/black#5080)) ##### Integrations - Added documentation for doctest formatting tools and updated the integrations index to match ([#​4916](psf/black#4916)) ##### Documentation - Use "Version X.Y.Z" headings in changelog for stable permalink anchors on ReadTheDocs ([#​5063](psf/black#5063)) - Note in the editor integrations that the SublimeText `sublack` plugin is archived and unmaintained ([#​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>
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` |  |  | --- ### 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 ([#​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. ([#​5127](psf/black#5127)) ##### Stable style - Fix `# fmt: skip` being ignored in nested `if` expressions with parenthesized `in` clauses ([#​4903](psf/black#4903)) - Add syntactic support for Python 3.15 ([#​5048](psf/black#5048)) - Fix crash when an f-string follows a `# fmt: off` comment inside brackets ([#​5097](psf/black#5097)) - Preserve multiline compound statement headers when `# fmt: skip` is placed on the colon line ([#​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 ([#​5021](psf/black#5021)) - Fix blank lines being removed between a function and a decorated class in `.pyi` stub files ([#​5092](psf/black#5092)) - Prevent string merger from creating unsplittable long lines when a pragma comment (e.g. `# type: ignore`) follows the closing bracket ([#​5096](psf/black#5096)) ##### Packaging - Run CI on 3.15 ([#​5127](psf/black#5127)) ##### Output - Improve parse error readability by showing multi-line output with an error pointer. ([#​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 ([#​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 ([#​5080](psf/black#5080)) ##### Integrations - Added documentation for doctest formatting tools and updated the integrations index to match ([#​4916](psf/black#4916)) ##### Documentation - Use "Version X.Y.Z" headings in changelog for stable permalink anchors on ReadTheDocs ([#​5063](psf/black#5063)) - Note in the editor integrations that the SublimeText `sublack` plugin is archived and unmaintained ([#​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>
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` |  |  | --- ### 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 ([#​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. ([#​5127](psf/black#5127)) ##### Stable style - Fix `# fmt: skip` being ignored in nested `if` expressions with parenthesized `in` clauses ([#​4903](psf/black#4903)) - Add syntactic support for Python 3.15 ([#​5048](psf/black#5048)) - Fix crash when an f-string follows a `# fmt: off` comment inside brackets ([#​5097](psf/black#5097)) - Preserve multiline compound statement headers when `# fmt: skip` is placed on the colon line ([#​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 ([#​5021](psf/black#5021)) - Fix blank lines being removed between a function and a decorated class in `.pyi` stub files ([#​5092](psf/black#5092)) - Prevent string merger from creating unsplittable long lines when a pragma comment (e.g. `# type: ignore`) follows the closing bracket ([#​5096](psf/black#5096)) ##### Packaging - Run CI on 3.15 ([#​5127](psf/black#5127)) ##### Output - Improve parse error readability by showing multi-line output with an error pointer. ([#​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 ([#​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 ([#​5080](psf/black#5080)) ##### Integrations - Added documentation for doctest formatting tools and updated the integrations index to match ([#​4916](psf/black#4916)) ##### Documentation - Use "Version X.Y.Z" headings in changelog for stable permalink anchors on ReadTheDocs ([#​5063](psf/black#5063)) - Note in the editor integrations that the SublimeText `sublack` plugin is archived and unmaintained ([#​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>
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` |  |  | --- ### 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 ([#​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. ([#​5127](psf/black#5127)) ##### Stable style - Fix `# fmt: skip` being ignored in nested `if` expressions with parenthesized `in` clauses ([#​4903](psf/black#4903)) - Add syntactic support for Python 3.15 ([#​5048](psf/black#5048)) - Fix crash when an f-string follows a `# fmt: off` comment inside brackets ([#​5097](psf/black#5097)) - Preserve multiline compound statement headers when `# fmt: skip` is placed on the colon line ([#​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 ([#​5021](psf/black#5021)) - Fix blank lines being removed between a function and a decorated class in `.pyi` stub files ([#​5092](psf/black#5092)) - Prevent string merger from creating unsplittable long lines when a pragma comment (e.g. `# type: ignore`) follows the closing bracket ([#​5096](psf/black#5096)) ##### Packaging - Run CI on 3.15 ([#​5127](psf/black#5127)) ##### Output - Improve parse error readability by showing multi-line output with an error pointer. ([#​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 ([#​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 ([#​5080](psf/black#5080)) ##### Integrations - Added documentation for doctest formatting tools and updated the integrations index to match ([#​4916](psf/black#4916)) ##### Documentation - Use "Version X.Y.Z" headings in changelog for stable permalink anchors on ReadTheDocs ([#​5063](psf/black#5063)) - Note in the editor integrations that the SublimeText `sublack` plugin is archived and unmaintained ([#​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>
Description
Closes #4730
This PR addresses issue #4730, where
# fmt: skipwas being ignored or causing crashes in deeply nested expressions. The root cause is that Black's handling offmt: skipconverts AST nodes to string literals, which bypasses bracket tracking and can result in missing attributes likebracket_depth. This led toAttributeErrorexceptions, especially with extreme settings like--line-length=1.Key changes:
hasattr(leaf, "bracket_depth")checks insrc/black/lines.pyto prevent crashes when processing leaves generated byfmt: skip.tests/data/cases/fmtskip_nested_expression.py) using the original code from the issue, without relying on the--no-preview-line-length-1flag, as requested by maintainers.CHANGES.mdto document the fix.Checklist - did you ...
--previewstyle, following thestability policy?
CHANGES.mdif necessary?