Skip to content

flake8-annotations: add ignore-fully-untyped#2128

Merged
charliermarsh merged 5 commits intoastral-sh:mainfrom
akx:ann-allow-untyped-return-if-untyped
Feb 7, 2023
Merged

flake8-annotations: add ignore-fully-untyped#2128
charliermarsh merged 5 commits intoastral-sh:mainfrom
akx:ann-allow-untyped-return-if-untyped

Conversation

@akx
Copy link
Contributor

@akx akx commented Jan 24, 2023

This PR adds a configuration option to inhibit ANN* violations for functions that have no other annotations either, for easier gradual typing of a large codebase (looking at you, Home Assistant 😁).

@charliermarsh
Copy link
Member

Would functions to which this applies not trigger ANN100 et al for each untyped argument? What's the configuration that would make this useful? Suppressing ANN100 plus enabling this to allow fully untyped functions + require return types for any partially typed functions?

@akx
Copy link
Contributor Author

akx commented Jan 24, 2023

Replying to both comments here 😄

Generally, we only need to add these if the source plugin defines them. But I don't think this option exists in flake8-annotations, does it?

I don't think it does, that's right, but I feel this is an useful check to make ANN2* less blanket-y. See below...

What's the configuration that would make this useful?

I should have probably mentioned this in the PR proper, but this is meant as a replacement for this pylint plugin in Home Assistant: ('__init__ should have explicit return type "None"' – Used when __init__ has all arguments typed but doesn't have return type declared).

In particular, enabling ANN204 on Home Assistant's repo right now yields oodles (1108 in particular) of these warnings for files that haven't been fully strictly typed yet; this option makes that number, well, 1. 😂

(The other (bad, cumbersome) option I see would be to allow setting per-file-select or similar, and configure it to align with https://github.com/home-assistant/core/blob/dev/.strict-typing.)

@akx akx force-pushed the ann-allow-untyped-return-if-untyped branch from a665839 to 5727594 Compare January 24, 2023 14:50
@charliermarsh
Copy link
Member

Ah, okay, yeah, I see. That makes sense.

(In practice, this would be coupled with disabling the ANN00-level rules, right? Again, just confirming my understanding.)

@akx
Copy link
Contributor Author

akx commented Jan 24, 2023

(In practice, this would be coupled with disabling the ANN00-level rules, right? Again, just confirming my understanding.)

Yep, my idea is to enable just ANN204 with this configuration for now to emulate what the pylint plugin does.

@charliermarsh
Copy link
Member

I wonder if this should be made into a more general setting: if a definition doesn't have any types, suppress all ANN rules. That way, you wouldn't need to turn off the ANN00* rules. But they would get flagged if you had a return type, but not argument types.

@akx
Copy link
Contributor Author

akx commented Jan 27, 2023

@charliermarsh Yeah, that sounds good too. tool.ruff.flake8-annotations.all-or-nothing = true? 😁

@charliermarsh
Copy link
Member

ignore-fully-untyped?

Copy link
Member

@charliermarsh charliermarsh left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(Just requesting changes to help me manage my queue, no rush.)

@akx akx force-pushed the ann-allow-untyped-return-if-untyped branch 2 times, most recently from 12b445e to 1fef299 Compare February 2, 2023 11:53
@akx akx changed the title flake8-annotations: add allow_untyped_return_if_untyped flake8-annotations: add allow-untyped-return-if-untyped & ignore-fully-untyped Feb 2, 2023
@akx akx requested a review from charliermarsh February 2, 2023 12:06
@akx akx force-pushed the ann-allow-untyped-return-if-untyped branch from 1fef299 to b7e8121 Compare February 2, 2023 20:21
@akx akx changed the title flake8-annotations: add allow-untyped-return-if-untyped & ignore-fully-untyped flake8-annotations: add ignore-fully-untyped Feb 2, 2023
@akx akx force-pushed the ann-allow-untyped-return-if-untyped branch from b7e8121 to 72e753c Compare February 2, 2023 20:25
@akx akx marked this pull request as draft February 2, 2023 20:25
@akx akx force-pushed the ann-allow-untyped-return-if-untyped branch 2 times, most recently from f51861a to 679983a Compare February 3, 2023 10:17
@akx akx mentioned this pull request Feb 4, 2023
15 tasks
@akx akx force-pushed the ann-allow-untyped-return-if-untyped branch from 679983a to 73d9ac0 Compare February 4, 2023 11:27
@charliermarsh
Copy link
Member

Is this ready for review?

@akx akx force-pushed the ann-allow-untyped-return-if-untyped branch from 73d9ac0 to 12fc824 Compare February 6, 2023 07:25
@akx akx force-pushed the ann-allow-untyped-return-if-untyped branch from 12fc824 to a40ef50 Compare February 7, 2023 14:54
@akx akx force-pushed the ann-allow-untyped-return-if-untyped branch from a40ef50 to 9a52b4a Compare February 7, 2023 15:27
@akx akx marked this pull request as ready for review February 7, 2023 15:35
@akx
Copy link
Contributor Author

akx commented Feb 7, 2023

@charliermarsh Yeah, sorry, it's ready for review now! 😄 I'm not sure why the mypy_init_return snapshot changed though...

@charliermarsh charliermarsh merged commit 2bc16eb into astral-sh:main Feb 7, 2023
@charliermarsh charliermarsh added configuration Related to settings and configuration typing Related to type annotations labels Feb 7, 2023
renovate bot referenced this pull request in ixm-one/pytest-cmake-presets Feb 9, 2023
[![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.243` ->
`^0.0.244` |
[![age](https://badges.renovateapi.com/packages/pypi/ruff/0.0.244/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/pypi/ruff/0.0.244/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/pypi/ruff/0.0.244/compatibility-slim/0.0.243)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/pypi/ruff/0.0.244/confidence-slim/0.0.243)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>charliermarsh/ruff</summary>

###
[`v0.0.244`](https://togithub.com/charliermarsh/ruff/releases/tag/v0.0.244)

[Compare
Source](https://togithub.com/charliermarsh/ruff/compare/v0.0.243...v0.0.244)

<!-- Release notes generated using configuration in .github/release.yml
at main -->

#### What's Changed

##### Rules

- \[`pylint`]: bidirectional-unicode by
[@&#8203;colin99d](https://togithub.com/colin99d) in
[https://github.com/charliermarsh/ruff/pull/2589](https://togithub.com/charliermarsh/ruff/pull/2589)
- Implement whitespace-around-keywords (E271, E272, E273, E274) by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2653](https://togithub.com/charliermarsh/ruff/pull/2653)
- Implement whitespace-before-comment (E261, E262, E265, E266) by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2654](https://togithub.com/charliermarsh/ruff/pull/2654)

##### Settings

- flake8-annotations: add ignore-fully-untyped by
[@&#8203;akx](https://togithub.com/akx) in
[https://github.com/charliermarsh/ruff/pull/2128](https://togithub.com/charliermarsh/ruff/pull/2128)
- Add `--exit-non-zero-on-fix` by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2668](https://togithub.com/charliermarsh/ruff/pull/2668)

##### Documentation

- Derive `explanation` method on Rule struct via rustdoc by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2642](https://togithub.com/charliermarsh/ruff/pull/2642)
- Create per-rule pages and link from README by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2644](https://togithub.com/charliermarsh/ruff/pull/2644)
- Add documentation for flake8-quotes rules by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2650](https://togithub.com/charliermarsh/ruff/pull/2650)
- Disable autofix for flake8-print rules by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2651](https://togithub.com/charliermarsh/ruff/pull/2651)
- Add documentation for eradicate, flake8-import-conventions, and
flake8-no-pep420 by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2652](https://togithub.com/charliermarsh/ruff/pull/2652)
- doc: add documentation for TRY002 by
[@&#8203;nm-remarkable](https://togithub.com/nm-remarkable) in
[https://github.com/charliermarsh/ruff/pull/2655](https://togithub.com/charliermarsh/ruff/pull/2655)

##### Bug Fixes

- Accommodate pos-only arguments when checking self name by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2626](https://togithub.com/charliermarsh/ruff/pull/2626)
- Avoid non-recursion in nested typing function calls by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2627](https://togithub.com/charliermarsh/ruff/pull/2627)
- Avoid no-unnecessary-dict-kwargs errors with reserved keywords by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2628](https://togithub.com/charliermarsh/ruff/pull/2628)
- Treat [@&#8203;staticmethod](https://togithub.com/staticmethod) as
higher-precedence than ABC by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2635](https://togithub.com/charliermarsh/ruff/pull/2635)
- Avoid boolean-trap errors in `__setitem__` by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2636](https://togithub.com/charliermarsh/ruff/pull/2636)
- Skip ternary fixes for yields and awaits by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2637](https://togithub.com/charliermarsh/ruff/pull/2637)
- Ignore all non-`.py` wrt. implicit namespace package by
[@&#8203;scop](https://togithub.com/scop) in
[https://github.com/charliermarsh/ruff/pull/2640](https://togithub.com/charliermarsh/ruff/pull/2640)
- Avoid false-positive in chained type calls by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2663](https://togithub.com/charliermarsh/ruff/pull/2663)
- Treat annotated assignments in class and module scopes as runtime by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2667](https://togithub.com/charliermarsh/ruff/pull/2667)
- Accommodate multiple `@pytest.mark.parametrize` decorators by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2662](https://togithub.com/charliermarsh/ruff/pull/2662)
- Use separate exit codes for fatal errors vs. lint errors by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2670](https://togithub.com/charliermarsh/ruff/pull/2670)

#### New Contributors

- [@&#8203;nm-remarkable](https://togithub.com/nm-remarkable) made their
first contribution in
[https://github.com/charliermarsh/ruff/pull/2655](https://togithub.com/charliermarsh/ruff/pull/2655)

**Full Changelog**:
astral-sh/ruff@v0.0.243...v0.0.244

</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:eyJjcmVhdGVkSW5WZXIiOiIzNC4xMjQuMiIsInVwZGF0ZWRJblZlciI6IjM0LjEyNC4yIn0=-->

Signed-off-by: Renovate Bot <[email protected]>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
emmeowzing referenced this pull request in premiscale/premiscale Feb 20, 2023
[![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.237` ->
`^0.0.247` |
[![age](https://badges.renovateapi.com/packages/pypi/ruff/0.0.247/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/pypi/ruff/0.0.247/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/pypi/ruff/0.0.247/compatibility-slim/0.0.237)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/pypi/ruff/0.0.247/confidence-slim/0.0.237)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>charliermarsh/ruff</summary>

###
[`v0.0.247`](https://togithub.com/charliermarsh/ruff/releases/tag/v0.0.247)

[Compare
Source](https://togithub.com/charliermarsh/ruff/compare/v0.0.246...v0.0.247)

<!-- Release notes generated using configuration in .github/release.yml
at main -->

#### What's Changed

##### Rules

- \[`NPY001`] deprecated type aliases by
[@&#8203;sbrugman](https://togithub.com/sbrugman) in
[https://github.com/charliermarsh/ruff/pull/2810](https://togithub.com/charliermarsh/ruff/pull/2810)
- \[`RUF006`] Implement `asyncio-dangling-task` to track
`asyncio.create_task` calls by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2935](https://togithub.com/charliermarsh/ruff/pull/2935)

##### CLI

- Implement shell autocompletion for rule codes by
[@&#8203;not-my-profile](https://togithub.com/not-my-profile) in
[https://github.com/charliermarsh/ruff/pull/2906](https://togithub.com/charliermarsh/ruff/pull/2906)

##### Bug Fixes

- Handle multiple receiver decorators in receiver-decorator by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2858](https://togithub.com/charliermarsh/ruff/pull/2858)
- Avoid false-positives with multi-byte characters in B005 by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2862](https://togithub.com/charliermarsh/ruff/pull/2862)
- Avoid false-positives for runtime-types in type checking blocks by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2863](https://togithub.com/charliermarsh/ruff/pull/2863)
- Avoid noqa removal upon unhandled syntax errors by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2864](https://togithub.com/charliermarsh/ruff/pull/2864)
- Ignore non-imperative-mood in Google docstring convention by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2900](https://togithub.com/charliermarsh/ruff/pull/2900)
- \[`flake8-tidy-imports`] autofix relative imports by
[@&#8203;sbrugman](https://togithub.com/sbrugman) in
[https://github.com/charliermarsh/ruff/pull/2891](https://togithub.com/charliermarsh/ruff/pull/2891)
- Respect self as positional-only argument in annotation rules by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2927](https://togithub.com/charliermarsh/ruff/pull/2927)
- Apply nullable-model-string-field to all classes by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2928](https://togithub.com/charliermarsh/ruff/pull/2928)
- Deduplicate files provided on the command-line by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2931](https://togithub.com/charliermarsh/ruff/pull/2931)
- Re-show --target-version on CLI interface by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2859](https://togithub.com/charliermarsh/ruff/pull/2859)
- Remove autofix for prefer-type-error by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2880](https://togithub.com/charliermarsh/ruff/pull/2880)
- Avoid unnecessary-else violations in `elif` branches by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2881](https://togithub.com/charliermarsh/ruff/pull/2881)
- Extend B904 to else branches by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2886](https://togithub.com/charliermarsh/ruff/pull/2886)
- Allow private accesses on current class by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2929](https://togithub.com/charliermarsh/ruff/pull/2929)

#### New Contributors

- [@&#8203;Jeremiah-England](https://togithub.com/Jeremiah-England) made
their first contribution in
[https://github.com/charliermarsh/ruff/pull/2884](https://togithub.com/charliermarsh/ruff/pull/2884)
- [@&#8203;Chris-May](https://togithub.com/Chris-May) made their first
contribution in
[https://github.com/charliermarsh/ruff/pull/2896](https://togithub.com/charliermarsh/ruff/pull/2896)
- [@&#8203;simon04](https://togithub.com/simon04) made their first
contribution in
[https://github.com/charliermarsh/ruff/pull/2904](https://togithub.com/charliermarsh/ruff/pull/2904)

**Full Changelog**:
astral-sh/ruff@v0.0.246...v0.0.247

###
[`v0.0.246`](https://togithub.com/charliermarsh/ruff/releases/tag/v0.0.246)

[Compare
Source](https://togithub.com/charliermarsh/ruff/compare/v0.0.245...v0.0.246)

<!-- Release notes generated using configuration in .github/release.yml
at main -->

#### What's Changed

##### Breaking Changes

- Remove multiple-statements-on-one-line-def (E704) by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2773](https://togithub.com/charliermarsh/ruff/pull/2773)

##### Rules

- \[`flake8-pyi`]: add rules for unrecognized platform check (PYI007,
PYI008) by [@&#8203;SigureMo](https://togithub.com/SigureMo) in
[https://github.com/charliermarsh/ruff/pull/2805](https://togithub.com/charliermarsh/ruff/pull/2805)
- \[`flake8-simplify`]: combine-if-conditions by
[@&#8203;colin99d](https://togithub.com/colin99d) in
[https://github.com/charliermarsh/ruff/pull/2823](https://togithub.com/charliermarsh/ruff/pull/2823)
- \[`flake8-django`] Implemented flake8-django plugin rules by
[@&#8203;konysko](https://togithub.com/konysko) in
[https://github.com/charliermarsh/ruff/pull/2586](https://togithub.com/charliermarsh/ruff/pull/2586)

##### CLI

- Implement `config` subcommand by
[@&#8203;not-my-profile](https://togithub.com/not-my-profile) in
[https://github.com/charliermarsh/ruff/pull/2775](https://togithub.com/charliermarsh/ruff/pull/2775)
- Add rendering of rule markdown for terminal output by
[@&#8203;ngnpope](https://togithub.com/ngnpope) in
[https://github.com/charliermarsh/ruff/pull/2747](https://togithub.com/charliermarsh/ruff/pull/2747)
- Add `--show-fixes` flag to show applied fixes by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2707](https://togithub.com/charliermarsh/ruff/pull/2707)

##### Settings

- implemented option lines-between-types for isort by
[@&#8203;PushUpek](https://togithub.com/PushUpek) in
[https://github.com/charliermarsh/ruff/pull/2762](https://togithub.com/charliermarsh/ruff/pull/2762)

##### Autofix

- \[`pyflakes`] Support unused variable removal in multi-assignment
statements by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2786](https://togithub.com/charliermarsh/ruff/pull/2786)
- \[`flake8-comprehensions`] autofix C414 and C417 + bugfix by
[@&#8203;sbrugman](https://togithub.com/sbrugman) in
[https://github.com/charliermarsh/ruff/pull/2693](https://togithub.com/charliermarsh/ruff/pull/2693)
- \[`flake8-comprehensions`] bugfix for C413 autofix by
[@&#8203;sbrugman](https://togithub.com/sbrugman) in
[https://github.com/charliermarsh/ruff/pull/2804](https://togithub.com/charliermarsh/ruff/pull/2804)
- \[`flake8-simplify`] Use smarter inversion for comparison checks by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2831](https://togithub.com/charliermarsh/ruff/pull/2831)
- \[`flake8-comprehensions`] improve autofix for C401, C402 and C417 by
[@&#8203;sbrugman](https://togithub.com/sbrugman) in
[https://github.com/charliermarsh/ruff/pull/2806](https://togithub.com/charliermarsh/ruff/pull/2806)

##### Bug Fixes

- Ignore colon-after-lambda in compound statement rules by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2771](https://togithub.com/charliermarsh/ruff/pull/2771)
- Don't treat all future import accesses as non-runtime by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2774](https://togithub.com/charliermarsh/ruff/pull/2774)
- Avoid treating deferred string annotations as required-at-runtime by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2779](https://togithub.com/charliermarsh/ruff/pull/2779)
- Respect continuations in `noqa` enforcement by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2783](https://togithub.com/charliermarsh/ruff/pull/2783)
- Improve unused-variable autofixes for with statements by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2785](https://togithub.com/charliermarsh/ruff/pull/2785)
- Refactor generator to use Astor-derived precedence levels by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2798](https://togithub.com/charliermarsh/ruff/pull/2798)
- Allow private accesses on super calls by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2815](https://togithub.com/charliermarsh/ruff/pull/2815)
- Allow non-verbose raise when cause is present by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2816](https://togithub.com/charliermarsh/ruff/pull/2816)
- Avoid duplicates in if-with-same-arms by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2827](https://togithub.com/charliermarsh/ruff/pull/2827)
- Include package inference during --add-noqa command by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2832](https://togithub.com/charliermarsh/ruff/pull/2832)
- Allow compound statements of single ellipsis by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2837](https://togithub.com/charliermarsh/ruff/pull/2837)

#### New Contributors

- [@&#8203;trag1c](https://togithub.com/trag1c) made their first
contribution in
[https://github.com/charliermarsh/ruff/pull/2757](https://togithub.com/charliermarsh/ruff/pull/2757)
- [@&#8203;PushUpek](https://togithub.com/PushUpek) made their first
contribution in
[https://github.com/charliermarsh/ruff/pull/2762](https://togithub.com/charliermarsh/ruff/pull/2762)
- [@&#8203;konysko](https://togithub.com/konysko) made their first
contribution in
[https://github.com/charliermarsh/ruff/pull/2586](https://togithub.com/charliermarsh/ruff/pull/2586)
- [@&#8203;SigureMo](https://togithub.com/SigureMo) made their first
contribution in
[https://github.com/charliermarsh/ruff/pull/2805](https://togithub.com/charliermarsh/ruff/pull/2805)

**Full Changelog**:
astral-sh/ruff@v0.0.245...v0.0.246

###
[`v0.0.245`](https://togithub.com/charliermarsh/ruff/releases/tag/v0.0.245)

[Compare
Source](https://togithub.com/charliermarsh/ruff/compare/v0.0.244...v0.0.245)

<!-- Release notes generated using configuration in .github/release.yml
at main -->

#### What's Changed

##### Breaking Changes

- Remove public Rust API by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2709](https://togithub.com/charliermarsh/ruff/pull/2709)

##### Rules

- \[`flake8-pyi`]Add flake8-pyi with one rule by
[@&#8203;sbdchd](https://togithub.com/sbdchd) in
[https://github.com/charliermarsh/ruff/pull/2682](https://togithub.com/charliermarsh/ruff/pull/2682)
- \[`pylint`]: bad-string-format-type by
[@&#8203;colin99d](https://togithub.com/colin99d) in
[https://github.com/charliermarsh/ruff/pull/2572](https://togithub.com/charliermarsh/ruff/pull/2572)
- \[`pylint`]: yield-in-init by
[@&#8203;tomecki](https://togithub.com/tomecki) in
[https://github.com/charliermarsh/ruff/pull/2716](https://togithub.com/charliermarsh/ruff/pull/2716)
- \[`flake8-tidy-imports`] Implement autofix for relative imports
(TID252) by [@&#8203;sbrugman](https://togithub.com/sbrugman) in
[https://github.com/charliermarsh/ruff/pull/2739](https://togithub.com/charliermarsh/ruff/pull/2739)
- \[`flake8-bandit`]: try-except-continue by
[@&#8203;colin99d](https://togithub.com/colin99d) in
[https://github.com/charliermarsh/ruff/pull/2674](https://togithub.com/charliermarsh/ruff/pull/2674)
- \[`flake8-bandit`] Implement bandit's 'hardcoded-sql-expressions' S608
by [@&#8203;mattoberle](https://togithub.com/mattoberle) in
[https://github.com/charliermarsh/ruff/pull/2698](https://togithub.com/charliermarsh/ruff/pull/2698)
- \[`pycodestyle`] Implement compound-statements (E701, E702, E703,
E704) by [@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2680](https://togithub.com/charliermarsh/ruff/pull/2680)

##### Settings

- feat(isort): Implement known-local-folder by
[@&#8203;spaceone](https://togithub.com/spaceone) in
[https://github.com/charliermarsh/ruff/pull/2657](https://togithub.com/charliermarsh/ruff/pull/2657)
- Suppress parse errors with explicit `# noqa: E999` directives by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2697](https://togithub.com/charliermarsh/ruff/pull/2697)

##### Bug Fixes

- Support callable decorators in classmethod_decorators et al by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2675](https://togithub.com/charliermarsh/ruff/pull/2675)
- Avoid flagging typed exceptions in tuples by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2728](https://togithub.com/charliermarsh/ruff/pull/2728)
- Mark flake8-simplify rules as unfixable in non-fixable cases by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2676](https://togithub.com/charliermarsh/ruff/pull/2676)
- Treat re-exported annotations as used-at-runtime by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2689](https://togithub.com/charliermarsh/ruff/pull/2689)
- Gate `Path.readlink()` behind Python 3.9+ guard by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2708](https://togithub.com/charliermarsh/ruff/pull/2708)
- Handle functions that never return in RET503
([#&#8203;2602](https://togithub.com/charliermarsh/ruff/issues/2602)) by
[@&#8203;ppentchev](https://togithub.com/ppentchev) in
[https://github.com/charliermarsh/ruff/pull/2701](https://togithub.com/charliermarsh/ruff/pull/2701)
- Handle more functions that never return in RET503 by
[@&#8203;ngnpope](https://togithub.com/ngnpope) in
[https://github.com/charliermarsh/ruff/pull/2719](https://togithub.com/charliermarsh/ruff/pull/2719)
- Expand S110 and S112 ranges to include entire exception handler by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2729](https://togithub.com/charliermarsh/ruff/pull/2729)
- Relax conditions in bad-string-format-type by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2731](https://togithub.com/charliermarsh/ruff/pull/2731)
- Mark `__all__` members as used at end-of-scope by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2733](https://togithub.com/charliermarsh/ruff/pull/2733)
- Only validate `__all__` bindings for global scope by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2738](https://togithub.com/charliermarsh/ruff/pull/2738)
- Only trigger compound statements after select keywords by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2737](https://togithub.com/charliermarsh/ruff/pull/2737)
- Use `function_type::classify` for `yield-in-init` by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2742](https://togithub.com/charliermarsh/ruff/pull/2742)
- Allow named unicodes in bidirectional escape check by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2710](https://togithub.com/charliermarsh/ruff/pull/2710)
- Respect NO_COLOR flags in --show-source by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2750](https://togithub.com/charliermarsh/ruff/pull/2750)
- Flag private member accesses on calls et al by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2753](https://togithub.com/charliermarsh/ruff/pull/2753)

#### New Contributors

- [@&#8203;ngnpope](https://togithub.com/ngnpope) made their first
contribution in
[https://github.com/charliermarsh/ruff/pull/2692](https://togithub.com/charliermarsh/ruff/pull/2692)
- [@&#8203;ppentchev](https://togithub.com/ppentchev) made their first
contribution in
[https://github.com/charliermarsh/ruff/pull/2701](https://togithub.com/charliermarsh/ruff/pull/2701)
- [@&#8203;tomecki](https://togithub.com/tomecki) made their first
contribution in
[https://github.com/charliermarsh/ruff/pull/2716](https://togithub.com/charliermarsh/ruff/pull/2716)

**Full Changelog**:
astral-sh/ruff@v0.0.244...v0.0.245

###
[`v0.0.244`](https://togithub.com/charliermarsh/ruff/releases/tag/v0.0.244)

[Compare
Source](https://togithub.com/charliermarsh/ruff/compare/v0.0.243...v0.0.244)

<!-- Release notes generated using configuration in .github/release.yml
at main -->

#### What's Changed

##### Rules

- \[`pylint`]: bidirectional-unicode by
[@&#8203;colin99d](https://togithub.com/colin99d) in
[https://github.com/charliermarsh/ruff/pull/2589](https://togithub.com/charliermarsh/ruff/pull/2589)
- Implement whitespace-around-keywords (E271, E272, E273, E274) by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2653](https://togithub.com/charliermarsh/ruff/pull/2653)
- Implement whitespace-before-comment (E261, E262, E265, E266) by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2654](https://togithub.com/charliermarsh/ruff/pull/2654)

##### Settings

- flake8-annotations: add ignore-fully-untyped by
[@&#8203;akx](https://togithub.com/akx) in
[https://github.com/charliermarsh/ruff/pull/2128](https://togithub.com/charliermarsh/ruff/pull/2128)
- Add `--exit-non-zero-on-fix` by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2668](https://togithub.com/charliermarsh/ruff/pull/2668)

##### Documentation

- Derive `explanation` method on Rule struct via rustdoc by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2642](https://togithub.com/charliermarsh/ruff/pull/2642)
- Create per-rule pages and link from README by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2644](https://togithub.com/charliermarsh/ruff/pull/2644)
- Add documentation for flake8-quotes rules by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2650](https://togithub.com/charliermarsh/ruff/pull/2650)
- Disable autofix for flake8-print rules by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2651](https://togithub.com/charliermarsh/ruff/pull/2651)
- Add documentation for eradicate, flake8-import-conventions, and
flake8-no-pep420 by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2652](https://togithub.com/charliermarsh/ruff/pull/2652)
- doc: add documentation for TRY002 by
[@&#8203;nm-remarkable](https://togithub.com/nm-remarkable) in
[https://github.com/charliermarsh/ruff/pull/2655](https://togithub.com/charliermarsh/ruff/pull/2655)

##### Bug Fixes

- Accommodate pos-only arguments when checking self name by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2626](https://togithub.com/charliermarsh/ruff/pull/2626)
- Avoid non-recursion in nested typing function calls by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2627](https://togithub.com/charliermarsh/ruff/pull/2627)
- Avoid no-unnecessary-dict-kwargs errors with reserved keywords by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2628](https://togithub.com/charliermarsh/ruff/pull/2628)
- Treat [@&#8203;staticmethod](https://togithub.com/staticmethod) as
higher-precedence than ABC by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2635](https://togithub.com/charliermarsh/ruff/pull/2635)
- Avoid boolean-trap errors in `__setitem__` by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2636](https://togithub.com/charliermarsh/ruff/pull/2636)
- Skip ternary fixes for yields and awaits by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2637](https://togithub.com/charliermarsh/ruff/pull/2637)
- Ignore all non-`.py` wrt. implicit namespace package by
[@&#8203;scop](https://togithub.com/scop) in
[https://github.com/charliermarsh/ruff/pull/2640](https://togithub.com/charliermarsh/ruff/pull/2640)
- Avoid false-positive in chained type calls by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2663](https://togithub.com/charliermarsh/ruff/pull/2663)
- Treat annotated assignments in class and module scopes as runtime by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2667](https://togithub.com/charliermarsh/ruff/pull/2667)
- Accommodate multiple `@pytest.mark.parametrize` decorators by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2662](https://togithub.com/charliermarsh/ruff/pull/2662)
- Use separate exit codes for fatal errors vs. lint errors by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2670](https://togithub.com/charliermarsh/ruff/pull/2670)

#### New Contributors

- [@&#8203;nm-remarkable](https://togithub.com/nm-remarkable) made their
first contribution in
[https://github.com/charliermarsh/ruff/pull/2655](https://togithub.com/charliermarsh/ruff/pull/2655)

**Full Changelog**:
astral-sh/ruff@v0.0.243...v0.0.244

###
[`v0.0.243`](https://togithub.com/charliermarsh/ruff/releases/tag/v0.0.243)

[Compare
Source](https://togithub.com/charliermarsh/ruff/compare/v0.0.242...v0.0.243)

<!-- Release notes generated using configuration in .github/release.yml
at main -->

#### What's Changed

##### Rules

- Add flake8-pie single_starts_ends_with by
[@&#8203;sbdchd](https://togithub.com/sbdchd) in
[https://github.com/charliermarsh/ruff/pull/2616](https://togithub.com/charliermarsh/ruff/pull/2616)

##### Bug Fixes

- fix(pep8-naming): `typing.NamedTuple` and `typing.TypedDict` treatment
by [@&#8203;scop](https://togithub.com/scop) in
[https://github.com/charliermarsh/ruff/pull/2611](https://togithub.com/charliermarsh/ruff/pull/2611)
- Support `ignore-names` for all relevant pep8-naming rules by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2617](https://togithub.com/charliermarsh/ruff/pull/2617)
- Avoid removing quotes from runtime annotations by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2614](https://togithub.com/charliermarsh/ruff/pull/2614)
- Support relative paths for typing-modules by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2615](https://togithub.com/charliermarsh/ruff/pull/2615)

**Full Changelog**:
astral-sh/ruff@v0.0.242...v0.0.243

###
[`v0.0.242`](https://togithub.com/charliermarsh/ruff/releases/tag/v0.0.242)

[Compare
Source](https://togithub.com/charliermarsh/ruff/compare/v0.0.241...v0.0.242)

<!-- Release notes generated using configuration in .github/release.yml
at main -->

#### What's Changed

##### Rules

- Implement pylint's `too-many-branches` rule (`PLR0912`) by
[@&#8203;chanman3388](https://togithub.com/chanman3388) in
[https://github.com/charliermarsh/ruff/pull/2550](https://togithub.com/charliermarsh/ruff/pull/2550)
- Implement pylint's `too-many-return-statements` rule (`PLR0911`) by
[@&#8203;chanman3388](https://togithub.com/chanman3388) in
[https://github.com/charliermarsh/ruff/pull/2564](https://togithub.com/charliermarsh/ruff/pull/2564)
- \[`pyupgrade`]: Removes quotes from annotations by
[@&#8203;colin99d](https://togithub.com/colin99d) in
[https://github.com/charliermarsh/ruff/pull/2431](https://togithub.com/charliermarsh/ruff/pull/2431)
- \[`pylint`]: bad-str-strip-call by
[@&#8203;colin99d](https://togithub.com/colin99d) in
[https://github.com/charliermarsh/ruff/pull/2570](https://togithub.com/charliermarsh/ruff/pull/2570)
- Implement pycodestyle's logical line detection by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/1130](https://togithub.com/charliermarsh/ruff/pull/1130)
- Enable autofix for unnecessary-paren-on-raise-exception by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2596](https://togithub.com/charliermarsh/ruff/pull/2596)
- Automatically remove empty type-checking blocks by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2598](https://togithub.com/charliermarsh/ruff/pull/2598)

##### Bug Fixes

- Avoid infinite renames for unused-loop-control-variable by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2581](https://togithub.com/charliermarsh/ruff/pull/2581)
- Ignore direct root-children in implicit-namespace-package by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2565](https://togithub.com/charliermarsh/ruff/pull/2565)
- Allow blank line before sticky-comment functions in docstrings by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2597](https://togithub.com/charliermarsh/ruff/pull/2597)
- Visit deferred assignments after deferred type annotations by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2607](https://togithub.com/charliermarsh/ruff/pull/2607)
- Fix python module invocation by
[@&#8203;trottomv](https://togithub.com/trottomv) in
[https://github.com/charliermarsh/ruff/pull/2563](https://togithub.com/charliermarsh/ruff/pull/2563)
- Portably find ruff binary path from Python by
[@&#8203;andersk](https://togithub.com/andersk) in
[https://github.com/charliermarsh/ruff/pull/2574](https://togithub.com/charliermarsh/ruff/pull/2574)
- fix(commented-out-code): `mypy` and `SPDX-License-Identifier` false
positives by [@&#8203;scop](https://togithub.com/scop) in
[https://github.com/charliermarsh/ruff/pull/2587](https://togithub.com/charliermarsh/ruff/pull/2587)

#### New Contributors

- [@&#8203;trottomv](https://togithub.com/trottomv) made their first
contribution in
[https://github.com/charliermarsh/ruff/pull/2563](https://togithub.com/charliermarsh/ruff/pull/2563)
- [@&#8203;MichaReiser](https://togithub.com/MichaReiser) made their
first contribution in
[https://github.com/charliermarsh/ruff/pull/2088](https://togithub.com/charliermarsh/ruff/pull/2088)

**Full Changelog**:
astral-sh/ruff@v0.0.241...v0.0.242

###
[`v0.0.241`](https://togithub.com/charliermarsh/ruff/releases/tag/v0.0.241)

[Compare
Source](https://togithub.com/charliermarsh/ruff/compare/v0.0.240...v0.0.241)

<!-- Release notes generated using configuration in .github/release.yml
at main -->

#### What's Changed

##### Deprecates

- Soft-deprecate `update-check` by
[@&#8203;akx](https://togithub.com/akx) in
[https://github.com/charliermarsh/ruff/pull/2530](https://togithub.com/charliermarsh/ruff/pull/2530)

##### Rules

- feat: add autofix for PLR0402 by
[@&#8203;spaceone](https://togithub.com/spaceone) in
[https://github.com/charliermarsh/ruff/pull/2504](https://togithub.com/charliermarsh/ruff/pull/2504)
- Allow F811 noqa declarations on containing import lines by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2553](https://togithub.com/charliermarsh/ruff/pull/2553)

##### Features

- Mark fixable issues in printer output by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2500](https://togithub.com/charliermarsh/ruff/pull/2500)
- Always report parse errors back to the user by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2505](https://togithub.com/charliermarsh/ruff/pull/2505)
- Notify user if autofix introduces syntax error by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2507](https://togithub.com/charliermarsh/ruff/pull/2507)
- Add `known-standard-library` for each Python version by
[@&#8203;JonathanPlasse](https://togithub.com/JonathanPlasse) in
[https://github.com/charliermarsh/ruff/pull/2491](https://togithub.com/charliermarsh/ruff/pull/2491)

##### Bug Fixes

- Avoid renaming unused loop variables with deferred usages by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2509](https://togithub.com/charliermarsh/ruff/pull/2509)
- \[`flake8-self`] Fix False Negative Issue on Rule `SLF001` by
[@&#8203;saadmk11](https://togithub.com/saadmk11) in
[https://github.com/charliermarsh/ruff/pull/2527](https://togithub.com/charliermarsh/ruff/pull/2527)
- Minor fixes to PLR0915 logic by
[@&#8203;chanman3388](https://togithub.com/chanman3388) in
[https://github.com/charliermarsh/ruff/pull/2518](https://togithub.com/charliermarsh/ruff/pull/2518)
- Exit upon showing files with `--show-files` by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2543](https://togithub.com/charliermarsh/ruff/pull/2543)
- Ignore direct source-children in `implicit-namespace-package` by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2560](https://togithub.com/charliermarsh/ruff/pull/2560)
- Allow `list()` and `tuple()` calls in `__all__` assignments by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2499](https://togithub.com/charliermarsh/ruff/pull/2499)
- Don't walk past project root when figuring out exclusion by
[@&#8203;akx](https://togithub.com/akx) in
[https://github.com/charliermarsh/ruff/pull/2471](https://togithub.com/charliermarsh/ruff/pull/2471)
- Avoid hang when detecting trailing comments by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2549](https://togithub.com/charliermarsh/ruff/pull/2549)

#### New Contributors

- [@&#8203;JacobCoffee](https://togithub.com/JacobCoffee) made their
first contribution in
[https://github.com/charliermarsh/ruff/pull/2516](https://togithub.com/charliermarsh/ruff/pull/2516)
- [@&#8203;Pierre-Sassoulas](https://togithub.com/Pierre-Sassoulas) made
their first contribution in
[https://github.com/charliermarsh/ruff/pull/2559](https://togithub.com/charliermarsh/ruff/pull/2559)

**Full Changelog**:
astral-sh/ruff@v0.0.240...v0.0.241

###
[`v0.0.240`](https://togithub.com/charliermarsh/ruff/releases/tag/v0.0.240)

[Compare
Source](https://togithub.com/charliermarsh/ruff/compare/v0.0.239...v0.0.240)

<!-- Release notes generated using configuration in .github/release.yml
at main -->

#### What's Changed

##### Rules

- \[`pyupgrade`]: Remove outdated `sys.version_info` blocks by
[@&#8203;colin99d](https://togithub.com/colin99d) in
[https://github.com/charliermarsh/ruff/pull/2099](https://togithub.com/charliermarsh/ruff/pull/2099)
- \[`flake8-self`] Add Plugin and Rule `SLF001` by
[@&#8203;saadmk11](https://togithub.com/saadmk11) in
[https://github.com/charliermarsh/ruff/pull/2470](https://togithub.com/charliermarsh/ruff/pull/2470)
- \[`pylint`] Implement pylint's `too-many-statements` rule (`PLR0915`)
by [@&#8203;chanman3388](https://togithub.com/chanman3388) in
[https://github.com/charliermarsh/ruff/pull/2445](https://togithub.com/charliermarsh/ruff/pull/2445)

##### Settings

- \[`isort`] Support forced_separate by
[@&#8203;akx](https://togithub.com/akx) in
[https://github.com/charliermarsh/ruff/pull/2268](https://togithub.com/charliermarsh/ruff/pull/2268)
- \[`isort`] Add isort option lines-after-imports by
[@&#8203;reidswan](https://togithub.com/reidswan) in
[https://github.com/charliermarsh/ruff/pull/2440](https://togithub.com/charliermarsh/ruff/pull/2440)
- Allow non-ruff.toml-named files for --config by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2463](https://togithub.com/charliermarsh/ruff/pull/2463)

##### Bug Fixes

- Trigger, but don't fix, SIM rules if comments are present by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2450](https://togithub.com/charliermarsh/ruff/pull/2450)
- Only avoid PEP604 rewrites for pre-Python 3.10 code by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2449](https://togithub.com/charliermarsh/ruff/pull/2449)
- Use LibCST to reverse Yoda conditions by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2468](https://togithub.com/charliermarsh/ruff/pull/2468)
- fix: assertTrue()/assertFalse() fixer should not test for identity by
[@&#8203;spaceone](https://togithub.com/spaceone) in
[https://github.com/charliermarsh/ruff/pull/2476](https://togithub.com/charliermarsh/ruff/pull/2476)
- Treat `if 0:` and `if False:` as type-checking blocks by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2485](https://togithub.com/charliermarsh/ruff/pull/2485)
- Avoid iterating over body twice by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2439](https://togithub.com/charliermarsh/ruff/pull/2439)
- more builtin name checks when autofixing by
[@&#8203;spaceone](https://togithub.com/spaceone) in
[https://github.com/charliermarsh/ruff/pull/2430](https://togithub.com/charliermarsh/ruff/pull/2430)
- Respect parent noqa in --add-noqa by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2464](https://togithub.com/charliermarsh/ruff/pull/2464)
- Avoid removing un-selected codes when applying `--add-noqa` edits by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2465](https://togithub.com/charliermarsh/ruff/pull/2465)
- Carry-over `ignore` to next config layer if `select = []` by
[@&#8203;not-my-profile](https://togithub.com/not-my-profile) in
[https://github.com/charliermarsh/ruff/pull/2467](https://togithub.com/charliermarsh/ruff/pull/2467)
- Visit NamedExpr values before targets by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2484](https://togithub.com/charliermarsh/ruff/pull/2484)

#### New Contributors

- [@&#8203;reidswan](https://togithub.com/reidswan) made their first
contribution in
[https://github.com/charliermarsh/ruff/pull/2440](https://togithub.com/charliermarsh/ruff/pull/2440)
- [@&#8203;chanman3388](https://togithub.com/chanman3388) made their
first contribution in
[https://github.com/charliermarsh/ruff/pull/2445](https://togithub.com/charliermarsh/ruff/pull/2445)

**Full Changelog**:
astral-sh/ruff@v0.0.239...v0.0.240

###
[`v0.0.239`](https://togithub.com/charliermarsh/ruff/releases/tag/v0.0.239)

[Compare
Source](https://togithub.com/charliermarsh/ruff/compare/v0.0.238...v0.0.239)

<!-- Release notes generated using configuration in .github/release.yml
at main -->

#### What's Changed

##### Rules

- \[`pyupgrade`] Implement import-replacement rule (`UP035`) by
[@&#8203;colin99d](https://togithub.com/colin99d) in
[https://github.com/charliermarsh/ruff/pull/2049](https://togithub.com/charliermarsh/ruff/pull/2049)
- \[`flake8-raise`] Add Plugin and `RSE102` Rule by
[@&#8203;saadmk11](https://togithub.com/saadmk11) in
[https://github.com/charliermarsh/ruff/pull/2354](https://togithub.com/charliermarsh/ruff/pull/2354)
- \[`flake8-quotes`] Allow implicit multiline strings with internal
quotes to use non-preferred quote by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2416](https://togithub.com/charliermarsh/ruff/pull/2416)

##### Documentation

- Add a link to MkDocs by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2370](https://togithub.com/charliermarsh/ruff/pull/2370)
- Use human-readable types for documentation values by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2375](https://togithub.com/charliermarsh/ruff/pull/2375)

##### Bug Fixes

- \[`I001`] fix isort check for files with tabs and no indented blocks
by [@&#8203;sciyoshi](https://togithub.com/sciyoshi) in
[https://github.com/charliermarsh/ruff/pull/2374](https://togithub.com/charliermarsh/ruff/pull/2374)
- Don't panic for --statistics with no errors by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2391](https://togithub.com/charliermarsh/ruff/pull/2391)
- Handle multi-byte lines in RUF100 by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2392](https://togithub.com/charliermarsh/ruff/pull/2392)
- Avoid implicit-namespace-package checks for .pyi files by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2420](https://togithub.com/charliermarsh/ruff/pull/2420)
- Include per-file ignore matches in debug logging by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2376](https://togithub.com/charliermarsh/ruff/pull/2376)
- Include method name in B027 message by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2403](https://togithub.com/charliermarsh/ruff/pull/2403)
- Avoid flagging same-condition cases in SIM103 by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2404](https://togithub.com/charliermarsh/ruff/pull/2404)
- feat: let SIM103 return expressions without bool() wrapping by
[@&#8203;spaceone](https://togithub.com/spaceone) in
[https://github.com/charliermarsh/ruff/pull/2410](https://togithub.com/charliermarsh/ruff/pull/2410)
- feat: let SIM210 return expressions without bool() wrapping
([#&#8203;2410](https://togithub.com/charliermarsh/ruff/issues/2410)) by
[@&#8203;spaceone](https://togithub.com/spaceone) in
[https://github.com/charliermarsh/ruff/pull/2426](https://togithub.com/charliermarsh/ruff/pull/2426)
- fix: ignore fix if "bool" is not builtin by
[@&#8203;spaceone](https://togithub.com/spaceone) in
[https://github.com/charliermarsh/ruff/pull/2429](https://togithub.com/charliermarsh/ruff/pull/2429)
- Avoid Bandit false-positives for empty-string-as-password by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2421](https://togithub.com/charliermarsh/ruff/pull/2421)

#### New Contributors

- [@&#8203;eriknw](https://togithub.com/eriknw) made their first
contribution in
[https://github.com/charliermarsh/ruff/pull/2380](https://togithub.com/charliermarsh/ruff/pull/2380)
- [@&#8203;has2k1](https://togithub.com/has2k1) made their first
contribution in
[https://github.com/charliermarsh/ruff/pull/2386](https://togithub.com/charliermarsh/ruff/pull/2386)

**Full Changelog**:
astral-sh/ruff@v0.0.238...v0.0.239

###
[`v0.0.238`](https://togithub.com/charliermarsh/ruff/releases/tag/v0.0.238)

[Compare
Source](https://togithub.com/charliermarsh/ruff/compare/v0.0.237...v0.0.238)

<!-- Release notes generated using configuration in .github/release.yml
at main -->

#### What's Changed

##### ⚠️ Breaking Changes ⚠️

##### `select`, `extend-select`, `ignore`, and `extend-ignore` have new
semantics
([#&#8203;2312](https://togithub.com/charliermarsh/ruff/pull/2312))

Previously, the interplay between `select` and its related options could
lead to unexpected behavior. For example, `ruff --select E501 --ignore
ALL` and `ruff --select E501 --extend-ignore ALL` behaved differently.
(See [#&#8203;2312](https://togithub.com/charliermarsh/ruff/pull/2312)
for more examples.)

The new semantics are such that Ruff uses the "highest-priority"
`select` as the basis for the rule set, and then applies any
`extend-select`, `ignore`, and `extend-ignore` adjustments. CLI options
are given higher priority than `pyproject.toml` options, and the current
`pyproject.toml` file is given higher priority than any inherited
`pyproject.toml` files.

As an example: `ruff --select F401` will select rule `F401`, and ignore
any of the modifiers from the `pyproject.toml`, as the "highest-priorty"
select kicks off the resolution chain.

This change is largely backwards compatible -- most users should
experience no change in behavior. For more, see
[BREAKING_CHANGES.md](https://togithub.com/charliermarsh/ruff/blob/main/BREAKING_CHANGES.md#select-extend-select-ignore-and-extend-ignore-have-new-semantics-2312).

##### `remove-six-compat` (`UP016`) has been removed
([#&#8203;2332](https://togithub.com/charliermarsh/ruff/pull/2332))

The `remove-six-compat` rule has been removed. This rule was only useful
for one-time Python 2-to-3 upgrades.

##### Rules

- Implement Pylint's `too-many-arguments` rule (`PLR0913`) by
[@&#8203;akhildevelops](https://togithub.com/akhildevelops) in
[https://github.com/charliermarsh/ruff/pull/2308](https://togithub.com/charliermarsh/ruff/pull/2308)
- Extend conventional imports defaults to include TensorFlow et al by
[@&#8203;sbrugman](https://togithub.com/sbrugman) in
[https://github.com/charliermarsh/ruff/pull/2353](https://togithub.com/charliermarsh/ruff/pull/2353)

##### Settings

- feat: add ruff --statistics by
[@&#8203;spaceone](https://togithub.com/spaceone) in
[https://github.com/charliermarsh/ruff/pull/2284](https://togithub.com/charliermarsh/ruff/pull/2284)
- Ignore magic comparisons to bytes by default by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2365](https://togithub.com/charliermarsh/ruff/pull/2365)
- Implement `ruff linter` subcommand by
[@&#8203;not-my-profile](https://togithub.com/not-my-profile) in
[https://github.com/charliermarsh/ruff/pull/2294](https://togithub.com/charliermarsh/ruff/pull/2294)
- Improve rule config resolution by
[@&#8203;not-my-profile](https://togithub.com/not-my-profile) in
[https://github.com/charliermarsh/ruff/pull/2312](https://togithub.com/charliermarsh/ruff/pull/2312)

##### Bug Fixes

- Refine criteria for `exc_info` logger rules by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2364](https://togithub.com/charliermarsh/ruff/pull/2364)
- Respect per-file-ignores when checking noqa by
[@&#8203;sciyoshi](https://togithub.com/sciyoshi) in
[https://github.com/charliermarsh/ruff/pull/2309](https://togithub.com/charliermarsh/ruff/pull/2309)
- Place star before other member imports by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2320](https://togithub.com/charliermarsh/ruff/pull/2320)
- Allow list comprehensions for **all** assignment by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2326](https://togithub.com/charliermarsh/ruff/pull/2326)
- \[`TRY201`] don't check raise statements in nested exception handlers
by [@&#8203;sciyoshi](https://togithub.com/sciyoshi) in
[https://github.com/charliermarsh/ruff/pull/2337](https://togithub.com/charliermarsh/ruff/pull/2337)
- include tomllib in standard lib by
[@&#8203;sbrugman](https://togithub.com/sbrugman) in
[https://github.com/charliermarsh/ruff/pull/2345](https://togithub.com/charliermarsh/ruff/pull/2345)
- Avoid removing trailing comments when autofixing by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2352](https://togithub.com/charliermarsh/ruff/pull/2352)
- \[`I001`] fix isort for files with tab-based indentation by
[@&#8203;sciyoshi](https://togithub.com/sciyoshi) in
[https://github.com/charliermarsh/ruff/pull/2361](https://togithub.com/charliermarsh/ruff/pull/2361)
- Disable incompatible rules rather than merely warning by
[@&#8203;charliermarsh](https://togithub.com/charliermarsh) in
[https://github.com/charliermarsh/ruff/pull/2369](https://togithub.com/charliermarsh/ruff/pull/2369)

#### New Contributors

- [@&#8203;chirag127](https://togithub.com/chirag127) made their first
contribution in
[https://github.com/charliermarsh/ruff/pull/2307](https://togithub.com/charliermarsh/ruff/pull/2307)
- [@&#8203;akhildevelops](https://togithub.com/akhildevelops) made their
first contribution in
[https://github.com/charliermarsh/ruff/pull/2308](https://togithub.com/charliermarsh/ruff/pull/2308)

**Full Changelog**:
astral-sh/ruff@v0.0.237...v0.0.238

</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/premiscale/premiscale).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNC4xNDMuMSIsInVwZGF0ZWRJblZlciI6IjM0LjE0My4xIn0=-->
jhartum added a commit to jhartum/ruff that referenced this pull request Jan 6, 2026
…hars]]

Implements astral-sh#2128: `Literal["abba"]` is now recognized as a subtype of
`Sequence[Literal["a", "b"]]`.

Changes:
- Add `KnownClass::Sequence` as a known protocol class from `typing`
- Extend `has_relation_to_impl` to check if a string literal's unique
  characters are all subtypes of the Sequence's element type
- Add mdtests covering positive cases, negative cases, and edge cases
  (empty strings, unicode, multi-char literals)

The implementation first tries the standard `str` fallback. If that fails
and the target is `Sequence[X]`, it verifies each unique character in the
string literal is a subtype of `X`, accumulating constraints properly via
`when_all`.

Closes astral-sh#2128
jhartum added a commit to jhartum/ruff that referenced this pull request Jan 6, 2026
…hars]]

Implements astral-sh#2128: `Literal["abba"]` is now recognized as a subtype of
`Sequence[Literal["a", "b"]]`.

Changes:
- Add `KnownClass::Sequence` as a known protocol class from `typing`
- Extend `has_relation_to_impl` to check if a string literal's unique
  characters are all subtypes of the Sequence's element type
- Add mdtests covering positive cases, negative cases, and edge cases

Closes astral-sh#2128
jhartum added a commit to jhartum/ruff that referenced this pull request Jan 6, 2026
…hars]]

Implements astral-sh#2128: `Literal["abba"]` is now recognized as a subtype of
`Sequence[Literal["a", "b"]]`.

Changes:
- Add `KnownClass::Sequence` as a known protocol class from `typing`
- Extend `has_relation_to_impl` to check if a string literal's unique
  characters are all subtypes of the Sequence's element type
- Add mdtests covering positive cases, negative cases, and edge cases

Closes astral-sh#2128
jhartum added a commit to jhartum/ruff that referenced this pull request Jan 6, 2026
…hars]]

Implements astral-sh#2128: `Literal["abba"]` is now recognized as a subtype of
`Sequence[Literal["a", "b"]]`.

Changes:
- Add `KnownClass::Sequence` as a known protocol class from `typing`
- Extend `has_relation_to_impl` to check if a string literal's unique
  characters are all subtypes of the Sequence's element type
- Add mdtests covering positive cases, negative cases, and edge cases

Closes astral-sh#2128
jhartum added a commit to jhartum/ruff that referenced this pull request Jan 6, 2026
…hars]]

Implements astral-sh#2128: `Literal["abba"]` is now recognized as a subtype of
`Sequence[Literal["a", "b"]]`.

Changes:
- Add `KnownClass::Sequence` as a known protocol class from `typing`
- Extend `has_relation_to_impl` to check if a string literal's unique
  characters are all subtypes of the Sequence's element type
- Add mdtests covering positive cases, negative cases, and edge cases

Closes astral-sh#2128
jhartum added a commit to jhartum/ruff that referenced this pull request Jan 6, 2026
…hars]]

Implements astral-sh#2128: `Literal["abba"]` is now recognized as a subtype of
`Sequence[Literal["a", "b"]]`.

Changes:
- Add `KnownClass::Sequence` as a known protocol class from `typing`
- Extend `has_relation_to_impl` to check if a string literal's unique
  characters are all subtypes of the Sequence's element type
- Add mdtests covering positive cases, negative cases, and edge cases

Closes astral-sh#2128
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

configuration Related to settings and configuration typing Related to type annotations

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants