Skip to content
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

Merged
merged 2 commits into from
Jul 2, 2024
Merged

Conversation

dhruvmanila
Copy link
Member

@dhruvmanila dhruvmanila commented Jul 1, 2024

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

Copy link
Contributor

github-actions bot commented Jul 1, 2024

ruff-ecosystem results

Linter (stable)

✅ ecosystem check detected no linter changes.

Linter (preview)

ℹ️ ecosystem check encountered linter errors. (no lint changes; 1 project error)

demisto/content (error)

ruff check --no-cache --exit-zero --ignore RUF9 --output-format concise --preview

warning: The top-level linter settings are deprecated in favour of their counterparts in the `lint` section. Please update the following options in `pyproject.toml`:
  - 'ignore' -> 'lint.ignore'
  - 'select' -> 'lint.select'
  - 'unfixable' -> 'lint.unfixable'
  - 'per-file-ignores' -> 'lint.per-file-ignores'
warning: `PGH001` has been remapped to `S307`.
warning: `PGH002` has been remapped to `G010`.
warning: `PLR1701` has been remapped to `SIM101`.
ruff failed
  Cause: Selection of deprecated rule `E999` is not allowed when preview is enabled.

@dhruvmanila dhruvmanila force-pushed the dhruv/disable-autofix branch from 3390bf0 to b58e87b Compare July 1, 2024 13:33
@dhruvmanila dhruvmanila marked this pull request as ready for review July 1, 2024 14:39
@dhruvmanila dhruvmanila requested a review from MichaReiser July 1, 2024 14:39
Comment on lines -291 to -296
// 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;
}
}
}
Copy link
Member

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.

@dhruvmanila dhruvmanila added the fixes Related to suggested fixes for violations label Jul 2, 2024
@dhruvmanila dhruvmanila merged commit 88a4cc4 into main Jul 2, 2024
20 checks passed
@dhruvmanila dhruvmanila deleted the dhruv/disable-autofix branch July 2, 2024 08:52
dhruvmanila added a commit that referenced this pull request Jul 4, 2024
## 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
fixes Related to suggested fixes for violations
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Ruff applies auto-fix in files with syntax errors
3 participants