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
Flag, but don't fix, unused imports in ModuleNotFoundError
blocks
#3658
Conversation
ModuleNotFoundError
blocks
\cc @henryiii |
PR Check ResultsBenchmarkLinux
Windows
|
@@ -13,6 +13,7 @@ use crate::checkers::ast::Checker; | |||
pub struct UnusedImport { | |||
pub name: String, | |||
pub ignore_init: bool, | |||
pub in_except_handler: bool, |
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.
Not sure if I'm blind but where do we initialize in_except_handler
?
Is it possible for both ignore_init
and in_except_handler
to be true? If not, how about we create an enum instead UnusedImportKind
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.
It's in ast/mod.rs
, which GitHub collapsed 🙈
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've definitely written that kind that of check and not realized that importlib.util.find_spec
is a thing
143d993
to
1e255ad
Compare
type BindingContext<'a, 'b> = ( | ||
&'a RefEquality<'b, Stmt>, | ||
Option<&'a RefEquality<'b, Stmt>>, | ||
Exceptions, | ||
); |
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: Can we add some documentation about the different tuple fields or maybe it's best to create a struct at this point with named fields to improve readability
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.
Shoot, this got auto-merged. Yes I'll do a pass on this.
[![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 [astral-sh/ruff#3605 - \[`pylint`]: Implement `assert-on-string-literal` (`W0129`) by [@​latonis](https://togithub.com/latonis) in [astral-sh/ruff#3610 - \[`pyupgrade`] Convert single-argument %-style format calls by [@​charliermarsh](https://togithub.com/charliermarsh) in [astral-sh/ruff#3600 - \[`pyupgrade`] Flag PEP 585 and PEP 604 violations in quoted annotations by [@​charliermarsh](https://togithub.com/charliermarsh) in [astral-sh/ruff#3593 - \[`pyupgrade`] Enable autofix for annotations within 'simple' string literals by [@​charliermarsh](https://togithub.com/charliermarsh) in [astral-sh/ruff#3657 - \[`pyflakes`] Add autofix functionality for `F523` ([#​3613](https://togithub.com/charliermarsh/ruff/issues/3613)) by [@​JonathanPlasse](https://togithub.com/JonathanPlasse) in [astral-sh/ruff#3613 - \[`flake8-bandit`]: Implement deny-list rules for suspicious member calls by [@​colin99d](https://togithub.com/colin99d) in [astral-sh/ruff#3239 - \[`flake8-annotations`] Add autofix for `ANN204` with magic methods by [@​JonathanPlasse](https://togithub.com/JonathanPlasse) in [astral-sh/ruff#3633 - \[`pylint`] Implement `binary-op-exception` (`PLW0711`) by [@​latonis](https://togithub.com/latonis) in [astral-sh/ruff#3639 - \[`flake8-django`]: Implement rule DJ012 by [@​dhruvmanila](https://togithub.com/dhruvmanila) in [astral-sh/ruff#3659 ##### Bug Fixes - Check exclusions prior to resolving `pyproject.toml` files by [@​charliermarsh](https://togithub.com/charliermarsh) in [astral-sh/ruff#3588 - Fix D417 false positive by [@​JonathanPlasse](https://togithub.com/JonathanPlasse) in [astral-sh/ruff#3596 - Avoid removing comment hash for noqa's with trailing content by [@​charliermarsh](https://togithub.com/charliermarsh) in [astral-sh/ruff#3589 - Avoid panics for implicitly-concatenated docstrings by [@​charliermarsh](https://togithub.com/charliermarsh) in [astral-sh/ruff#3584 - Fix infinite loop due to rules `D207` & `W605` by [@​vlindhol](https://togithub.com/vlindhol) in [astral-sh/ruff#3609 - Avoid trimming escaped whitespace in D210 by [@​charliermarsh](https://togithub.com/charliermarsh) in [astral-sh/ruff#3635 - Handle `UP032` autofix with adjacent keywords by [@​JonathanPlasse](https://togithub.com/JonathanPlasse) in [astral-sh/ruff#3636 - Consider same-site fixes to be overlapping by [@​charliermarsh](https://togithub.com/charliermarsh) in [astral-sh/ruff#3638 - Avoid `RUF007` fixes for more than two arguments by [@​JonathanPlasse](https://togithub.com/JonathanPlasse) in [astral-sh/ruff#3654 - Allow `pairwise` diagnostics for `zip(..., strict=True)` by [@​charliermarsh](https://togithub.com/charliermarsh) in [astral-sh/ruff#3669 - isort: fix bad interaction between `force-sort-within-sections` and `force-to-top` by [@​bluetech](https://togithub.com/bluetech) in [astral-sh/ruff#3645 - Gracefully handle lint panics by [@​MichaReiser](https://togithub.com/MichaReiser) in [astral-sh/ruff#3509 - Fix TRY300 false positive by [@​JonathanPlasse](https://togithub.com/JonathanPlasse) in [astral-sh/ruff#3634 - Avoid raising PEP 604 errors with forward-referenced members by [@​charliermarsh](https://togithub.com/charliermarsh) in [astral-sh/ruff#3640 - Avoid attempting infinite `open` fix with re-bound builtin by [@​charliermarsh](https://togithub.com/charliermarsh) in [astral-sh/ruff#3650 - Check indentation level when executing E231 by [@​kyoto7250](https://togithub.com/kyoto7250) in [astral-sh/ruff#3668 - Flag, but don't fix, unused imports (`F401`) in `ModuleNotFoundError` blocks by [@​charliermarsh](https://togithub.com/charliermarsh) in [astral-sh/ruff#3658 #### New Contributors - [@​Rogdham](https://togithub.com/Rogdham) made their first contribution in [astral-sh/ruff#3607 - [@​vlindhol](https://togithub.com/vlindhol) made their first contribution in [astral-sh/ruff#3609 - [@​dhruvmanila](https://togithub.com/dhruvmanila) made their first contribution in [astral-sh/ruff#3605 - [@​luke396](https://togithub.com/luke396) made their first contribution in [astral-sh/ruff#3604 - [@​fuziontech](https://togithub.com/fuziontech) made their first contribution in [astral-sh/ruff#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 <bot@renovateapp.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) | `==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 [astral-sh/ruff#3685 - Respect all rule-exemption sources when suppressing parser errors by [@​charliermarsh](https://togithub.com/charliermarsh) in [astral-sh/ruff#3665 - Avoid nested loops in `missing_whitespace` by [@​charliermarsh](https://togithub.com/charliermarsh) in [astral-sh/ruff#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 [astral-sh/ruff#3605 - \[`pylint`]: Implement `assert-on-string-literal` (`W0129`) by [@​latonis](https://togithub.com/latonis) in [astral-sh/ruff#3610 - \[`pyupgrade`] Convert single-argument %-style format calls by [@​charliermarsh](https://togithub.com/charliermarsh) in [astral-sh/ruff#3600 - \[`pyupgrade`] Flag PEP 585 and PEP 604 violations in quoted annotations by [@​charliermarsh](https://togithub.com/charliermarsh) in [astral-sh/ruff#3593 - \[`pyupgrade`] Enable autofix for annotations within 'simple' string literals by [@​charliermarsh](https://togithub.com/charliermarsh) in [astral-sh/ruff#3657 - \[`pyflakes`] Add autofix functionality for `F523` ([#​3613](https://togithub.com/charliermarsh/ruff/issues/3613)) by [@​JonathanPlasse](https://togithub.com/JonathanPlasse) in [astral-sh/ruff#3613 - \[`flake8-bandit`]: Implement deny-list rules for suspicious member calls by [@​colin99d](https://togithub.com/colin99d) in [astral-sh/ruff#3239 - \[`flake8-annotations`] Add autofix for `ANN204` with magic methods by [@​JonathanPlasse](https://togithub.com/JonathanPlasse) in [astral-sh/ruff#3633 - \[`pylint`] Implement `binary-op-exception` (`PLW0711`) by [@​latonis](https://togithub.com/latonis) in [astral-sh/ruff#3639 - \[`flake8-django`]: Implement rule DJ012 by [@​dhruvmanila](https://togithub.com/dhruvmanila) in [astral-sh/ruff#3659 ##### Bug Fixes - Check exclusions prior to resolving `pyproject.toml` files by [@​charliermarsh](https://togithub.com/charliermarsh) in [astral-sh/ruff#3588 - Fix D417 false positive by [@​JonathanPlasse](https://togithub.com/JonathanPlasse) in [astral-sh/ruff#3596 - Avoid removing comment hash for noqa's with trailing content by [@​charliermarsh](https://togithub.com/charliermarsh) in [astral-sh/ruff#3589 - Avoid panics for implicitly-concatenated docstrings by [@​charliermarsh](https://togithub.com/charliermarsh) in [astral-sh/ruff#3584 - Fix infinite loop due to rules `D207` & `W605` by [@​vlindhol](https://togithub.com/vlindhol) in [astral-sh/ruff#3609 - Avoid trimming escaped whitespace in D210 by [@​charliermarsh](https://togithub.com/charliermarsh) in [astral-sh/ruff#3635 - Handle `UP032` autofix with adjacent keywords by [@​JonathanPlasse](https://togithub.com/JonathanPlasse) in [astral-sh/ruff#3636 - Consider same-site fixes to be overlapping by [@​charliermarsh](https://togithub.com/charliermarsh) in [astral-sh/ruff#3638 - Avoid `RUF007` fixes for more than two arguments by [@​JonathanPlasse](https://togithub.com/JonathanPlasse) in [astral-sh/ruff#3654 - Allow `pairwise` diagnostics for `zip(..., strict=True)` by [@​charliermarsh](https://togithub.com/charliermarsh) in [astral-sh/ruff#3669 - isort: fix bad interaction between `force-sort-within-sections` and `force-to-top` by [@​bluetech](https://togithub.com/bluetech) in [astral-sh/ruff#3645 - Gracefully handle lint panics by [@​MichaReiser](https://togithub.com/MichaReiser) in [astral-sh/ruff#3509 - Fix TRY300 false positive by [@​JonathanPlasse](https://togithub.com/JonathanPlasse) in [astral-sh/ruff#3634 - Avoid raising PEP 604 errors with forward-referenced members by [@​charliermarsh](https://togithub.com/charliermarsh) in [astral-sh/ruff#3640 - Avoid attempting infinite `open` fix with re-bound builtin by [@​charliermarsh](https://togithub.com/charliermarsh) in [astral-sh/ruff#3650 - Check indentation level when executing E231 by [@​kyoto7250](https://togithub.com/kyoto7250) in [astral-sh/ruff#3668 - Flag, but don't fix, unused imports (`F401`) in `ModuleNotFoundError` blocks by [@​charliermarsh](https://togithub.com/charliermarsh) in [astral-sh/ruff#3658 #### New Contributors - [@​Rogdham](https://togithub.com/Rogdham) made their first contribution in [astral-sh/ruff#3607 - [@​vlindhol](https://togithub.com/vlindhol) made their first contribution in [astral-sh/ruff#3609 - [@​dhruvmanila](https://togithub.com/dhruvmanila) made their first contribution in [astral-sh/ruff#3605 - [@​luke396](https://togithub.com/luke396) made their first contribution in [astral-sh/ruff#3604 - [@​fuziontech](https://togithub.com/fuziontech) made their first contribution in [astral-sh/ruff#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>
Summary
This PR acts on the resolved solution from #3378. In #3288, we changed Ruff to avoid flagging unused import in
ModuleNotFoundError
blocks, like:This is a common pattern used to detect module availability, and removing those imports tends to break code.
However, these imports are unused, and it's confusing that Ruff doesn't flag them. Further, this isn't the recommended way to test for module availability -- we have
importlib
APIs for that.So this PR modifies the logic to (1) flag unused imports in blocks like the above, but (2) avoid autofixing them, and (3) using a dedicated message to point the user to those
importlib
APIs.Closes #3378.