-
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
Add autofix for flake8-type-checking #4742
Conversation
/// Given an import statement, remove any imports that are not specified in the `imports` slice. | ||
/// | ||
/// Returns the modified import statement. | ||
pub(crate) fn retain_imports( |
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.
(This is effectively the inverse of remove_imports
, above.)
if !has_comment { | ||
alias.comma = trailing_comma; | ||
} | ||
} |
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.
Using LibCST here means we should generally retain comments.
@@ -342,6 +368,42 @@ pub(crate) fn typing_only_runtime_import( | |||
} | |||
}; | |||
|
|||
if checker.patch(diagnostic.kind.rule()) { | |||
diagnostic.try_set_fix(|| { |
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.
Note that we're generating an edit for every diagnostic, so we're generating an edit for every member in an StmtKind::ImportFrom
statement. We may want to generate one edit for the entire statement, like we do for unused imports... But this does work correctly in practice. The main issue is that if you have:
from foo import bar, bar
Then after the fixes, we'll probably give you:
if TYPE_CHECKING:
from foo import bar
from foo import baz
These will get merged when you run the isort
rules, so most users will never see this state (or will have it immediately corrected), but I guess it's not ideal (and it does mean that if you're using the LSP, you need to take one Code Action per member).
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.
The alternative, as hinted above, is that we generate one edit for the entire import statement. We may also want to then generate one diagnostic for the entire import statement? So this would take some refactoring.
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.
Merging the diagnostics on a per-statement level seems desirable to me but we can do this as a separate PR.
530c44e
to
11648dd
Compare
11648dd
to
03c30f1
Compare
f8ddd72
to
9efd5b2
Compare
03c30f1
to
9a84037
Compare
crates/ruff/src/rules/flake8_type_checking/rules/typing_only_runtime_import.rs
Show resolved
Hide resolved
diagnostic.try_set_fix(|| { | ||
// Step 1) Remove the import. | ||
let source = binding.source.unwrap(); | ||
let deleted: Vec<&Stmt> = checker.deletions.iter().map(Into::into).collect(); |
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.
This code looks (identical?) to your other PR. Is there an opportunity to share some of the logic?
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 have these everywhere that we do statement deletion :(
@@ -342,6 +368,42 @@ pub(crate) fn typing_only_runtime_import( | |||
} | |||
}; | |||
|
|||
if checker.patch(diagnostic.kind.rule()) { | |||
diagnostic.try_set_fix(|| { |
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.
Merging the diagnostics on a per-statement level seems desirable to me but we can do this as a separate PR.
1 |+from typing import TYPE_CHECKING | ||
2 |+ | ||
3 |+if TYPE_CHECKING: | ||
4 |+ import flask |
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.
nit: is there a reason why we have blank line after the top level import but not after the type checking block? (Seems to work everywhere but here anyway)
...es/flake8_type_checking/snapshots/ruff__rules__flake8_type_checking__tests__import_from.snap
Show resolved
Hide resolved
...ing/snapshots/ruff__rules__flake8_type_checking__tests__type_checking_block_after_usage.snap
Show resolved
Hide resolved
ecosystem ci looks good (https://gist.github.com/konstin/cf6f633a73a701bc94b089d2066e4675), most interesting case was https://github.com/apache/airflow/blob/27001a23718d6b8b5118eb130be84713af9a4477/airflow/models/__init__.py (module level |
9efd5b2
to
af3aea6
Compare
9a84037
to
2b9311b
Compare
This is actually sort of starting to work This is actually sort of starting to work Another hard case
2b9311b
to
498f270
Compare
[![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) ([changelog](https://togithub.com/charliermarsh/ruff/releases)) | `^0.0.270` -> `^0.0.271` | [![age](https://badges.renovateapi.com/packages/pypi/ruff/0.0.271/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/pypi/ruff/0.0.271/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/pypi/ruff/0.0.271/compatibility-slim/0.0.270)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/pypi/ruff/0.0.271/confidence-slim/0.0.270)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>charliermarsh/ruff</summary> ### [`v0.0.271`](https://togithub.com/charliermarsh/ruff/releases/tag/v0.0.271) [Compare Source](https://togithub.com/charliermarsh/ruff/compare/v0.0.270...v0.0.271) <!-- Release notes generated using configuration in .github/release.yml at main --> #### What's Changed ##### Rules - Add autofix for flake8-type-checking by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4742](https://togithub.com/charliermarsh/ruff/pull/4742) - \[`airflow`] Add AIR001: task variable name should be same as task_id arg by [@​jlaneve](https://togithub.com/jlaneve) in [https://github.com/charliermarsh/ruff/pull/4687](https://togithub.com/charliermarsh/ruff/pull/4687) - \[`flake8-bandit`] Implement S609, linux_commands_wildcard_injection by [@​scop](https://togithub.com/scop) in [https://github.com/charliermarsh/ruff/pull/4504](https://togithub.com/charliermarsh/ruff/pull/4504) - \[`flake8-bugbear`] Move duplicate-value rule to flake8-bugbear by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4882](https://togithub.com/charliermarsh/ruff/pull/4882) - \[`flake8-fixme`] Implement `flake8_fixme` and refactor `TodoDirective` by [@​evanrittenhouse](https://togithub.com/evanrittenhouse) in [https://github.com/charliermarsh/ruff/pull/4681](https://togithub.com/charliermarsh/ruff/pull/4681) - \[`flake8-future-annotations`] Implement `FA102` by [@​akx](https://togithub.com/akx) in [https://github.com/charliermarsh/ruff/pull/4702](https://togithub.com/charliermarsh/ruff/pull/4702) - \[`flake8-pyi`] Add PYI024 for `flake8-pyi` plugin by [@​qdegraaf](https://togithub.com/qdegraaf) in [https://github.com/charliermarsh/ruff/pull/4756](https://togithub.com/charliermarsh/ruff/pull/4756) - \[`flake8-pyi`] Add PYI034 for `flake8-pyi` plugin by [@​qdegraaf](https://togithub.com/qdegraaf) in [https://github.com/charliermarsh/ruff/pull/4764](https://togithub.com/charliermarsh/ruff/pull/4764) - \[`flake8-pyi`] Add `PYI032` rule with autofix by [@​qdegraaf](https://togithub.com/qdegraaf) in [https://github.com/charliermarsh/ruff/pull/4695](https://togithub.com/charliermarsh/ruff/pull/4695) - \[`flake8-pyi`] Add autofix for PYI010 by [@​qdegraaf](https://togithub.com/qdegraaf) in [https://github.com/charliermarsh/ruff/pull/4634](https://togithub.com/charliermarsh/ruff/pull/4634) - \[`flake8-pyi`] Implement PYI029 by [@​density](https://togithub.com/density) in [https://github.com/charliermarsh/ruff/pull/4851](https://togithub.com/charliermarsh/ruff/pull/4851) - \[`flake8-pyi`] Implement PYI035 by [@​density](https://togithub.com/density) in [https://github.com/charliermarsh/ruff/pull/4820](https://togithub.com/charliermarsh/ruff/pull/4820) - \[`flake8-pyi`] Implement PYI048 for `flake8-pyi` plugin by [@​qdegraaf](https://togithub.com/qdegraaf) in [https://github.com/charliermarsh/ruff/pull/4645](https://togithub.com/charliermarsh/ruff/pull/4645) - \[`flake8-pyi`] Implement PYI053 by [@​density](https://togithub.com/density) in [https://github.com/charliermarsh/ruff/pull/4770](https://togithub.com/charliermarsh/ruff/pull/4770) - \[`flake8-pyi`] Implement PYI054 by [@​density](https://togithub.com/density) in [https://github.com/charliermarsh/ruff/pull/4775](https://togithub.com/charliermarsh/ruff/pull/4775) - \[`flake8-pyi`] Implement `PYI025` by [@​qdegraaf](https://togithub.com/qdegraaf) in [https://github.com/charliermarsh/ruff/pull/4791](https://togithub.com/charliermarsh/ruff/pull/4791) - \[`flake8-pyi`] Implement `PYI045` by [@​density](https://togithub.com/density) in [https://github.com/charliermarsh/ruff/pull/4700](https://togithub.com/charliermarsh/ruff/pull/4700) - \[`pylint`] Add Pylint rule `C0208` (`use-sequence-for-iteration`) as `PLC0208` (`iteration-over-set`) by [@​tjkuson](https://togithub.com/tjkuson) in [https://github.com/charliermarsh/ruff/pull/4706](https://togithub.com/charliermarsh/ruff/pull/4706) - \[`pylint`] Add autofix for `PLR1701` (repeated-isinstance-calls) by [@​dhruvmanila](https://togithub.com/dhruvmanila) in [https://github.com/charliermarsh/ruff/pull/4792](https://togithub.com/charliermarsh/ruff/pull/4792) - \[`pylint`] Implement Pylint's `yield-inside-async-function` rule (`PLE1700`) by [@​chanman3388](https://togithub.com/chanman3388) in [https://github.com/charliermarsh/ruff/pull/4668](https://togithub.com/charliermarsh/ruff/pull/4668) - \[`pylint`] implement E307 for pylint invalid str return type by [@​Ryang20718](https://togithub.com/Ryang20718) in [https://github.com/charliermarsh/ruff/pull/4854](https://togithub.com/charliermarsh/ruff/pull/4854) - \[`ruff`] Lint pyproject.toml by [@​konstin](https://togithub.com/konstin) in [https://github.com/charliermarsh/ruff/pull/4496](https://togithub.com/charliermarsh/ruff/pull/4496) - \[`tryceratops`] Ignore error calls with `exc_info` in TRY400 by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4797](https://togithub.com/charliermarsh/ruff/pull/4797) ##### Settings - Add `pyflakes.extend-generics` setting by [@​JonathanPlasse](https://togithub.com/JonathanPlasse) in [https://github.com/charliermarsh/ruff/pull/4677](https://togithub.com/charliermarsh/ruff/pull/4677) ##### Bug Fixes - Fix PLW3301 false positive single argument nested min/max by [@​JonathanPlasse](https://togithub.com/JonathanPlasse) in [https://github.com/charliermarsh/ruff/pull/4683](https://togithub.com/charliermarsh/ruff/pull/4683) - Handle dotted alias imports to check for implicit imports by [@​dhruvmanila](https://togithub.com/dhruvmanila) in [https://github.com/charliermarsh/ruff/pull/4685](https://togithub.com/charliermarsh/ruff/pull/4685) - Flag empty strings in flake8-errmsg rules by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4745](https://togithub.com/charliermarsh/ruff/pull/4745) - Exclude function definition from too-many-statements rule by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4794](https://togithub.com/charliermarsh/ruff/pull/4794) - Preserve quotes in F523 fixer by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4836](https://togithub.com/charliermarsh/ruff/pull/4836) - Fix round-tripping of nested functions by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4875](https://togithub.com/charliermarsh/ruff/pull/4875) - Avoid early-exit in explicit-f-string-type-conversion by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4886](https://togithub.com/charliermarsh/ruff/pull/4886) - Avoid no-op fix for nested with expressions by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4906](https://togithub.com/charliermarsh/ruff/pull/4906) - Fix UP036 auto-fix error by [@​JonathanPlasse](https://togithub.com/JonathanPlasse) in [https://github.com/charliermarsh/ruff/pull/4679](https://togithub.com/charliermarsh/ruff/pull/4679) - Use class name as range for `B024` by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4647](https://togithub.com/charliermarsh/ruff/pull/4647) - Change TODO directive detection to work with multiple pound signs on the same line by [@​evanrittenhouse](https://togithub.com/evanrittenhouse) in [https://github.com/charliermarsh/ruff/pull/4558](https://togithub.com/charliermarsh/ruff/pull/4558) - Allow more immutable funcs for RUF009 by [@​qdegraaf](https://togithub.com/qdegraaf) in [https://github.com/charliermarsh/ruff/pull/4660](https://togithub.com/charliermarsh/ruff/pull/4660) - Avoid using typing-imported symbols for runtime edits by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4649](https://togithub.com/charliermarsh/ruff/pull/4649) - Fix `async for` formatting by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4675](https://togithub.com/charliermarsh/ruff/pull/4675) - Ignore **setattr** in FBT003 by [@​alexfikl](https://togithub.com/alexfikl) in [https://github.com/charliermarsh/ruff/pull/4752](https://togithub.com/charliermarsh/ruff/pull/4752) - Include ImportError in non-fixable try-catch imports by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4793](https://togithub.com/charliermarsh/ruff/pull/4793) - Avoid extra newline between diagnostics in grouped mode by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4776](https://togithub.com/charliermarsh/ruff/pull/4776) - Avoid enforcing native-literals rule within nested f-strings by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4488](https://togithub.com/charliermarsh/ruff/pull/4488) - Respect mixed variable assignment in RET504 by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4835](https://togithub.com/charliermarsh/ruff/pull/4835) - Make FLY002 autofix into a constant string instead of an f-string if all `join()` arguments are strings by [@​evanrittenhouse](https://togithub.com/evanrittenhouse) in [https://github.com/charliermarsh/ruff/pull/4834](https://togithub.com/charliermarsh/ruff/pull/4834) - Add some exceptions for FBT003 ([#​3247](https://togithub.com/charliermarsh/ruff/issues/3247)) by [@​allisonkarlitskaya](https://togithub.com/allisonkarlitskaya) in [https://github.com/charliermarsh/ruff/pull/4867](https://togithub.com/charliermarsh/ruff/pull/4867) - Avoid running RUF100 rules when code contains syntax errors by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4869](https://togithub.com/charliermarsh/ruff/pull/4869) - Avoid index-out-of-bands panic for positional placeholders by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4872](https://togithub.com/charliermarsh/ruff/pull/4872) - Remove destructive fixes for F523 by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4883](https://togithub.com/charliermarsh/ruff/pull/4883) - Respect shadowed exports in `__all__` by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4885](https://togithub.com/charliermarsh/ruff/pull/4885) - Track symbol deletions separately from bindings by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4888](https://togithub.com/charliermarsh/ruff/pull/4888) - Change fixable_set to include RuleSelector::All/Nursery by [@​evanrittenhouse](https://togithub.com/evanrittenhouse) in [https://github.com/charliermarsh/ruff/pull/4852](https://togithub.com/charliermarsh/ruff/pull/4852) #### New Contributors - [@​bersbersbers](https://togithub.com/bersbersbers) made their first contribution in [https://github.com/charliermarsh/ruff/pull/4644](https://togithub.com/charliermarsh/ruff/pull/4644) - [@​jlaneve](https://togithub.com/jlaneve) made their first contribution in [https://github.com/charliermarsh/ruff/pull/4690](https://togithub.com/charliermarsh/ruff/pull/4690) - [@​suharnikov](https://togithub.com/suharnikov) made their first contribution in [https://github.com/charliermarsh/ruff/pull/4678](https://togithub.com/charliermarsh/ruff/pull/4678) - [@​alexfikl](https://togithub.com/alexfikl) made their first contribution in [https://github.com/charliermarsh/ruff/pull/4752](https://togithub.com/charliermarsh/ruff/pull/4752) - [@​allisonkarlitskaya](https://togithub.com/allisonkarlitskaya) made their first contribution in [https://github.com/charliermarsh/ruff/pull/4867](https://togithub.com/charliermarsh/ruff/pull/4867) - [@​Ryang20718](https://togithub.com/Ryang20718) made their first contribution in [https://github.com/charliermarsh/ruff/pull/4854](https://togithub.com/charliermarsh/ruff/pull/4854) - [@​addisoncrump](https://togithub.com/addisoncrump) made their first contribution in [https://github.com/charliermarsh/ruff/pull/4893](https://togithub.com/charliermarsh/ruff/pull/4893) **Full Changelog**: astral-sh/ruff@v0.0.270...v0.0.271 </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:eyJjcmVhdGVkSW5WZXIiOiIzNS4xMTAuMCIsInVwZGF0ZWRJblZlciI6IjM1LjExMC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9--> Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> 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) ([changelog](https://togithub.com/charliermarsh/ruff/releases)) | `0.0.270` -> `0.0.272` | [![age](https://badges.renovateapi.com/packages/pypi/ruff/0.0.272/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/pypi/ruff/0.0.272/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/pypi/ruff/0.0.272/compatibility-slim/0.0.270)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/pypi/ruff/0.0.272/confidence-slim/0.0.270)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>charliermarsh/ruff</summary> ### [`v0.0.272`](https://togithub.com/astral-sh/ruff/releases/tag/v0.0.272) [Compare Source](https://togithub.com/charliermarsh/ruff/compare/v0.0.271...v0.0.272) <!-- Release notes generated using configuration in .github/release.yml at main --> #### What's Changed ##### Breaking Changes - Move flake8-fixme rules to FIX prefix by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4917](https://togithub.com/charliermarsh/ruff/pull/4917) ##### Rules - \[`flake8-pyi`] Implement PYI050 by [@​density](https://togithub.com/density) in [https://github.com/charliermarsh/ruff/pull/4884](https://togithub.com/charliermarsh/ruff/pull/4884) ##### Bug Fixes - Avoid attributing runtime references to module-level imports by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4942](https://togithub.com/charliermarsh/ruff/pull/4942) - Skip class scopes when resolving nonlocal references by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4943](https://togithub.com/charliermarsh/ruff/pull/4943) - Apply `dict.get` fix before ternary rewrite by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4944](https://togithub.com/charliermarsh/ruff/pull/4944) - Handle implicit string concatenations in conversion-flag rewrites by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4947](https://togithub.com/charliermarsh/ruff/pull/4947) - Make `C413` fix as suggested for `reversed` call by [@​dhruvmanila](https://togithub.com/dhruvmanila) in [https://github.com/charliermarsh/ruff/pull/4891](https://togithub.com/charliermarsh/ruff/pull/4891) - ignore if using infinite iterators in `B905` by [@​kyoto7250](https://togithub.com/kyoto7250) in [https://github.com/charliermarsh/ruff/pull/4914](https://togithub.com/charliermarsh/ruff/pull/4914) **Full Changelog**: astral-sh/ruff@v0.0.271...v0.0.272 ### [`v0.0.271`](https://togithub.com/astral-sh/ruff/releases/tag/v0.0.271) [Compare Source](https://togithub.com/charliermarsh/ruff/compare/v0.0.270...v0.0.271) <!-- Release notes generated using configuration in .github/release.yml at main --> #### What's Changed ##### Rules - Add autofix for flake8-type-checking by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4742](https://togithub.com/charliermarsh/ruff/pull/4742) - \[`airflow`] Add AIR001: task variable name should be same as task_id arg by [@​jlaneve](https://togithub.com/jlaneve) in [https://github.com/charliermarsh/ruff/pull/4687](https://togithub.com/charliermarsh/ruff/pull/4687) - \[`flake8-bandit`] Implement S609, linux_commands_wildcard_injection by [@​scop](https://togithub.com/scop) in [https://github.com/charliermarsh/ruff/pull/4504](https://togithub.com/charliermarsh/ruff/pull/4504) - \[`flake8-bugbear`] Move duplicate-value rule to flake8-bugbear by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4882](https://togithub.com/charliermarsh/ruff/pull/4882) - \[`flake8-fixme`] Implement `flake8_fixme` and refactor `TodoDirective` by [@​evanrittenhouse](https://togithub.com/evanrittenhouse) in [https://github.com/charliermarsh/ruff/pull/4681](https://togithub.com/charliermarsh/ruff/pull/4681) - \[`flake8-future-annotations`] Implement `FA102` by [@​akx](https://togithub.com/akx) in [https://github.com/charliermarsh/ruff/pull/4702](https://togithub.com/charliermarsh/ruff/pull/4702) - \[`flake8-pyi`] Add PYI024 for `flake8-pyi` plugin by [@​qdegraaf](https://togithub.com/qdegraaf) in [https://github.com/charliermarsh/ruff/pull/4756](https://togithub.com/charliermarsh/ruff/pull/4756) - \[`flake8-pyi`] Add PYI034 for `flake8-pyi` plugin by [@​qdegraaf](https://togithub.com/qdegraaf) in [https://github.com/charliermarsh/ruff/pull/4764](https://togithub.com/charliermarsh/ruff/pull/4764) - \[`flake8-pyi`] Add `PYI032` rule with autofix by [@​qdegraaf](https://togithub.com/qdegraaf) in [https://github.com/charliermarsh/ruff/pull/4695](https://togithub.com/charliermarsh/ruff/pull/4695) - \[`flake8-pyi`] Add autofix for PYI010 by [@​qdegraaf](https://togithub.com/qdegraaf) in [https://github.com/charliermarsh/ruff/pull/4634](https://togithub.com/charliermarsh/ruff/pull/4634) - \[`flake8-pyi`] Implement PYI029 by [@​density](https://togithub.com/density) in [https://github.com/charliermarsh/ruff/pull/4851](https://togithub.com/charliermarsh/ruff/pull/4851) - \[`flake8-pyi`] Implement PYI035 by [@​density](https://togithub.com/density) in [https://github.com/charliermarsh/ruff/pull/4820](https://togithub.com/charliermarsh/ruff/pull/4820) - \[`flake8-pyi`] Implement PYI048 for `flake8-pyi` plugin by [@​qdegraaf](https://togithub.com/qdegraaf) in [https://github.com/charliermarsh/ruff/pull/4645](https://togithub.com/charliermarsh/ruff/pull/4645) - \[`flake8-pyi`] Implement PYI053 by [@​density](https://togithub.com/density) in [https://github.com/charliermarsh/ruff/pull/4770](https://togithub.com/charliermarsh/ruff/pull/4770) - \[`flake8-pyi`] Implement PYI054 by [@​density](https://togithub.com/density) in [https://github.com/charliermarsh/ruff/pull/4775](https://togithub.com/charliermarsh/ruff/pull/4775) - \[`flake8-pyi`] Implement `PYI025` by [@​qdegraaf](https://togithub.com/qdegraaf) in [https://github.com/charliermarsh/ruff/pull/4791](https://togithub.com/charliermarsh/ruff/pull/4791) - \[`flake8-pyi`] Implement `PYI045` by [@​density](https://togithub.com/density) in [https://github.com/charliermarsh/ruff/pull/4700](https://togithub.com/charliermarsh/ruff/pull/4700) - \[`pylint`] Add Pylint rule `C0208` (`use-sequence-for-iteration`) as `PLC0208` (`iteration-over-set`) by [@​tjkuson](https://togithub.com/tjkuson) in [https://github.com/charliermarsh/ruff/pull/4706](https://togithub.com/charliermarsh/ruff/pull/4706) - \[`pylint`] Add autofix for `PLR1701` (repeated-isinstance-calls) by [@​dhruvmanila](https://togithub.com/dhruvmanila) in [https://github.com/charliermarsh/ruff/pull/4792](https://togithub.com/charliermarsh/ruff/pull/4792) - \[`pylint`] Implement Pylint's `yield-inside-async-function` rule (`PLE1700`) by [@​chanman3388](https://togithub.com/chanman3388) in [https://github.com/charliermarsh/ruff/pull/4668](https://togithub.com/charliermarsh/ruff/pull/4668) - \[`pylint`] implement E307 for pylint invalid str return type by [@​Ryang20718](https://togithub.com/Ryang20718) in [https://github.com/charliermarsh/ruff/pull/4854](https://togithub.com/charliermarsh/ruff/pull/4854) - \[`ruff`] Lint pyproject.toml by [@​konstin](https://togithub.com/konstin) in [https://github.com/charliermarsh/ruff/pull/4496](https://togithub.com/charliermarsh/ruff/pull/4496) - \[`tryceratops`] Ignore error calls with `exc_info` in TRY400 by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4797](https://togithub.com/charliermarsh/ruff/pull/4797) ##### Settings - Add `pyflakes.extend-generics` setting by [@​JonathanPlasse](https://togithub.com/JonathanPlasse) in [https://github.com/charliermarsh/ruff/pull/4677](https://togithub.com/charliermarsh/ruff/pull/4677) ##### Bug Fixes - Fix PLW3301 false positive single argument nested min/max by [@​JonathanPlasse](https://togithub.com/JonathanPlasse) in [https://github.com/charliermarsh/ruff/pull/4683](https://togithub.com/charliermarsh/ruff/pull/4683) - Handle dotted alias imports to check for implicit imports by [@​dhruvmanila](https://togithub.com/dhruvmanila) in [https://github.com/charliermarsh/ruff/pull/4685](https://togithub.com/charliermarsh/ruff/pull/4685) - Flag empty strings in flake8-errmsg rules by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4745](https://togithub.com/charliermarsh/ruff/pull/4745) - Exclude function definition from too-many-statements rule by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4794](https://togithub.com/charliermarsh/ruff/pull/4794) - Preserve quotes in F523 fixer by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4836](https://togithub.com/charliermarsh/ruff/pull/4836) - Fix round-tripping of nested functions by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4875](https://togithub.com/charliermarsh/ruff/pull/4875) - Avoid early-exit in explicit-f-string-type-conversion by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4886](https://togithub.com/charliermarsh/ruff/pull/4886) - Avoid no-op fix for nested with expressions by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4906](https://togithub.com/charliermarsh/ruff/pull/4906) - Fix UP036 auto-fix error by [@​JonathanPlasse](https://togithub.com/JonathanPlasse) in [https://github.com/charliermarsh/ruff/pull/4679](https://togithub.com/charliermarsh/ruff/pull/4679) - Use class name as range for `B024` by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4647](https://togithub.com/charliermarsh/ruff/pull/4647) - Change TODO directive detection to work with multiple pound signs on the same line by [@​evanrittenhouse](https://togithub.com/evanrittenhouse) in [https://github.com/charliermarsh/ruff/pull/4558](https://togithub.com/charliermarsh/ruff/pull/4558) - Allow more immutable funcs for RUF009 by [@​qdegraaf](https://togithub.com/qdegraaf) in [https://github.com/charliermarsh/ruff/pull/4660](https://togithub.com/charliermarsh/ruff/pull/4660) - Avoid using typing-imported symbols for runtime edits by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4649](https://togithub.com/charliermarsh/ruff/pull/4649) - Fix `async for` formatting by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4675](https://togithub.com/charliermarsh/ruff/pull/4675) - Ignore **setattr** in FBT003 by [@​alexfikl](https://togithub.com/alexfikl) in [https://github.com/charliermarsh/ruff/pull/4752](https://togithub.com/charliermarsh/ruff/pull/4752) - Include ImportError in non-fixable try-catch imports by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4793](https://togithub.com/charliermarsh/ruff/pull/4793) - Avoid extra newline between diagnostics in grouped mode by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4776](https://togithub.com/charliermarsh/ruff/pull/4776) - Avoid enforcing native-literals rule within nested f-strings by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4488](https://togithub.com/charliermarsh/ruff/pull/4488) - Respect mixed variable assignment in RET504 by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4835](https://togithub.com/charliermarsh/ruff/pull/4835) - Make FLY002 autofix into a constant string instead of an f-string if all `join()` arguments are strings by [@​evanrittenhouse](https://togithub.com/evanrittenhouse) in [https://github.com/charliermarsh/ruff/pull/4834](https://togithub.com/charliermarsh/ruff/pull/4834) - Add some exceptions for FBT003 ([#​3247](https://togithub.com/charliermarsh/ruff/issues/3247)) by [@​allisonkarlitskaya](https://togithub.com/allisonkarlitskaya) in [https://github.com/charliermarsh/ruff/pull/4867](https://togithub.com/charliermarsh/ruff/pull/4867) - Avoid running RUF100 rules when code contains syntax errors by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4869](https://togithub.com/charliermarsh/ruff/pull/4869) - Avoid index-out-of-bands panic for positional placeholders by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4872](https://togithub.com/charliermarsh/ruff/pull/4872) - Remove destructive fixes for F523 by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4883](https://togithub.com/charliermarsh/ruff/pull/4883) - Respect shadowed exports in `__all__` by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4885](https://togithub.com/charliermarsh/ruff/pull/4885) - Track symbol deletions separately from bindings by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4888](https://togithub.com/charliermarsh/ruff/pull/4888) - Change fixable_set to include RuleSelector::All/Nursery by [@​evanrittenhouse](https://togithub.com/evanrittenhouse) in [https://github.com/charliermarsh/ruff/pull/4852](https://togithub.com/charliermarsh/ruff/pull/4852) #### New Contributors - [@​bersbersbers](https://togithub.com/bersbersbers) made their first contribution in [https://github.com/charliermarsh/ruff/pull/4644](https://togithub.com/charliermarsh/ruff/pull/4644) - [@​jlaneve](https://togithub.com/jlaneve) made their first contribution in [https://github.com/charliermarsh/ruff/pull/4690](https://togithub.com/charliermarsh/ruff/pull/4690) - [@​suharnikov](https://togithub.com/suharnikov) made their first contribution in [https://github.com/charliermarsh/ruff/pull/4678](https://togithub.com/charliermarsh/ruff/pull/4678) - [@​alexfikl](https://togithub.com/alexfikl) made their first contribution in [https://github.com/charliermarsh/ruff/pull/4752](https://togithub.com/charliermarsh/ruff/pull/4752) - [@​allisonkarlitskaya](https://togithub.com/allisonkarlitskaya) made their first contribution in [https://github.com/charliermarsh/ruff/pull/4867](https://togithub.com/charliermarsh/ruff/pull/4867) - [@​Ryang20718](https://togithub.com/Ryang20718) made their first contribution in [https://github.com/charliermarsh/ruff/pull/4854](https://togithub.com/charliermarsh/ruff/pull/4854) - [@​addisoncrump](https://togithub.com/addisoncrump) made their first contribution in [https://github.com/charliermarsh/ruff/pull/4893](https://togithub.com/charliermarsh/ruff/pull/4893) **Full Changelog**: astral-sh/ruff@v0.0.270...v0.0.271 </details> --- ### Configuration 📅 **Schedule**: 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 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/jankatins/pr-workflow-example). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNS4xMTAuMCIsInVwZGF0ZWRJblZlciI6IjM1LjExMC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->
[![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) ([changelog](https://togithub.com/charliermarsh/ruff/releases)) | `==0.0.270` -> `==0.0.272` | [![age](https://badges.renovateapi.com/packages/pypi/ruff/0.0.272/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/pypi/ruff/0.0.272/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/pypi/ruff/0.0.272/compatibility-slim/0.0.270)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/pypi/ruff/0.0.272/confidence-slim/0.0.270)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>charliermarsh/ruff</summary> ### [`v0.0.272`](https://togithub.com/astral-sh/ruff/releases/tag/v0.0.272) [Compare Source](https://togithub.com/charliermarsh/ruff/compare/v0.0.271...v0.0.272) <!-- Release notes generated using configuration in .github/release.yml at main --> #### What's Changed ##### Breaking Changes - Move flake8-fixme rules to FIX prefix by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4917](https://togithub.com/charliermarsh/ruff/pull/4917) ##### Rules - \[`flake8-pyi`] Implement PYI050 by [@​density](https://togithub.com/density) in [https://github.com/charliermarsh/ruff/pull/4884](https://togithub.com/charliermarsh/ruff/pull/4884) ##### Bug Fixes - Avoid attributing runtime references to module-level imports by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4942](https://togithub.com/charliermarsh/ruff/pull/4942) - Skip class scopes when resolving nonlocal references by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4943](https://togithub.com/charliermarsh/ruff/pull/4943) - Apply `dict.get` fix before ternary rewrite by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4944](https://togithub.com/charliermarsh/ruff/pull/4944) - Handle implicit string concatenations in conversion-flag rewrites by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4947](https://togithub.com/charliermarsh/ruff/pull/4947) - Make `C413` fix as suggested for `reversed` call by [@​dhruvmanila](https://togithub.com/dhruvmanila) in [https://github.com/charliermarsh/ruff/pull/4891](https://togithub.com/charliermarsh/ruff/pull/4891) - ignore if using infinite iterators in `B905` by [@​kyoto7250](https://togithub.com/kyoto7250) in [https://github.com/charliermarsh/ruff/pull/4914](https://togithub.com/charliermarsh/ruff/pull/4914) **Full Changelog**: astral-sh/ruff@v0.0.271...v0.0.272 ### [`v0.0.271`](https://togithub.com/astral-sh/ruff/releases/tag/v0.0.271) [Compare Source](https://togithub.com/charliermarsh/ruff/compare/v0.0.270...v0.0.271) <!-- Release notes generated using configuration in .github/release.yml at main --> #### What's Changed ##### Rules - Add autofix for flake8-type-checking by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4742](https://togithub.com/charliermarsh/ruff/pull/4742) - \[`airflow`] Add AIR001: task variable name should be same as task_id arg by [@​jlaneve](https://togithub.com/jlaneve) in [https://github.com/charliermarsh/ruff/pull/4687](https://togithub.com/charliermarsh/ruff/pull/4687) - \[`flake8-bandit`] Implement S609, linux_commands_wildcard_injection by [@​scop](https://togithub.com/scop) in [https://github.com/charliermarsh/ruff/pull/4504](https://togithub.com/charliermarsh/ruff/pull/4504) - \[`flake8-bugbear`] Move duplicate-value rule to flake8-bugbear by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4882](https://togithub.com/charliermarsh/ruff/pull/4882) - \[`flake8-fixme`] Implement `flake8_fixme` and refactor `TodoDirective` by [@​evanrittenhouse](https://togithub.com/evanrittenhouse) in [https://github.com/charliermarsh/ruff/pull/4681](https://togithub.com/charliermarsh/ruff/pull/4681) - \[`flake8-future-annotations`] Implement `FA102` by [@​akx](https://togithub.com/akx) in [https://github.com/charliermarsh/ruff/pull/4702](https://togithub.com/charliermarsh/ruff/pull/4702) - \[`flake8-pyi`] Add PYI024 for `flake8-pyi` plugin by [@​qdegraaf](https://togithub.com/qdegraaf) in [https://github.com/charliermarsh/ruff/pull/4756](https://togithub.com/charliermarsh/ruff/pull/4756) - \[`flake8-pyi`] Add PYI034 for `flake8-pyi` plugin by [@​qdegraaf](https://togithub.com/qdegraaf) in [https://github.com/charliermarsh/ruff/pull/4764](https://togithub.com/charliermarsh/ruff/pull/4764) - \[`flake8-pyi`] Add `PYI032` rule with autofix by [@​qdegraaf](https://togithub.com/qdegraaf) in [https://github.com/charliermarsh/ruff/pull/4695](https://togithub.com/charliermarsh/ruff/pull/4695) - \[`flake8-pyi`] Add autofix for PYI010 by [@​qdegraaf](https://togithub.com/qdegraaf) in [https://github.com/charliermarsh/ruff/pull/4634](https://togithub.com/charliermarsh/ruff/pull/4634) - \[`flake8-pyi`] Implement PYI029 by [@​density](https://togithub.com/density) in [https://github.com/charliermarsh/ruff/pull/4851](https://togithub.com/charliermarsh/ruff/pull/4851) - \[`flake8-pyi`] Implement PYI035 by [@​density](https://togithub.com/density) in [https://github.com/charliermarsh/ruff/pull/4820](https://togithub.com/charliermarsh/ruff/pull/4820) - \[`flake8-pyi`] Implement PYI048 for `flake8-pyi` plugin by [@​qdegraaf](https://togithub.com/qdegraaf) in [https://github.com/charliermarsh/ruff/pull/4645](https://togithub.com/charliermarsh/ruff/pull/4645) - \[`flake8-pyi`] Implement PYI053 by [@​density](https://togithub.com/density) in [https://github.com/charliermarsh/ruff/pull/4770](https://togithub.com/charliermarsh/ruff/pull/4770) - \[`flake8-pyi`] Implement PYI054 by [@​density](https://togithub.com/density) in [https://github.com/charliermarsh/ruff/pull/4775](https://togithub.com/charliermarsh/ruff/pull/4775) - \[`flake8-pyi`] Implement `PYI025` by [@​qdegraaf](https://togithub.com/qdegraaf) in [https://github.com/charliermarsh/ruff/pull/4791](https://togithub.com/charliermarsh/ruff/pull/4791) - \[`flake8-pyi`] Implement `PYI045` by [@​density](https://togithub.com/density) in [https://github.com/charliermarsh/ruff/pull/4700](https://togithub.com/charliermarsh/ruff/pull/4700) - \[`pylint`] Add Pylint rule `C0208` (`use-sequence-for-iteration`) as `PLC0208` (`iteration-over-set`) by [@​tjkuson](https://togithub.com/tjkuson) in [https://github.com/charliermarsh/ruff/pull/4706](https://togithub.com/charliermarsh/ruff/pull/4706) - \[`pylint`] Add autofix for `PLR1701` (repeated-isinstance-calls) by [@​dhruvmanila](https://togithub.com/dhruvmanila) in [https://github.com/charliermarsh/ruff/pull/4792](https://togithub.com/charliermarsh/ruff/pull/4792) - \[`pylint`] Implement Pylint's `yield-inside-async-function` rule (`PLE1700`) by [@​chanman3388](https://togithub.com/chanman3388) in [https://github.com/charliermarsh/ruff/pull/4668](https://togithub.com/charliermarsh/ruff/pull/4668) - \[`pylint`] implement E307 for pylint invalid str return type by [@​Ryang20718](https://togithub.com/Ryang20718) in [https://github.com/charliermarsh/ruff/pull/4854](https://togithub.com/charliermarsh/ruff/pull/4854) - \[`ruff`] Lint pyproject.toml by [@​konstin](https://togithub.com/konstin) in [https://github.com/charliermarsh/ruff/pull/4496](https://togithub.com/charliermarsh/ruff/pull/4496) - \[`tryceratops`] Ignore error calls with `exc_info` in TRY400 by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4797](https://togithub.com/charliermarsh/ruff/pull/4797) ##### Settings - Add `pyflakes.extend-generics` setting by [@​JonathanPlasse](https://togithub.com/JonathanPlasse) in [https://github.com/charliermarsh/ruff/pull/4677](https://togithub.com/charliermarsh/ruff/pull/4677) ##### Bug Fixes - Fix PLW3301 false positive single argument nested min/max by [@​JonathanPlasse](https://togithub.com/JonathanPlasse) in [https://github.com/charliermarsh/ruff/pull/4683](https://togithub.com/charliermarsh/ruff/pull/4683) - Handle dotted alias imports to check for implicit imports by [@​dhruvmanila](https://togithub.com/dhruvmanila) in [https://github.com/charliermarsh/ruff/pull/4685](https://togithub.com/charliermarsh/ruff/pull/4685) - Flag empty strings in flake8-errmsg rules by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4745](https://togithub.com/charliermarsh/ruff/pull/4745) - Exclude function definition from too-many-statements rule by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4794](https://togithub.com/charliermarsh/ruff/pull/4794) - Preserve quotes in F523 fixer by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4836](https://togithub.com/charliermarsh/ruff/pull/4836) - Fix round-tripping of nested functions by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4875](https://togithub.com/charliermarsh/ruff/pull/4875) - Avoid early-exit in explicit-f-string-type-conversion by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4886](https://togithub.com/charliermarsh/ruff/pull/4886) - Avoid no-op fix for nested with expressions by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4906](https://togithub.com/charliermarsh/ruff/pull/4906) - Fix UP036 auto-fix error by [@​JonathanPlasse](https://togithub.com/JonathanPlasse) in [https://github.com/charliermarsh/ruff/pull/4679](https://togithub.com/charliermarsh/ruff/pull/4679) - Use class name as range for `B024` by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4647](https://togithub.com/charliermarsh/ruff/pull/4647) - Change TODO directive detection to work with multiple pound signs on the same line by [@​evanrittenhouse](https://togithub.com/evanrittenhouse) in [https://github.com/charliermarsh/ruff/pull/4558](https://togithub.com/charliermarsh/ruff/pull/4558) - Allow more immutable funcs for RUF009 by [@​qdegraaf](https://togithub.com/qdegraaf) in [https://github.com/charliermarsh/ruff/pull/4660](https://togithub.com/charliermarsh/ruff/pull/4660) - Avoid using typing-imported symbols for runtime edits by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4649](https://togithub.com/charliermarsh/ruff/pull/4649) - Fix `async for` formatting by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4675](https://togithub.com/charliermarsh/ruff/pull/4675) - Ignore **setattr** in FBT003 by [@​alexfikl](https://togithub.com/alexfikl) in [https://github.com/charliermarsh/ruff/pull/4752](https://togithub.com/charliermarsh/ruff/pull/4752) - Include ImportError in non-fixable try-catch imports by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4793](https://togithub.com/charliermarsh/ruff/pull/4793) - Avoid extra newline between diagnostics in grouped mode by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4776](https://togithub.com/charliermarsh/ruff/pull/4776) - Avoid enforcing native-literals rule within nested f-strings by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4488](https://togithub.com/charliermarsh/ruff/pull/4488) - Respect mixed variable assignment in RET504 by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4835](https://togithub.com/charliermarsh/ruff/pull/4835) - Make FLY002 autofix into a constant string instead of an f-string if all `join()` arguments are strings by [@​evanrittenhouse](https://togithub.com/evanrittenhouse) in [https://github.com/charliermarsh/ruff/pull/4834](https://togithub.com/charliermarsh/ruff/pull/4834) - Add some exceptions for FBT003 ([#​3247](https://togithub.com/charliermarsh/ruff/issues/3247)) by [@​allisonkarlitskaya](https://togithub.com/allisonkarlitskaya) in [https://github.com/charliermarsh/ruff/pull/4867](https://togithub.com/charliermarsh/ruff/pull/4867) - Avoid running RUF100 rules when code contains syntax errors by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4869](https://togithub.com/charliermarsh/ruff/pull/4869) - Avoid index-out-of-bands panic for positional placeholders by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4872](https://togithub.com/charliermarsh/ruff/pull/4872) - Remove destructive fixes for F523 by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4883](https://togithub.com/charliermarsh/ruff/pull/4883) - Respect shadowed exports in `__all__` by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4885](https://togithub.com/charliermarsh/ruff/pull/4885) - Track symbol deletions separately from bindings by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4888](https://togithub.com/charliermarsh/ruff/pull/4888) - Change fixable_set to include RuleSelector::All/Nursery by [@​evanrittenhouse](https://togithub.com/evanrittenhouse) in [https://github.com/charliermarsh/ruff/pull/4852](https://togithub.com/charliermarsh/ruff/pull/4852) #### New Contributors - [@​bersbersbers](https://togithub.com/bersbersbers) made their first contribution in [https://github.com/charliermarsh/ruff/pull/4644](https://togithub.com/charliermarsh/ruff/pull/4644) - [@​jlaneve](https://togithub.com/jlaneve) made their first contribution in [https://github.com/charliermarsh/ruff/pull/4690](https://togithub.com/charliermarsh/ruff/pull/4690) - [@​suharnikov](https://togithub.com/suharnikov) made their first contribution in [https://github.com/charliermarsh/ruff/pull/4678](https://togithub.com/charliermarsh/ruff/pull/4678) - [@​alexfikl](https://togithub.com/alexfikl) made their first contribution in [https://github.com/charliermarsh/ruff/pull/4752](https://togithub.com/charliermarsh/ruff/pull/4752) - [@​allisonkarlitskaya](https://togithub.com/allisonkarlitskaya) made their first contribution in [https://github.com/charliermarsh/ruff/pull/4867](https://togithub.com/charliermarsh/ruff/pull/4867) - [@​Ryang20718](https://togithub.com/Ryang20718) made their first contribution in [https://github.com/charliermarsh/ruff/pull/4854](https://togithub.com/charliermarsh/ruff/pull/4854) - [@​addisoncrump](https://togithub.com/addisoncrump) made their first contribution in [https://github.com/charliermarsh/ruff/pull/4893](https://togithub.com/charliermarsh/ruff/pull/4893) **Full Changelog**: astral-sh/ruff@v0.0.270...v0.0.271 </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:eyJjcmVhdGVkSW5WZXIiOiIzNS4xMTAuMCIsInVwZGF0ZWRJblZlciI6IjM1LjExMC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9--> 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) ([changelog](https://togithub.com/charliermarsh/ruff/releases)) | `==0.0.270` -> `==0.0.272` | [![age](https://badges.renovateapi.com/packages/pypi/ruff/0.0.272/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/pypi/ruff/0.0.272/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/pypi/ruff/0.0.272/compatibility-slim/0.0.270)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/pypi/ruff/0.0.272/confidence-slim/0.0.270)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>charliermarsh/ruff</summary> ### [`v0.0.272`](https://togithub.com/astral-sh/ruff/releases/tag/v0.0.272) [Compare Source](https://togithub.com/charliermarsh/ruff/compare/v0.0.271...v0.0.272) <!-- Release notes generated using configuration in .github/release.yml at main --> #### What's Changed ##### Breaking Changes - Move flake8-fixme rules to FIX prefix by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4917](https://togithub.com/charliermarsh/ruff/pull/4917) ##### Rules - \[`flake8-pyi`] Implement PYI050 by [@​density](https://togithub.com/density) in [https://github.com/charliermarsh/ruff/pull/4884](https://togithub.com/charliermarsh/ruff/pull/4884) ##### Bug Fixes - Avoid attributing runtime references to module-level imports by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4942](https://togithub.com/charliermarsh/ruff/pull/4942) - Skip class scopes when resolving nonlocal references by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4943](https://togithub.com/charliermarsh/ruff/pull/4943) - Apply `dict.get` fix before ternary rewrite by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4944](https://togithub.com/charliermarsh/ruff/pull/4944) - Handle implicit string concatenations in conversion-flag rewrites by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4947](https://togithub.com/charliermarsh/ruff/pull/4947) - Make `C413` fix as suggested for `reversed` call by [@​dhruvmanila](https://togithub.com/dhruvmanila) in [https://github.com/charliermarsh/ruff/pull/4891](https://togithub.com/charliermarsh/ruff/pull/4891) - ignore if using infinite iterators in `B905` by [@​kyoto7250](https://togithub.com/kyoto7250) in [https://github.com/charliermarsh/ruff/pull/4914](https://togithub.com/charliermarsh/ruff/pull/4914) **Full Changelog**: astral-sh/ruff@v0.0.271...v0.0.272 ### [`v0.0.271`](https://togithub.com/astral-sh/ruff/releases/tag/v0.0.271) [Compare Source](https://togithub.com/charliermarsh/ruff/compare/v0.0.270...v0.0.271) <!-- Release notes generated using configuration in .github/release.yml at main --> #### What's Changed ##### Rules - Add autofix for flake8-type-checking by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4742](https://togithub.com/charliermarsh/ruff/pull/4742) - \[`airflow`] Add AIR001: task variable name should be same as task_id arg by [@​jlaneve](https://togithub.com/jlaneve) in [https://github.com/charliermarsh/ruff/pull/4687](https://togithub.com/charliermarsh/ruff/pull/4687) - \[`flake8-bandit`] Implement S609, linux_commands_wildcard_injection by [@​scop](https://togithub.com/scop) in [https://github.com/charliermarsh/ruff/pull/4504](https://togithub.com/charliermarsh/ruff/pull/4504) - \[`flake8-bugbear`] Move duplicate-value rule to flake8-bugbear by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4882](https://togithub.com/charliermarsh/ruff/pull/4882) - \[`flake8-fixme`] Implement `flake8_fixme` and refactor `TodoDirective` by [@​evanrittenhouse](https://togithub.com/evanrittenhouse) in [https://github.com/charliermarsh/ruff/pull/4681](https://togithub.com/charliermarsh/ruff/pull/4681) - \[`flake8-future-annotations`] Implement `FA102` by [@​akx](https://togithub.com/akx) in [https://github.com/charliermarsh/ruff/pull/4702](https://togithub.com/charliermarsh/ruff/pull/4702) - \[`flake8-pyi`] Add PYI024 for `flake8-pyi` plugin by [@​qdegraaf](https://togithub.com/qdegraaf) in [https://github.com/charliermarsh/ruff/pull/4756](https://togithub.com/charliermarsh/ruff/pull/4756) - \[`flake8-pyi`] Add PYI034 for `flake8-pyi` plugin by [@​qdegraaf](https://togithub.com/qdegraaf) in [https://github.com/charliermarsh/ruff/pull/4764](https://togithub.com/charliermarsh/ruff/pull/4764) - \[`flake8-pyi`] Add `PYI032` rule with autofix by [@​qdegraaf](https://togithub.com/qdegraaf) in [https://github.com/charliermarsh/ruff/pull/4695](https://togithub.com/charliermarsh/ruff/pull/4695) - \[`flake8-pyi`] Add autofix for PYI010 by [@​qdegraaf](https://togithub.com/qdegraaf) in [https://github.com/charliermarsh/ruff/pull/4634](https://togithub.com/charliermarsh/ruff/pull/4634) - \[`flake8-pyi`] Implement PYI029 by [@​density](https://togithub.com/density) in [https://github.com/charliermarsh/ruff/pull/4851](https://togithub.com/charliermarsh/ruff/pull/4851) - \[`flake8-pyi`] Implement PYI035 by [@​density](https://togithub.com/density) in [https://github.com/charliermarsh/ruff/pull/4820](https://togithub.com/charliermarsh/ruff/pull/4820) - \[`flake8-pyi`] Implement PYI048 for `flake8-pyi` plugin by [@​qdegraaf](https://togithub.com/qdegraaf) in [https://github.com/charliermarsh/ruff/pull/4645](https://togithub.com/charliermarsh/ruff/pull/4645) - \[`flake8-pyi`] Implement PYI053 by [@​density](https://togithub.com/density) in [https://github.com/charliermarsh/ruff/pull/4770](https://togithub.com/charliermarsh/ruff/pull/4770) - \[`flake8-pyi`] Implement PYI054 by [@​density](https://togithub.com/density) in [https://github.com/charliermarsh/ruff/pull/4775](https://togithub.com/charliermarsh/ruff/pull/4775) - \[`flake8-pyi`] Implement `PYI025` by [@​qdegraaf](https://togithub.com/qdegraaf) in [https://github.com/charliermarsh/ruff/pull/4791](https://togithub.com/charliermarsh/ruff/pull/4791) - \[`flake8-pyi`] Implement `PYI045` by [@​density](https://togithub.com/density) in [https://github.com/charliermarsh/ruff/pull/4700](https://togithub.com/charliermarsh/ruff/pull/4700) - \[`pylint`] Add Pylint rule `C0208` (`use-sequence-for-iteration`) as `PLC0208` (`iteration-over-set`) by [@​tjkuson](https://togithub.com/tjkuson) in [https://github.com/charliermarsh/ruff/pull/4706](https://togithub.com/charliermarsh/ruff/pull/4706) - \[`pylint`] Add autofix for `PLR1701` (repeated-isinstance-calls) by [@​dhruvmanila](https://togithub.com/dhruvmanila) in [https://github.com/charliermarsh/ruff/pull/4792](https://togithub.com/charliermarsh/ruff/pull/4792) - \[`pylint`] Implement Pylint's `yield-inside-async-function` rule (`PLE1700`) by [@​chanman3388](https://togithub.com/chanman3388) in [https://github.com/charliermarsh/ruff/pull/4668](https://togithub.com/charliermarsh/ruff/pull/4668) - \[`pylint`] implement E307 for pylint invalid str return type by [@​Ryang20718](https://togithub.com/Ryang20718) in [https://github.com/charliermarsh/ruff/pull/4854](https://togithub.com/charliermarsh/ruff/pull/4854) - \[`ruff`] Lint pyproject.toml by [@​konstin](https://togithub.com/konstin) in [https://github.com/charliermarsh/ruff/pull/4496](https://togithub.com/charliermarsh/ruff/pull/4496) - \[`tryceratops`] Ignore error calls with `exc_info` in TRY400 by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4797](https://togithub.com/charliermarsh/ruff/pull/4797) ##### Settings - Add `pyflakes.extend-generics` setting by [@​JonathanPlasse](https://togithub.com/JonathanPlasse) in [https://github.com/charliermarsh/ruff/pull/4677](https://togithub.com/charliermarsh/ruff/pull/4677) ##### Bug Fixes - Fix PLW3301 false positive single argument nested min/max by [@​JonathanPlasse](https://togithub.com/JonathanPlasse) in [https://github.com/charliermarsh/ruff/pull/4683](https://togithub.com/charliermarsh/ruff/pull/4683) - Handle dotted alias imports to check for implicit imports by [@​dhruvmanila](https://togithub.com/dhruvmanila) in [https://github.com/charliermarsh/ruff/pull/4685](https://togithub.com/charliermarsh/ruff/pull/4685) - Flag empty strings in flake8-errmsg rules by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4745](https://togithub.com/charliermarsh/ruff/pull/4745) - Exclude function definition from too-many-statements rule by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4794](https://togithub.com/charliermarsh/ruff/pull/4794) - Preserve quotes in F523 fixer by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4836](https://togithub.com/charliermarsh/ruff/pull/4836) - Fix round-tripping of nested functions by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4875](https://togithub.com/charliermarsh/ruff/pull/4875) - Avoid early-exit in explicit-f-string-type-conversion by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4886](https://togithub.com/charliermarsh/ruff/pull/4886) - Avoid no-op fix for nested with expressions by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4906](https://togithub.com/charliermarsh/ruff/pull/4906) - Fix UP036 auto-fix error by [@​JonathanPlasse](https://togithub.com/JonathanPlasse) in [https://github.com/charliermarsh/ruff/pull/4679](https://togithub.com/charliermarsh/ruff/pull/4679) - Use class name as range for `B024` by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4647](https://togithub.com/charliermarsh/ruff/pull/4647) - Change TODO directive detection to work with multiple pound signs on the same line by [@​evanrittenhouse](https://togithub.com/evanrittenhouse) in [https://github.com/charliermarsh/ruff/pull/4558](https://togithub.com/charliermarsh/ruff/pull/4558) - Allow more immutable funcs for RUF009 by [@​qdegraaf](https://togithub.com/qdegraaf) in [https://github.com/charliermarsh/ruff/pull/4660](https://togithub.com/charliermarsh/ruff/pull/4660) - Avoid using typing-imported symbols for runtime edits by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4649](https://togithub.com/charliermarsh/ruff/pull/4649) - Fix `async for` formatting by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4675](https://togithub.com/charliermarsh/ruff/pull/4675) - Ignore **setattr** in FBT003 by [@​alexfikl](https://togithub.com/alexfikl) in [https://github.com/charliermarsh/ruff/pull/4752](https://togithub.com/charliermarsh/ruff/pull/4752) - Include ImportError in non-fixable try-catch imports by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4793](https://togithub.com/charliermarsh/ruff/pull/4793) - Avoid extra newline between diagnostics in grouped mode by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4776](https://togithub.com/charliermarsh/ruff/pull/4776) - Avoid enforcing native-literals rule within nested f-strings by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4488](https://togithub.com/charliermarsh/ruff/pull/4488) - Respect mixed variable assignment in RET504 by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4835](https://togithub.com/charliermarsh/ruff/pull/4835) - Make FLY002 autofix into a constant string instead of an f-string if all `join()` arguments are strings by [@​evanrittenhouse](https://togithub.com/evanrittenhouse) in [https://github.com/charliermarsh/ruff/pull/4834](https://togithub.com/charliermarsh/ruff/pull/4834) - Add some exceptions for FBT003 ([#​3247](https://togithub.com/charliermarsh/ruff/issues/3247)) by [@​allisonkarlitskaya](https://togithub.com/allisonkarlitskaya) in [https://github.com/charliermarsh/ruff/pull/4867](https://togithub.com/charliermarsh/ruff/pull/4867) - Avoid running RUF100 rules when code contains syntax errors by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4869](https://togithub.com/charliermarsh/ruff/pull/4869) - Avoid index-out-of-bands panic for positional placeholders by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4872](https://togithub.com/charliermarsh/ruff/pull/4872) - Remove destructive fixes for F523 by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4883](https://togithub.com/charliermarsh/ruff/pull/4883) - Respect shadowed exports in `__all__` by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4885](https://togithub.com/charliermarsh/ruff/pull/4885) - Track symbol deletions separately from bindings by [@​charliermarsh](https://togithub.com/charliermarsh) in [https://github.com/charliermarsh/ruff/pull/4888](https://togithub.com/charliermarsh/ruff/pull/4888) - Change fixable_set to include RuleSelector::All/Nursery by [@​evanrittenhouse](https://togithub.com/evanrittenhouse) in [https://github.com/charliermarsh/ruff/pull/4852](https://togithub.com/charliermarsh/ruff/pull/4852) #### New Contributors - [@​bersbersbers](https://togithub.com/bersbersbers) made their first contribution in [https://github.com/charliermarsh/ruff/pull/4644](https://togithub.com/charliermarsh/ruff/pull/4644) - [@​jlaneve](https://togithub.com/jlaneve) made their first contribution in [https://github.com/charliermarsh/ruff/pull/4690](https://togithub.com/charliermarsh/ruff/pull/4690) - [@​suharnikov](https://togithub.com/suharnikov) made their first contribution in [https://github.com/charliermarsh/ruff/pull/4678](https://togithub.com/charliermarsh/ruff/pull/4678) - [@​alexfikl](https://togithub.com/alexfikl) made their first contribution in [https://github.com/charliermarsh/ruff/pull/4752](https://togithub.com/charliermarsh/ruff/pull/4752) - [@​allisonkarlitskaya](https://togithub.com/allisonkarlitskaya) made their first contribution in [https://github.com/charliermarsh/ruff/pull/4867](https://togithub.com/charliermarsh/ruff/pull/4867) - [@​Ryang20718](https://togithub.com/Ryang20718) made their first contribution in [https://github.com/charliermarsh/ruff/pull/4854](https://togithub.com/charliermarsh/ruff/pull/4854) - [@​addisoncrump](https://togithub.com/addisoncrump) made their first contribution in [https://github.com/charliermarsh/ruff/pull/4893](https://togithub.com/charliermarsh/ruff/pull/4893) **Full Changelog**: astral-sh/ruff@v0.0.270...v0.0.271 </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/pyrainbird). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNS4xMTAuMCIsInVwZGF0ZWRJblZlciI6IjM1LjExMC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Summary
This PR enables autofix for the most useful flake8-type-checking rules -- those that detect imports that are only used in type-checking contexts, and suggests that users move them into
if TYPE_CHECKING:
blocks. In the end, it's not a ton of code (most of this diff is tests + snapshots), but there's a large chain of changes that were required to support this.The general flow is as follows. When we detect a typing-only import, we generate a new fixes, which consists of up to three edits: (1) an edit to remove the imported member from the import statement; (2) an edit to import
TYPE_CHECKING
fromtyping
; and (3) an edit to add the imported member to theTYPE_CHECKING
block, which could also require creating an entirely newTYPE_CHECKING
block.For example, given:
We need to make all three of those changes, in order to get to:
The exact edit depends on the ordering and existence of the
typing
import, and/or theif TYPE_CHECKING
blocks, and their positions relative to the first runtime usage -- but in typical usages, the edit looks something like the above.Closes #2329.
Test Plan
cargo run -p ruff_cli -- check ../airflow --select TCH -n --fix
; verified by eye that the edits looked reasonable and correct, and that there were no panics.cargo run -p ruff_cli -- check ../rotki --select TCH -n --fix
; verified by eye that the edits looked reasonable and correct, and that there were no panics.cargo run -p ruff_cli -- check ../<project> --select TCH -n --fix
over a few of my personal projects for which I havemypy
setup, and verified thatmypy
passed without error before and after.