-
Notifications
You must be signed in to change notification settings - Fork 1.5k
[flake8-pyi
] Ensure Literal[None,] | Literal[None,]
is not autofixed to None | None
(PYI061
)
#17659
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
Conversation
Handles the case where the `None` literal inside `Literal` is part of a tuple, e.g. `List[None,]`. We don't create the fix for this case.
|
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.
thanks!
crates/ruff_linter/src/rules/flake8_pyi/rules/redundant_none_literal.rs
Outdated
Show resolved
Hide resolved
Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
Looking at it again, I think this maybe fixes things the wrong way. If we have a from typing import Literal
f: Literal[None,] | Literal[None,]
g: Literal[None,] | None
h: None | Literal[None,] and I run --- foo.pyi
+++ foo.pyi
@@ -1,5 +1,5 @@
from typing import Literal
-f: Literal[None,] | Literal[None,]
+f: None | None
g: Literal[None,] | None
h: None | Literal[None,] I.e., the second and third of these are fine, because this rule already knows that converting That indicates to me that the better fix here is to ensure that each element's autofix is forced to happen in a separate iteration of the diagnostics-plus-autofixes loop that Ruff does until there are no more autofixes to apply. I.e., this diff applied to diff --git a/crates/ruff_linter/src/rules/flake8_pyi/rules/redundant_none_literal.rs b/crates/ruff_linter/src/rules/flake8_pyi/rules/redundant_none_literal.rs
index 16a48bc5f..e3fafac62 100644
--- a/crates/ruff_linter/src/rules/flake8_pyi/rules/redundant_none_literal.rs
+++ b/crates/ruff_linter/src/rules/flake8_pyi/rules/redundant_none_literal.rs
@@ -130,6 +130,9 @@ pub(crate) fn redundant_none_literal<'a>(checker: &Checker, literal_expr: &'a Ex
literal_elements.clone(),
union_kind,
)
+ .map(|fix| {
+ fix.map(|fix| fix.isolate(Checker::isolation(semantic.current_statement_id())))
+ })
});
checker.report_diagnostic(diagnostic);
} |
Makes sense, thanks! |
crates/ruff_linter/resources/test/fixtures/flake8_pyi/PYI061.py
Outdated
Show resolved
Hide resolved
I realised that we could simplify some of the logic added in #14583, because ensuring that the individual autofixes are isolated provides a more general fix! I pushed the change to your branch here |
flake8-pyi
] Improve autofix safety for PYI061
flake8-pyi
] Ensure Literal[None,] | Literal[None,]
is not autofixed to None | None
(PYI061
)
Thank you! |
* main: (37 commits) [red-knot] Revert blanket `clippy::too_many_arguments` allow (#17688) Add config option to disable `typing_extensions` imports (#17611) ruff_db: render file paths in diagnostics as relative paths if possible Bump mypy_primer pin (#17685) red_knot_python_semantic: improve `not-iterable` diagnostic [red-knot] Allow all callables to be assignable to @Todo-signatures (#17680) [`refurb`] Mark fix as safe for `readlines-in-for` (`FURB129`) (#17644) Collect preview lint behaviors in separate module (#17646) Upgrade Salsa to a more recent commit (#17678) [red-knot] TypedDict: No errors for introspection dunder attributes (#17677) [`flake8-pyi`] Ensure `Literal[None,] | Literal[None,]` is not autofixed to `None | None` (`PYI061`) (#17659) [red-knot] No errors for definitions of `TypedDict`s (#17674) Update actions/download-artifact digest to d3f86a1 (#17664) [red-knot] Use 101 exit code when there's at least one diagnostic with severity 'fatal' (#17640) [`pycodestyle`] Fix duplicated diagnostic in `E712` (#17651) [airflow] fix typos `AIR312` (#17673) [red-knot] Don't ignore hidden files by default (#17655) Update pre-commit hook astral-sh/ruff-pre-commit to v0.11.7 (#17670) Update docker/build-push-action digest to 14487ce (#17665) Update taiki-e/install-action digest to ab3728c (#17666) ...
Handles the case where the
None
literal insideLiteral
is part of a tuple, e.g.List[None,]
. We don't create the fix for this case.Fixes #16177.
Summary
Test Plan
Snapshot tests.