-
Notifications
You must be signed in to change notification settings - Fork 1.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Gracefully handle lint panics #3509
Conversation
a34dcba
to
75456f4
Compare
75456f4
to
9216e36
Compare
":".bold() | ||
); | ||
|
||
Ok(Diagnostics::default()) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We would, ideally, push a warning Diagnostic
instead of returning Ok
(which is decisive and could result in miscounts if we ever print all linted files), but our diagnostic infrastructure doesn't allow this today.
@@ -46,7 +47,6 @@ pub fn run( | |||
log_level_args, | |||
}: Args, | |||
) -> Result<ExitStatus> { | |||
#[cfg(not(debug_assertions))] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Any reasons for only enabling this handler in release builds?
PR Check ResultsEcosystem✅ ecosystem check detected no changes. BenchmarkLinux
Windows
|
How do you think about the tradeoffs here? Would we ever want to enable this until we feel really confident in no-panics, and then remove? |
(Also, the benchmarks look unchanged -- any idea why that is?) |
Cargo doesn't support 'panic=abort' for benchmarks or tests, they always run with 'panic=unwind' [source] I'll reply to your other question tomorrow. |
Create a diagnostics for files that panic during linting rather than crashing Ruff.
It's a difficult one. It comes comes down to the assessment of whether Ruff aborting in the case of a panic is a problem for users. In my view, the value of Ruff is increased productivity for users, allowing them to ship high-quality software faster. And ruff delivers on that promise for many users by reducing the lint time from 30s+ to a few milliseconds. But, in my view, it's less important for productivity whether Ruff takes 190ms or 220ms, it doesn't significantly impact productivity. However, productivity takes a significant hit if Ruff blows up because of a bug, because then:
That's why I'm leaning toward making this a permanent change, except if we have the data that panics are extremely rare, we're in a position to ship bugfixes in hours to days, and Ruff is an established reliable high-quality productivity tool. But @charliermarsh, you're in a better position to assess if this has been a pain-point for users or if I'm extravagating ;) Obviously, regressing performance by 15% is significant. Especially because it applies to all code, including the code and tool we'll write in the future. My take here is that I'm convinced that we can improve performance by more than 15% if we are mindful of performance (make performance a habit) and focus on performant architectures and algorithms. Unfortunately, this requires more effort than using |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I agree with your assessment, thanks for spelling it out so clearly.
For what it's worth, I'm not sure how to quantify it, but I do think panics are uncommon. Most panic reports have fallen into two camps: (1) some file in the codebase uses CR line endings, typically a file that exists to test CR line endings (we improved this recently); or (2) actual fuzzing. But every panic has been indicative of a real bug, and any file panicking makes Ruff totally unusable right now. |
9216e36
to
4e3a9a4
Compare
Current dependencies on/for this PR:
This comment was auto-generated by Graphite. |
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [ruff](https://togithub.com/charliermarsh/ruff) | `^0.0.257` -> `^0.0.258` | [![age](https://badges.renovateapi.com/packages/pypi/ruff/0.0.258/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/pypi/ruff/0.0.258/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/pypi/ruff/0.0.258/compatibility-slim/0.0.257)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/pypi/ruff/0.0.258/confidence-slim/0.0.257)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>charliermarsh/ruff</summary> ### [`v0.0.258`](https://togithub.com/charliermarsh/ruff/releases/tag/v0.0.258) [Compare Source](https://togithub.com/charliermarsh/ruff/compare/v0.0.257...v0.0.258) <!-- Release notes generated using configuration in .github/release.yml at main --> #### What's Changed ##### Rules - \[`flake8-comprehensions`] Update `C416` with dict comprehension (autofixable) by [@​dhruvmanila](https://togithub.com/dhruvmanila) in [https://github.com/charliermarsh/ruff/pull/3605](https://togithub.com/charliermarsh/ruff/pull/3605) - \[`pylint`]: Implement `assert-on-string-literal` (`W0129`) by [@​latonis](https://togithub.com/latonis) in [https://github.com/charliermarsh/ruff/pull/3610](https://togithub.com/charliermarsh/ruff/pull/3610) - \[`pyupgrade`] Convert single-argument %-style format calls by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/3600](https://togithub.com/charliermarsh/ruff/pull/3600) - \[`pyupgrade`] Flag PEP 585 and PEP 604 violations in quoted annotations by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/3593](https://togithub.com/charliermarsh/ruff/pull/3593) - \[`pyupgrade`] Enable autofix for annotations within 'simple' string literals by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/3657](https://togithub.com/charliermarsh/ruff/pull/3657) - \[`pyflakes`] Add autofix functionality for `F523` ([#​3613](https://togithub.com/charliermarsh/ruff/issues/3613)) by [@​JonathanPlasse](https://togithub.com/JonathanPlasse) in [https://github.com/charliermarsh/ruff/pull/3613](https://togithub.com/charliermarsh/ruff/pull/3613) - \[`flake8-bandit`]: Implement deny-list rules for suspicious member calls by [@​colin99d](https://togithub.com/colin99d) in [https://github.com/charliermarsh/ruff/pull/3239](https://togithub.com/charliermarsh/ruff/pull/3239) - \[`flake8-annotations`] Add autofix for `ANN204` with magic methods by [@​JonathanPlasse](https://togithub.com/JonathanPlasse) in [https://github.com/charliermarsh/ruff/pull/3633](https://togithub.com/charliermarsh/ruff/pull/3633) - \[`pylint`] Implement `binary-op-exception` (`PLW0711`) by [@​latonis](https://togithub.com/latonis) in [https://github.com/charliermarsh/ruff/pull/3639](https://togithub.com/charliermarsh/ruff/pull/3639) - \[`flake8-django`]: Implement rule DJ012 by [@​dhruvmanila](https://togithub.com/dhruvmanila) in [https://github.com/charliermarsh/ruff/pull/3659](https://togithub.com/charliermarsh/ruff/pull/3659) ##### Bug Fixes - Check exclusions prior to resolving `pyproject.toml` files by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/3588](https://togithub.com/charliermarsh/ruff/pull/3588) - Fix D417 false positive by [@​JonathanPlasse](https://togithub.com/JonathanPlasse) in [https://github.com/charliermarsh/ruff/pull/3596](https://togithub.com/charliermarsh/ruff/pull/3596) - Avoid removing comment hash for noqa's with trailing content by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/3589](https://togithub.com/charliermarsh/ruff/pull/3589) - Avoid panics for implicitly-concatenated docstrings by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/3584](https://togithub.com/charliermarsh/ruff/pull/3584) - Fix infinite loop due to rules `D207` & `W605` by [@​vlindhol](https://togithub.com/vlindhol) in [https://github.com/charliermarsh/ruff/pull/3609](https://togithub.com/charliermarsh/ruff/pull/3609) - Avoid trimming escaped whitespace in D210 by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/3635](https://togithub.com/charliermarsh/ruff/pull/3635) - Handle `UP032` autofix with adjacent keywords by [@​JonathanPlasse](https://togithub.com/JonathanPlasse) in [https://github.com/charliermarsh/ruff/pull/3636](https://togithub.com/charliermarsh/ruff/pull/3636) - Consider same-site fixes to be overlapping by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/3638](https://togithub.com/charliermarsh/ruff/pull/3638) - Avoid `RUF007` fixes for more than two arguments by [@​JonathanPlasse](https://togithub.com/JonathanPlasse) in [https://github.com/charliermarsh/ruff/pull/3654](https://togithub.com/charliermarsh/ruff/pull/3654) - Allow `pairwise` diagnostics for `zip(..., strict=True)` by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/3669](https://togithub.com/charliermarsh/ruff/pull/3669) - isort: fix bad interaction between `force-sort-within-sections` and `force-to-top` by [@​bluetech](https://togithub.com/bluetech) in [https://github.com/charliermarsh/ruff/pull/3645](https://togithub.com/charliermarsh/ruff/pull/3645) - Gracefully handle lint panics by [@​MichaReiser](https://togithub.com/MichaReiser) in [https://github.com/charliermarsh/ruff/pull/3509](https://togithub.com/charliermarsh/ruff/pull/3509) - Fix TRY300 false positive by [@​JonathanPlasse](https://togithub.com/JonathanPlasse) in [https://github.com/charliermarsh/ruff/pull/3634](https://togithub.com/charliermarsh/ruff/pull/3634) - Avoid raising PEP 604 errors with forward-referenced members by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/3640](https://togithub.com/charliermarsh/ruff/pull/3640) - Avoid attempting infinite `open` fix with re-bound builtin by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/3650](https://togithub.com/charliermarsh/ruff/pull/3650) - Check indentation level when executing E231 by [@​kyoto7250](https://togithub.com/kyoto7250) in [https://github.com/charliermarsh/ruff/pull/3668](https://togithub.com/charliermarsh/ruff/pull/3668) - Flag, but don't fix, unused imports (`F401`) in `ModuleNotFoundError` blocks by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/3658](https://togithub.com/charliermarsh/ruff/pull/3658) #### New Contributors - [@​Rogdham](https://togithub.com/Rogdham) made their first contribution in [https://github.com/charliermarsh/ruff/pull/3607](https://togithub.com/charliermarsh/ruff/pull/3607) - [@​vlindhol](https://togithub.com/vlindhol) made their first contribution in [https://github.com/charliermarsh/ruff/pull/3609](https://togithub.com/charliermarsh/ruff/pull/3609) - [@​dhruvmanila](https://togithub.com/dhruvmanila) made their first contribution in [https://github.com/charliermarsh/ruff/pull/3605](https://togithub.com/charliermarsh/ruff/pull/3605) - [@​luke396](https://togithub.com/luke396) made their first contribution in [https://github.com/charliermarsh/ruff/pull/3604](https://togithub.com/charliermarsh/ruff/pull/3604) - [@​fuziontech](https://togithub.com/fuziontech) made their first contribution in [https://github.com/charliermarsh/ruff/pull/3641](https://togithub.com/charliermarsh/ruff/pull/3641) **Full Changelog**: astral-sh/ruff@v0.0.257...v0.0.258 </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **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://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/ixm-one/pytest-cmake-presets). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNS4xNy4xIiwidXBkYXRlZEluVmVyIjoiMzUuMTcuMSJ9--> Signed-off-by: Renovate Bot <[email protected]> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [ruff](https://togithub.com/charliermarsh/ruff) | `==0.0.257` -> `==0.0.259` | [![age](https://badges.renovateapi.com/packages/pypi/ruff/0.0.259/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/pypi/ruff/0.0.259/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/pypi/ruff/0.0.259/compatibility-slim/0.0.257)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/pypi/ruff/0.0.259/confidence-slim/0.0.257)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>charliermarsh/ruff</summary> ### [`v0.0.259`](https://togithub.com/charliermarsh/ruff/releases/tag/v0.0.259) [Compare Source](https://togithub.com/charliermarsh/ruff/compare/v0.0.258...v0.0.259) <!-- Release notes generated using configuration in .github/release.yml at main --> #### Summary Follow-up release to `v0.0.258` to fix an issue related to rule resolution via `select` and `ignore`. #### What's Changed ##### Bug Fixes - Fix RuleSet.remove by [@​MichaReiser](https://togithub.com/MichaReiser) in [https://github.com/charliermarsh/ruff/pull/3685](https://togithub.com/charliermarsh/ruff/pull/3685) - Respect all rule-exemption sources when suppressing parser errors by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/3665](https://togithub.com/charliermarsh/ruff/pull/3665) - Avoid nested loops in `missing_whitespace` by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/3688](https://togithub.com/charliermarsh/ruff/pull/3688) **Full Changelog**: astral-sh/ruff@v0.0.258...v0.0.259 ### [`v0.0.258`](https://togithub.com/charliermarsh/ruff/releases/tag/v0.0.258) [Compare Source](https://togithub.com/charliermarsh/ruff/compare/v0.0.257...v0.0.258) <!-- Release notes generated using configuration in .github/release.yml at main --> #### What's Changed ##### Rules - \[`flake8-comprehensions`] Update `C416` with dict comprehension (autofixable) by [@​dhruvmanila](https://togithub.com/dhruvmanila) in [https://github.com/charliermarsh/ruff/pull/3605](https://togithub.com/charliermarsh/ruff/pull/3605) - \[`pylint`]: Implement `assert-on-string-literal` (`W0129`) by [@​latonis](https://togithub.com/latonis) in [https://github.com/charliermarsh/ruff/pull/3610](https://togithub.com/charliermarsh/ruff/pull/3610) - \[`pyupgrade`] Convert single-argument %-style format calls by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/3600](https://togithub.com/charliermarsh/ruff/pull/3600) - \[`pyupgrade`] Flag PEP 585 and PEP 604 violations in quoted annotations by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/3593](https://togithub.com/charliermarsh/ruff/pull/3593) - \[`pyupgrade`] Enable autofix for annotations within 'simple' string literals by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/3657](https://togithub.com/charliermarsh/ruff/pull/3657) - \[`pyflakes`] Add autofix functionality for `F523` ([#​3613](https://togithub.com/charliermarsh/ruff/issues/3613)) by [@​JonathanPlasse](https://togithub.com/JonathanPlasse) in [https://github.com/charliermarsh/ruff/pull/3613](https://togithub.com/charliermarsh/ruff/pull/3613) - \[`flake8-bandit`]: Implement deny-list rules for suspicious member calls by [@​colin99d](https://togithub.com/colin99d) in [https://github.com/charliermarsh/ruff/pull/3239](https://togithub.com/charliermarsh/ruff/pull/3239) - \[`flake8-annotations`] Add autofix for `ANN204` with magic methods by [@​JonathanPlasse](https://togithub.com/JonathanPlasse) in [https://github.com/charliermarsh/ruff/pull/3633](https://togithub.com/charliermarsh/ruff/pull/3633) - \[`pylint`] Implement `binary-op-exception` (`PLW0711`) by [@​latonis](https://togithub.com/latonis) in [https://github.com/charliermarsh/ruff/pull/3639](https://togithub.com/charliermarsh/ruff/pull/3639) - \[`flake8-django`]: Implement rule DJ012 by [@​dhruvmanila](https://togithub.com/dhruvmanila) in [https://github.com/charliermarsh/ruff/pull/3659](https://togithub.com/charliermarsh/ruff/pull/3659) ##### Bug Fixes - Check exclusions prior to resolving `pyproject.toml` files by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/3588](https://togithub.com/charliermarsh/ruff/pull/3588) - Fix D417 false positive by [@​JonathanPlasse](https://togithub.com/JonathanPlasse) in [https://github.com/charliermarsh/ruff/pull/3596](https://togithub.com/charliermarsh/ruff/pull/3596) - Avoid removing comment hash for noqa's with trailing content by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/3589](https://togithub.com/charliermarsh/ruff/pull/3589) - Avoid panics for implicitly-concatenated docstrings by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/3584](https://togithub.com/charliermarsh/ruff/pull/3584) - Fix infinite loop due to rules `D207` & `W605` by [@​vlindhol](https://togithub.com/vlindhol) in [https://github.com/charliermarsh/ruff/pull/3609](https://togithub.com/charliermarsh/ruff/pull/3609) - Avoid trimming escaped whitespace in D210 by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/3635](https://togithub.com/charliermarsh/ruff/pull/3635) - Handle `UP032` autofix with adjacent keywords by [@​JonathanPlasse](https://togithub.com/JonathanPlasse) in [https://github.com/charliermarsh/ruff/pull/3636](https://togithub.com/charliermarsh/ruff/pull/3636) - Consider same-site fixes to be overlapping by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/3638](https://togithub.com/charliermarsh/ruff/pull/3638) - Avoid `RUF007` fixes for more than two arguments by [@​JonathanPlasse](https://togithub.com/JonathanPlasse) in [https://github.com/charliermarsh/ruff/pull/3654](https://togithub.com/charliermarsh/ruff/pull/3654) - Allow `pairwise` diagnostics for `zip(..., strict=True)` by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/3669](https://togithub.com/charliermarsh/ruff/pull/3669) - isort: fix bad interaction between `force-sort-within-sections` and `force-to-top` by [@​bluetech](https://togithub.com/bluetech) in [https://github.com/charliermarsh/ruff/pull/3645](https://togithub.com/charliermarsh/ruff/pull/3645) - Gracefully handle lint panics by [@​MichaReiser](https://togithub.com/MichaReiser) in [https://github.com/charliermarsh/ruff/pull/3509](https://togithub.com/charliermarsh/ruff/pull/3509) - Fix TRY300 false positive by [@​JonathanPlasse](https://togithub.com/JonathanPlasse) in [https://github.com/charliermarsh/ruff/pull/3634](https://togithub.com/charliermarsh/ruff/pull/3634) - Avoid raising PEP 604 errors with forward-referenced members by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/3640](https://togithub.com/charliermarsh/ruff/pull/3640) - Avoid attempting infinite `open` fix with re-bound builtin by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/3650](https://togithub.com/charliermarsh/ruff/pull/3650) - Check indentation level when executing E231 by [@​kyoto7250](https://togithub.com/kyoto7250) in [https://github.com/charliermarsh/ruff/pull/3668](https://togithub.com/charliermarsh/ruff/pull/3668) - Flag, but don't fix, unused imports (`F401`) in `ModuleNotFoundError` blocks by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/3658](https://togithub.com/charliermarsh/ruff/pull/3658) #### New Contributors - [@​Rogdham](https://togithub.com/Rogdham) made their first contribution in [https://github.com/charliermarsh/ruff/pull/3607](https://togithub.com/charliermarsh/ruff/pull/3607) - [@​vlindhol](https://togithub.com/vlindhol) made their first contribution in [https://github.com/charliermarsh/ruff/pull/3609](https://togithub.com/charliermarsh/ruff/pull/3609) - [@​dhruvmanila](https://togithub.com/dhruvmanila) made their first contribution in [https://github.com/charliermarsh/ruff/pull/3605](https://togithub.com/charliermarsh/ruff/pull/3605) - [@​luke396](https://togithub.com/luke396) made their first contribution in [https://github.com/charliermarsh/ruff/pull/3604](https://togithub.com/charliermarsh/ruff/pull/3604) - [@​fuziontech](https://togithub.com/fuziontech) made their first contribution in [https://github.com/charliermarsh/ruff/pull/3641](https://togithub.com/charliermarsh/ruff/pull/3641) **Full Changelog**: astral-sh/ruff@v0.0.257...v0.0.258 </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR becomes conflicted, 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://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/allenporter/flux-local). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNS4xNC4yIiwidXBkYXRlZEluVmVyIjoiMzUuMTQuMiJ9--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This PR wraps the linting of every file in a
catch_unwind
to catch potential panics (due to a bug in ruff) and prints a warning instead of crashing ruff. Catching panics on a per-file basis has the advantage that it doesn't prevent users from adopting or continuing using Ruff because of a bug triggered by a specific code snipped. The catch handler also includes the name of the problematic file to ease identifying the bug.The main downside of this approach is that we now need to compile ruff with
panic=unwind
instead ofpanic=abort
. Changing the panic type results in a ~15% performance regression on my machine:It also slightly increases the binary from ~19MB to ~20MB due to the additional metadata required to enable unwinding (stack walking etc).
Test Plan
I changed a linter and added an intentional index out of bounds. Ruff linted all files but printed the following warning everytime the out of bounds index paniced
The top frames are related to Rust's unwind handling but frame 11 points to the problematic line.
Alternatives
set_handler
) per processed file. This would allow us to print the file name before crashing ruff, but it doesn't solve the problem that the bug now prevents users from using ruff.catch_unwind
enabled if we run into a panic 🤣