-
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
Disable auto-fix when source has syntax errors #12134
Conversation
|
3390bf0
to
b58e87b
Compare
// Remove fixes for any rules marked as unfixable. | ||
for diagnostic in &mut diagnostics { | ||
if !settings.rules.should_fix(diagnostic.kind.rule()) { | ||
diagnostic.fix = None; | ||
if parsed.is_valid() { | ||
// Remove fixes for any rules marked as unfixable. | ||
for diagnostic in &mut diagnostics { | ||
if !settings.rules.should_fix(diagnostic.kind.rule()) { | ||
diagnostic.fix = None; | ||
} | ||
} | ||
} |
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 wasn't aware that we already had a similar loop. I guess this is okay. It does have the downside that we waste time on generating fixes that we then just omit. But I see why we do it this way, because we lack a better abstraction for testing if a fix should be generated.
## Summary This PR avoids the error notification if a user selects the source code actions and there's a syntax error in the source. Before #12134, the change would've been different. But that PR disables generating fixes if there's a syntax error. This means that we can return an empty map instead as there won't be any fixes in the diagnostics returned by the `lint_fix` function. For reference, following are the screenshot as on `main` with the error: **VS Code:** <img width="1715" alt="Screenshot 2024-07-02 at 16 39 59" src="https://github.com/astral-sh/ruff/assets/67177269/62f3e99b-0b0c-4608-84a2-26aeabcc6933"> **Neovim:** <img width="1717" alt="Screenshot 2024-07-02 at 16 38 50" src="https://github.com/astral-sh/ruff/assets/67177269/5d637c36-d7f8-4a3b-8011-9a89708919a8"> fixes: #11931 ## Test Plan Considering the following code snippet where there are two diagnostics (syntax error and useless semicolon `E703`): ```py x; y = ``` ### VS Code https://github.com/astral-sh/ruff/assets/67177269/943537fc-ed8d-448d-8a36-1e34536c4f3e ### Neovim https://github.com/astral-sh/ruff/assets/67177269/4e6f3372-6e5b-4380-8919-6221066efd5b
Summary
This PR updates Ruff to not generate auto-fixes if the source code contains syntax errors as determined by the parser.
The main motivation behind this is to avoid infinite autofix loop when the token-based rules are run over any source with syntax errors in #11950.
Although even after this, it's not certain that there won't be an infinite autofix loop because the logic might be incorrect. For example, #12094 and #12136.
This requires updating the test infrastructure to not validate for fix availability status when the source contained syntax errors. This is required because otherwise the fuzzer might fail as it uses the test function to run the linter and validate the source code.
resolves: #11455
Test Plan
cargo insta test