astral-sh/ruff (ruff)
### [`v0.7.4`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#074)
[Compare Source](https://redirect.github.com/astral-sh/ruff/compare/0.7.3...0.7.4)
##### Preview features
- \[`flake8-datetimez`] Detect usages of `datetime.max`/`datetime.min` (`DTZ901`) ([#14288](https://redirect.github.com/astral-sh/ruff/pull/14288))
- \[`flake8-logging`] Implement `root-logger-calls` (`LOG015`) ([#14302](https://redirect.github.com/astral-sh/ruff/pull/14302))
- \[`flake8-no-pep420`] Detect empty implicit namespace packages (`INP001`) ([#14236](https://redirect.github.com/astral-sh/ruff/pull/14236))
- \[`flake8-pyi`] Add "replace with `Self`" fix (`PYI019`) ([#14238](https://redirect.github.com/astral-sh/ruff/pull/14238))
- \[`perflint`] Implement quick-fix for `manual-list-comprehension` (`PERF401`) ([#13919](https://redirect.github.com/astral-sh/ruff/pull/13919))
- \[`pylint`] Implement `shallow-copy-environ` (`W1507`) ([#14241](https://redirect.github.com/astral-sh/ruff/pull/14241))
- \[`ruff`] Implement `none-not-at-end-of-union` (`RUF036`) ([#14314](https://redirect.github.com/astral-sh/ruff/pull/14314))
- \[`ruff`] Implementation `unsafe-markup-call` from `flake8-markupsafe` plugin (`RUF035`) ([#14224](https://redirect.github.com/astral-sh/ruff/pull/14224))
- \[`ruff`] Report problems for `attrs` dataclasses (`RUF008`, `RUF009`) ([#14327](https://redirect.github.com/astral-sh/ruff/pull/14327))
##### Rule changes
- \[`flake8-boolean-trap`] Exclude dunder methods that define operators (`FBT001`) ([#14203](https://redirect.github.com/astral-sh/ruff/pull/14203))
- \[`flake8-pyi`] Add "replace with `Self`" fix (`PYI034`) ([#14217](https://redirect.github.com/astral-sh/ruff/pull/14217))
- \[`flake8-pyi`] Always autofix `duplicate-union-members` (`PYI016`) ([#14270](https://redirect.github.com/astral-sh/ruff/pull/14270))
- \[`flake8-pyi`] Improve autofix for nested and mixed type unions for `unnecessary-type-union` (`PYI055`) ([#14272](https://redirect.github.com/astral-sh/ruff/pull/14272))
- \[`flake8-pyi`] Mark fix as unsafe when type annotation contains comments for `duplicate-literal-member` (`PYI062`) ([#14268](https://redirect.github.com/astral-sh/ruff/pull/14268))
##### Server
- Use the current working directory to resolve settings from `ruff.configuration` ([#14352](https://redirect.github.com/astral-sh/ruff/pull/14352))
##### Bug fixes
- Avoid conflicts between `PLC014` (`useless-import-alias`) and `I002` (`missing-required-import`) by considering `lint.isort.required-imports` for `PLC014` ([#14287](https://redirect.github.com/astral-sh/ruff/pull/14287))
- \[`flake8-type-checking`] Skip quoting annotation if it becomes invalid syntax (`TCH001`)
- \[`flake8-pyi`] Avoid using `typing.Self` in stub files pre-Python 3.11 (`PYI034`) ([#14230](https://redirect.github.com/astral-sh/ruff/pull/14230))
- \[`flake8-pytest-style`] Flag `pytest.raises` call with keyword argument `expected_exception` (`PT011`) ([#14298](https://redirect.github.com/astral-sh/ruff/pull/14298))
- \[`flake8-simplify`] Infer "unknown" truthiness for literal iterables whose items are all unpacks (`SIM222`) ([#14263](https://redirect.github.com/astral-sh/ruff/pull/14263))
- \[`flake8-type-checking`] Fix false positives for `typing.Annotated` (`TCH001`) ([#14311](https://redirect.github.com/astral-sh/ruff/pull/14311))
- \[`pylint`] Allow `await` at the top-level scope of a notebook (`PLE1142`) ([#14225](https://redirect.github.com/astral-sh/ruff/pull/14225))
- \[`pylint`] Fix miscellaneous issues in `await-outside-async` detection (`PLE1142`) ([#14218](https://redirect.github.com/astral-sh/ruff/pull/14218))
- \[`pyupgrade`] Avoid applying PEP 646 rewrites in invalid contexts (`UP044`) ([#14234](https://redirect.github.com/astral-sh/ruff/pull/14234))
- \[`pyupgrade`] Detect permutations in redundant open modes (`UP015`) ([#14255](https://redirect.github.com/astral-sh/ruff/pull/14255))
- \[`refurb`] Avoid triggering `hardcoded-string-charset` for reordered sets (`FURB156`) ([#14233](https://redirect.github.com/astral-sh/ruff/pull/14233))
- \[`refurb`] Further special cases added to `verbose-decimal-constructor` (`FURB157`) ([#14216](https://redirect.github.com/astral-sh/ruff/pull/14216))
- \[`refurb`] Use `UserString` instead of non-existent `UserStr` (`FURB189`) ([#14209](https://redirect.github.com/astral-sh/ruff/pull/14209))
- \[`ruff`] Avoid treating lowercase letters as `# noqa` codes (`RUF100`) ([#14229](https://redirect.github.com/astral-sh/ruff/pull/14229))
- \[`ruff`] Do not report when `Optional` has no type arguments (`RUF013`) ([#14181](https://redirect.github.com/astral-sh/ruff/pull/14181))
##### Documentation
- Add "Notebook behavior" section for `F704`, `PLE1142` ([#14266](https://redirect.github.com/astral-sh/ruff/pull/14266))
- Document comment policy around fix safety ([#14300](https://redirect.github.com/astral-sh/ruff/pull/14300))
### [`v0.7.3`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#073)
[Compare Source](https://redirect.github.com/astral-sh/ruff/compare/0.7.2...0.7.3)
##### Preview features
- Formatter: Disallow single-line implicit concatenated strings ([#13928](https://redirect.github.com/astral-sh/ruff/pull/13928))
- \[`flake8-pyi`] Include all Python file types for `PYI006` and `PYI066` ([#14059](https://redirect.github.com/astral-sh/ruff/pull/14059))
- \[`flake8-simplify`] Implement `split-of-static-string` (`SIM905`) ([#14008](https://redirect.github.com/astral-sh/ruff/pull/14008))
- \[`refurb`] Implement `subclass-builtin` (`FURB189`) ([#14105](https://redirect.github.com/astral-sh/ruff/pull/14105))
- \[`ruff`] Improve diagnostic messages and docs (`RUF031`, `RUF032`, `RUF034`) ([#14068](https://redirect.github.com/astral-sh/ruff/pull/14068))
##### Rule changes
- Detect items that hash to same value in duplicate sets (`B033`, `PLC0208`) ([#14064](https://redirect.github.com/astral-sh/ruff/pull/14064))
- \[`eradicate`] Better detection of IntelliJ language injection comments (`ERA001`) ([#14094](https://redirect.github.com/astral-sh/ruff/pull/14094))
- \[`flake8-pyi`] Add autofix for `docstring-in-stub` (`PYI021`) ([#14150](https://redirect.github.com/astral-sh/ruff/pull/14150))
- \[`flake8-pyi`] Update `duplicate-literal-member` (`PYI062`) to alawys provide an autofix ([#14188](https://redirect.github.com/astral-sh/ruff/pull/14188))
- \[`pyflakes`] Detect items that hash to same value in duplicate dictionaries (`F601`) ([#14065](https://redirect.github.com/astral-sh/ruff/pull/14065))
- \[`ruff`] Fix false positive for decorators (`RUF028`) ([#14061](https://redirect.github.com/astral-sh/ruff/pull/14061))
##### Bug fixes
- Avoid parsing joint rule codes as distinct codes in `# noqa` ([#12809](https://redirect.github.com/astral-sh/ruff/pull/12809))
- \[`eradicate`] ignore `# language=` in commented-out-code rule (ERA001) ([#14069](https://redirect.github.com/astral-sh/ruff/pull/14069))
- \[`flake8-bugbear`] - do not run `mutable-argument-default` on stubs (`B006`) ([#14058](https://redirect.github.com/astral-sh/ruff/pull/14058))
- \[`flake8-builtins`] Skip lambda expressions in `builtin-argument-shadowing (A002)` ([#14144](https://redirect.github.com/astral-sh/ruff/pull/14144))
- \[`flake8-comprehension`] Also remove trailing comma while fixing `C409` and `C419` ([#14097](https://redirect.github.com/astral-sh/ruff/pull/14097))
- \[`flake8-simplify`] Allow `open` without context manager in `return` statement (`SIM115`) ([#14066](https://redirect.github.com/astral-sh/ruff/pull/14066))
- \[`pylint`] Respect hash-equivalent literals in `iteration-over-set` (`PLC0208`) ([#14063](https://redirect.github.com/astral-sh/ruff/pull/14063))
- \[`pylint`] Update known dunder methods for Python 3.13 (`PLW3201`) ([#14146](https://redirect.github.com/astral-sh/ruff/pull/14146))
- \[`pyupgrade`] - ignore kwarg unpacking for `UP044` ([#14053](https://redirect.github.com/astral-sh/ruff/pull/14053))
- \[`refurb`] Parse more exotic decimal strings in `verbose-decimal-constructor` (`FURB157`) ([#14098](https://redirect.github.com/astral-sh/ruff/pull/14098))
##### Documentation
- Add links to missing related options within rule documentations ([#13971](https://redirect.github.com/astral-sh/ruff/pull/13971))
- Add rule short code to mkdocs tags to allow searching via rule codes ([#14040](https://redirect.github.com/astral-sh/ruff/pull/14040))
### [`v0.7.2`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#072)
[Compare Source](https://redirect.github.com/astral-sh/ruff/compare/0.7.1...0.7.2)
##### Preview features
- Fix formatting of single with-item with trailing comment ([#14005](https://redirect.github.com/astral-sh/ruff/pull/14005))
- \[`pyupgrade`] Add PEP 646 `Unpack` conversion to `*` with fix (`UP044`) ([#13988](https://redirect.github.com/astral-sh/ruff/pull/13988))
##### Rule changes
- Regenerate `known_stdlibs.rs` with stdlibs 2024.10.25 ([#13963](https://redirect.github.com/astral-sh/ruff/pull/13963))
- \[`flake8-no-pep420`] Skip namespace package enforcement for PEP 723 scripts (`INP001`) ([#13974](https://redirect.github.com/astral-sh/ruff/pull/13974))
##### Server
- Fix server panic when undoing an edit ([#14010](https://redirect.github.com/astral-sh/ruff/pull/14010))
##### Bug fixes
- Fix issues in discovering ruff in pip build environments ([#13881](https://redirect.github.com/astral-sh/ruff/pull/13881))
- \[`flake8-type-checking`] Fix false positive for `singledispatchmethod` (`TCH003`) ([#13941](https://redirect.github.com/astral-sh/ruff/pull/13941))
- \[`flake8-type-checking`] Treat return type of `singledispatch` as runtime-required (`TCH003`) ([#13957](https://redirect.github.com/astral-sh/ruff/pull/13957))
##### Documentation
- \[`flake8-simplify`] Include caveats of enabling `if-else-block-instead-of-if-exp` (`SIM108`) ([#14019](https://redirect.github.com/astral-sh/ruff/pull/14019))
### [`v0.7.1`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#071)
[Compare Source](https://redirect.github.com/astral-sh/ruff/compare/0.7.0...0.7.1)
##### Preview features
- Fix `E221` and `E222` to flag missing or extra whitespace around `==` operator ([#13890](https://redirect.github.com/astral-sh/ruff/pull/13890))
- Formatter: Alternate quotes for strings inside f-strings in preview ([#13860](https://redirect.github.com/astral-sh/ruff/pull/13860))
- Formatter: Join implicit concatenated strings when they fit on a line ([#13663](https://redirect.github.com/astral-sh/ruff/pull/13663))
- \[`pylint`] Restrict `iteration-over-set` to only work on sets of literals (`PLC0208`) ([#13731](https://redirect.github.com/astral-sh/ruff/pull/13731))
##### Rule changes
- \[`flake8-type-checking`] Support auto-quoting when annotations contain quotes ([#11811](https://redirect.github.com/astral-sh/ruff/pull/11811))
##### Server
- Avoid indexing the workspace for single-file mode ([#13770](https://redirect.github.com/astral-sh/ruff/pull/13770))
##### Bug fixes
- Make `ARG002` compatible with `EM101` when raising `NotImplementedError` ([#13714](https://redirect.github.com/astral-sh/ruff/pull/13714))
##### Other changes
- Introduce more Docker tags for Ruff (similar to uv) ([#13274](https://redirect.github.com/astral-sh/ruff/pull/13274))
### [`v0.7.0`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#070)
[Compare Source](https://redirect.github.com/astral-sh/ruff/compare/0.6.9...0.7.0)
Check out the [blog post](https://astral.sh/blog/ruff-v0.7.0) for a migration guide and overview of the changes!
##### Breaking changes
- The pytest rules `PT001` and `PT023` now default to omitting the decorator parentheses when there are no arguments
([#12838](https://redirect.github.com/astral-sh/ruff/pull/12838), [#13292](https://redirect.github.com/astral-sh/ruff/pull/13292)).
This was a change that we attempted to make in Ruff v0.6.0, but only partially made due to an error on our part.
See the [blog post](https://astral.sh/blog/ruff-v0.7.0) for more details.
- The `useless-try-except` rule (in our `tryceratops` category) has been recoded from `TRY302` to
`TRY203` ([#13502](https://redirect.github.com/astral-sh/ruff/pull/13502)). This ensures Ruff's code is consistent with
the same rule in the [`tryceratops`](https://redirect.github.com/guilatrova/tryceratops) linter.
- The `lint.allow-unused-imports` setting has been removed ([#13677](https://redirect.github.com/astral-sh/ruff/pull/13677)). Use
[`lint.pyflakes.allow-unused-imports`](https://docs.astral.sh/ruff/settings/#lint_pyflakes_allowed-unused-imports)
instead.
##### Formatter preview style
- Normalize implicit concatenated f-string quotes per part ([#13539](https://redirect.github.com/astral-sh/ruff/pull/13539))
##### Preview linter features
- \[`refurb`] implement `hardcoded-string-charset` (FURB156) ([#13530](https://redirect.github.com/astral-sh/ruff/pull/13530))
- \[`refurb`] Count codepoints not bytes for `slice-to-remove-prefix-or-suffix (FURB188)` ([#13631](https://redirect.github.com/astral-sh/ruff/pull/13631))
##### Rule changes
- \[`pylint`] Mark `PLE1141` fix as unsafe ([#13629](https://redirect.github.com/astral-sh/ruff/pull/13629))
- \[`flake8-async`] Consider async generators to be "checkpoints" for `cancel-scope-no-checkpoint` (`ASYNC100`) ([#13639](https://redirect.github.com/astral-sh/ruff/pull/13639))
- \[`flake8-bugbear`] Do not suggest setting parameter `strict=` to `False` in `B905` diagnostic message ([#13656](https://redirect.github.com/astral-sh/ruff/pull/13656))
- \[`flake8-todos`] Only flag the word "TODO", not words starting with "todo" (`TD006`) ([#13640](https://redirect.github.com/astral-sh/ruff/pull/13640))
- \[`pycodestyle`] Fix whitespace-related false positives and false negatives inside type-parameter lists (`E231`, `E251`) ([#13704](https://redirect.github.com/astral-sh/ruff/pull/13704))
- \[`flake8-simplify`] Stabilize preview behavior for `SIM115` so that the rule can detect files
being opened from a wider range of standard-library functions ([#12959](https://redirect.github.com/astral-sh/ruff/pull/12959)).
##### CLI
- Add explanation of fixable in `--statistics` command ([#13774](https://redirect.github.com/astral-sh/ruff/pull/13774))
##### Bug fixes
- \[`pyflakes`] Allow `ipytest` cell magic (`F401`) ([#13745](https://redirect.github.com/astral-sh/ruff/pull/13745))
- \[`flake8-use-pathlib`] Fix `PTH123` false positive when `open` is passed a file descriptor ([#13616](https://redirect.github.com/astral-sh/ruff/pull/13616))
- \[`flake8-bandit`] Detect patterns from multi line SQL statements (`S608`) ([#13574](https://redirect.github.com/astral-sh/ruff/pull/13574))
- \[`flake8-pyi`] - Fix dropped expressions in `PYI030` autofix ([#13727](https://redirect.github.com/astral-sh/ruff/pull/13727))
### [`v0.6.9`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#069)
[Compare Source](https://redirect.github.com/astral-sh/ruff/compare/0.6.8...0.6.9)
##### Preview features
- Fix codeblock dynamic line length calculation for indented docstring examples ([#13523](https://redirect.github.com/astral-sh/ruff/pull/13523))
- \[`refurb`] Mark `FURB118` fix as unsafe ([#13613](https://redirect.github.com/astral-sh/ruff/pull/13613))
##### Rule changes
- \[`pydocstyle`] Don't raise `D208` when last line is non-empty ([#13372](https://redirect.github.com/astral-sh/ruff/pull/13372))
- \[`pylint`] Preserve trivia (i.e. comments) in `PLR5501` autofix ([#13573](https://redirect.github.com/astral-sh/ruff/pull/13573))
##### Configuration
- \[`pyflakes`] Add `allow-unused-imports` setting for `unused-import` rule (`F401`) ([#13601](https://redirect.github.com/astral-sh/ruff/pull/13601))
##### Bug fixes
- Support ruff discovery in pip build environments ([#13591](https://redirect.github.com/astral-sh/ruff/pull/13591))
- \[`flake8-bugbear`] Avoid short circuiting `B017` for multiple context managers ([#13609](https://redirect.github.com/astral-sh/ruff/pull/13609))
- \[`pylint`] Do not offer an invalid fix for `PLR1716` when the comparisons contain parenthesis ([#13527](https://redirect.github.com/astral-sh/ruff/pull/13527))
- \[`pyupgrade`] Fix `UP043` to apply to `collections.abc.Generator` and `collections.abc.AsyncGenerator` ([#13611](https://redirect.github.com/astral-sh/ruff/pull/13611))
- \[`refurb`] Fix handling of slices in tuples for `FURB118`, e.g., `x[:, 1]` ([#13518](https://redirect.github.com/astral-sh/ruff/pull/13518))
##### Documentation
- Update GitHub Action link to `astral-sh/ruff-action` ([#13551](https://redirect.github.com/astral-sh/ruff/pull/13551))
### [`v0.6.8`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#068)
[Compare Source](https://redirect.github.com/astral-sh/ruff/compare/0.6.7...0.6.8)
##### Preview features
- Remove unnecessary parentheses around `match case` clauses ([#13510](https://redirect.github.com/astral-sh/ruff/pull/13510))
- Parenthesize overlong `if` guards in `match..case` clauses ([#13513](https://redirect.github.com/astral-sh/ruff/pull/13513))
- Detect basic wildcard imports in `ruff analyze graph` ([#13486](https://redirect.github.com/astral-sh/ruff/pull/13486))
- \[`pylint`] Implement `boolean-chained-comparison` (`R1716`) ([#13435](https://redirect.github.com/astral-sh/ruff/pull/13435))
##### Rule changes
- \[`lake8-simplify`] Detect `SIM910` when using variadic keyword arguments, i.e., `**kwargs` ([#13503](https://redirect.github.com/astral-sh/ruff/pull/13503))
- \[`pyupgrade`] Avoid false negatives with non-reference shadowed bindings of loop variables (`UP028`) ([#13504](https://redirect.github.com/astral-sh/ruff/pull/13504))
##### Bug fixes
- Detect tuples bound to variadic positional arguments i.e. `*args` ([#13512](https://redirect.github.com/astral-sh/ruff/pull/13512))
- Exit gracefully on broken pipe errors ([#13485](https://redirect.github.com/astral-sh/ruff/pull/13485))
- Avoid panic when analyze graph hits broken pipe ([#13484](https://redirect.github.com/astral-sh/ruff/pull/13484))
##### Performance
- Reuse `BTreeSets` in module resolver ([#13440](https://redirect.github.com/astral-sh/ruff/pull/13440))
- Skip traversal for non-compound statements ([#13441](https://redirect.github.com/astral-sh/ruff/pull/13441))
### [`v0.6.7`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#067)
[Compare Source](https://redirect.github.com/astral-sh/ruff/compare/0.6.6...0.6.7)
##### Preview features
- Add Python version support to ruff analyze CLI ([#13426](https://redirect.github.com/astral-sh/ruff/pull/13426))
- Add `exclude` support to `ruff analyze` ([#13425](https://redirect.github.com/astral-sh/ruff/pull/13425))
- Fix parentheses around return type annotations ([#13381](https://redirect.github.com/astral-sh/ruff/pull/13381))
##### Rule changes
- \[`pycodestyle`] Fix: Don't autofix if the first line ends in a question mark? (D400) ([#13399](https://redirect.github.com/astral-sh/ruff/pull/13399))
##### Bug fixes
- Respect `lint.exclude` in ruff check `--add-noqa` ([#13427](https://redirect.github.com/astral-sh/ruff/pull/13427))
##### Performance
- Avoid tracking module resolver files in Salsa ([#13437](https://redirect.github.com/astral-sh/ruff/pull/13437))
- Use `forget` for module resolver database ([#13438](https://redirect.github.com/astral-sh/ruff/pull/13438))
### [`v0.6.6`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#066)
[Compare Source](https://redirect.github.com/astral-sh/ruff/compare/0.6.5...0.6.6)
##### Preview features
- \[`refurb`] Skip `slice-to-remove-prefix-or-suffix` (`FURB188`) when non-trivial slice steps are present ([#13405](https://redirect.github.com/astral-sh/ruff/pull/13405))
- Add a subcommand to generate dependency graphs ([#13402](https://redirect.github.com/astral-sh/ruff/pull/13402))
##### Formatter
- Fix placement of inline parameter comments ([#13379](https://redirect.github.com/astral-sh/ruff/pull/13379))
##### Server
- Fix off-by one error in the `LineIndex::offset` calculation ([#13407](https://redirect.github.com/astral-sh/ruff/pull/13407))
##### Bug fixes
- \[`fastapi`] Respect FastAPI aliases in route definitions ([#13394](https://redirect.github.com/astral-sh/ruff/pull/13394))
- \[`pydocstyle`] Respect word boundaries when detecting function signature in docs ([#13388](https://redirect.github.com/astral-sh/ruff/pull/13388))
##### Documentation
- Add backlinks to rule overview linter ([#13368](https://redirect.github.com/astral-sh/ruff/pull/13368))
- Fix documentation for editor vim plugin ALE ([#13348](https://redirect.github.com/astral-sh/ruff/pull/13348))
- Fix rendering of `FURB188` docs ([#13406](https://redirect.github.com/astral-sh/ruff/pull/13406))
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.
[ ] If you want to rebase/retry this PR, check this box
This PR contains the following updates:
0.6.5
->0.7.4
Release Notes
astral-sh/ruff (ruff)
### [`v0.7.4`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#074) [Compare Source](https://redirect.github.com/astral-sh/ruff/compare/0.7.3...0.7.4) ##### Preview features - \[`flake8-datetimez`] Detect usages of `datetime.max`/`datetime.min` (`DTZ901`) ([#14288](https://redirect.github.com/astral-sh/ruff/pull/14288)) - \[`flake8-logging`] Implement `root-logger-calls` (`LOG015`) ([#14302](https://redirect.github.com/astral-sh/ruff/pull/14302)) - \[`flake8-no-pep420`] Detect empty implicit namespace packages (`INP001`) ([#14236](https://redirect.github.com/astral-sh/ruff/pull/14236)) - \[`flake8-pyi`] Add "replace with `Self`" fix (`PYI019`) ([#14238](https://redirect.github.com/astral-sh/ruff/pull/14238)) - \[`perflint`] Implement quick-fix for `manual-list-comprehension` (`PERF401`) ([#13919](https://redirect.github.com/astral-sh/ruff/pull/13919)) - \[`pylint`] Implement `shallow-copy-environ` (`W1507`) ([#14241](https://redirect.github.com/astral-sh/ruff/pull/14241)) - \[`ruff`] Implement `none-not-at-end-of-union` (`RUF036`) ([#14314](https://redirect.github.com/astral-sh/ruff/pull/14314)) - \[`ruff`] Implementation `unsafe-markup-call` from `flake8-markupsafe` plugin (`RUF035`) ([#14224](https://redirect.github.com/astral-sh/ruff/pull/14224)) - \[`ruff`] Report problems for `attrs` dataclasses (`RUF008`, `RUF009`) ([#14327](https://redirect.github.com/astral-sh/ruff/pull/14327)) ##### Rule changes - \[`flake8-boolean-trap`] Exclude dunder methods that define operators (`FBT001`) ([#14203](https://redirect.github.com/astral-sh/ruff/pull/14203)) - \[`flake8-pyi`] Add "replace with `Self`" fix (`PYI034`) ([#14217](https://redirect.github.com/astral-sh/ruff/pull/14217)) - \[`flake8-pyi`] Always autofix `duplicate-union-members` (`PYI016`) ([#14270](https://redirect.github.com/astral-sh/ruff/pull/14270)) - \[`flake8-pyi`] Improve autofix for nested and mixed type unions for `unnecessary-type-union` (`PYI055`) ([#14272](https://redirect.github.com/astral-sh/ruff/pull/14272)) - \[`flake8-pyi`] Mark fix as unsafe when type annotation contains comments for `duplicate-literal-member` (`PYI062`) ([#14268](https://redirect.github.com/astral-sh/ruff/pull/14268)) ##### Server - Use the current working directory to resolve settings from `ruff.configuration` ([#14352](https://redirect.github.com/astral-sh/ruff/pull/14352)) ##### Bug fixes - Avoid conflicts between `PLC014` (`useless-import-alias`) and `I002` (`missing-required-import`) by considering `lint.isort.required-imports` for `PLC014` ([#14287](https://redirect.github.com/astral-sh/ruff/pull/14287)) - \[`flake8-type-checking`] Skip quoting annotation if it becomes invalid syntax (`TCH001`) - \[`flake8-pyi`] Avoid using `typing.Self` in stub files pre-Python 3.11 (`PYI034`) ([#14230](https://redirect.github.com/astral-sh/ruff/pull/14230)) - \[`flake8-pytest-style`] Flag `pytest.raises` call with keyword argument `expected_exception` (`PT011`) ([#14298](https://redirect.github.com/astral-sh/ruff/pull/14298)) - \[`flake8-simplify`] Infer "unknown" truthiness for literal iterables whose items are all unpacks (`SIM222`) ([#14263](https://redirect.github.com/astral-sh/ruff/pull/14263)) - \[`flake8-type-checking`] Fix false positives for `typing.Annotated` (`TCH001`) ([#14311](https://redirect.github.com/astral-sh/ruff/pull/14311)) - \[`pylint`] Allow `await` at the top-level scope of a notebook (`PLE1142`) ([#14225](https://redirect.github.com/astral-sh/ruff/pull/14225)) - \[`pylint`] Fix miscellaneous issues in `await-outside-async` detection (`PLE1142`) ([#14218](https://redirect.github.com/astral-sh/ruff/pull/14218)) - \[`pyupgrade`] Avoid applying PEP 646 rewrites in invalid contexts (`UP044`) ([#14234](https://redirect.github.com/astral-sh/ruff/pull/14234)) - \[`pyupgrade`] Detect permutations in redundant open modes (`UP015`) ([#14255](https://redirect.github.com/astral-sh/ruff/pull/14255)) - \[`refurb`] Avoid triggering `hardcoded-string-charset` for reordered sets (`FURB156`) ([#14233](https://redirect.github.com/astral-sh/ruff/pull/14233)) - \[`refurb`] Further special cases added to `verbose-decimal-constructor` (`FURB157`) ([#14216](https://redirect.github.com/astral-sh/ruff/pull/14216)) - \[`refurb`] Use `UserString` instead of non-existent `UserStr` (`FURB189`) ([#14209](https://redirect.github.com/astral-sh/ruff/pull/14209)) - \[`ruff`] Avoid treating lowercase letters as `# noqa` codes (`RUF100`) ([#14229](https://redirect.github.com/astral-sh/ruff/pull/14229)) - \[`ruff`] Do not report when `Optional` has no type arguments (`RUF013`) ([#14181](https://redirect.github.com/astral-sh/ruff/pull/14181)) ##### Documentation - Add "Notebook behavior" section for `F704`, `PLE1142` ([#14266](https://redirect.github.com/astral-sh/ruff/pull/14266)) - Document comment policy around fix safety ([#14300](https://redirect.github.com/astral-sh/ruff/pull/14300)) ### [`v0.7.3`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#073) [Compare Source](https://redirect.github.com/astral-sh/ruff/compare/0.7.2...0.7.3) ##### Preview features - Formatter: Disallow single-line implicit concatenated strings ([#13928](https://redirect.github.com/astral-sh/ruff/pull/13928)) - \[`flake8-pyi`] Include all Python file types for `PYI006` and `PYI066` ([#14059](https://redirect.github.com/astral-sh/ruff/pull/14059)) - \[`flake8-simplify`] Implement `split-of-static-string` (`SIM905`) ([#14008](https://redirect.github.com/astral-sh/ruff/pull/14008)) - \[`refurb`] Implement `subclass-builtin` (`FURB189`) ([#14105](https://redirect.github.com/astral-sh/ruff/pull/14105)) - \[`ruff`] Improve diagnostic messages and docs (`RUF031`, `RUF032`, `RUF034`) ([#14068](https://redirect.github.com/astral-sh/ruff/pull/14068)) ##### Rule changes - Detect items that hash to same value in duplicate sets (`B033`, `PLC0208`) ([#14064](https://redirect.github.com/astral-sh/ruff/pull/14064)) - \[`eradicate`] Better detection of IntelliJ language injection comments (`ERA001`) ([#14094](https://redirect.github.com/astral-sh/ruff/pull/14094)) - \[`flake8-pyi`] Add autofix for `docstring-in-stub` (`PYI021`) ([#14150](https://redirect.github.com/astral-sh/ruff/pull/14150)) - \[`flake8-pyi`] Update `duplicate-literal-member` (`PYI062`) to alawys provide an autofix ([#14188](https://redirect.github.com/astral-sh/ruff/pull/14188)) - \[`pyflakes`] Detect items that hash to same value in duplicate dictionaries (`F601`) ([#14065](https://redirect.github.com/astral-sh/ruff/pull/14065)) - \[`ruff`] Fix false positive for decorators (`RUF028`) ([#14061](https://redirect.github.com/astral-sh/ruff/pull/14061)) ##### Bug fixes - Avoid parsing joint rule codes as distinct codes in `# noqa` ([#12809](https://redirect.github.com/astral-sh/ruff/pull/12809)) - \[`eradicate`] ignore `# language=` in commented-out-code rule (ERA001) ([#14069](https://redirect.github.com/astral-sh/ruff/pull/14069)) - \[`flake8-bugbear`] - do not run `mutable-argument-default` on stubs (`B006`) ([#14058](https://redirect.github.com/astral-sh/ruff/pull/14058)) - \[`flake8-builtins`] Skip lambda expressions in `builtin-argument-shadowing (A002)` ([#14144](https://redirect.github.com/astral-sh/ruff/pull/14144)) - \[`flake8-comprehension`] Also remove trailing comma while fixing `C409` and `C419` ([#14097](https://redirect.github.com/astral-sh/ruff/pull/14097)) - \[`flake8-simplify`] Allow `open` without context manager in `return` statement (`SIM115`) ([#14066](https://redirect.github.com/astral-sh/ruff/pull/14066)) - \[`pylint`] Respect hash-equivalent literals in `iteration-over-set` (`PLC0208`) ([#14063](https://redirect.github.com/astral-sh/ruff/pull/14063)) - \[`pylint`] Update known dunder methods for Python 3.13 (`PLW3201`) ([#14146](https://redirect.github.com/astral-sh/ruff/pull/14146)) - \[`pyupgrade`] - ignore kwarg unpacking for `UP044` ([#14053](https://redirect.github.com/astral-sh/ruff/pull/14053)) - \[`refurb`] Parse more exotic decimal strings in `verbose-decimal-constructor` (`FURB157`) ([#14098](https://redirect.github.com/astral-sh/ruff/pull/14098)) ##### Documentation - Add links to missing related options within rule documentations ([#13971](https://redirect.github.com/astral-sh/ruff/pull/13971)) - Add rule short code to mkdocs tags to allow searching via rule codes ([#14040](https://redirect.github.com/astral-sh/ruff/pull/14040)) ### [`v0.7.2`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#072) [Compare Source](https://redirect.github.com/astral-sh/ruff/compare/0.7.1...0.7.2) ##### Preview features - Fix formatting of single with-item with trailing comment ([#14005](https://redirect.github.com/astral-sh/ruff/pull/14005)) - \[`pyupgrade`] Add PEP 646 `Unpack` conversion to `*` with fix (`UP044`) ([#13988](https://redirect.github.com/astral-sh/ruff/pull/13988)) ##### Rule changes - Regenerate `known_stdlibs.rs` with stdlibs 2024.10.25 ([#13963](https://redirect.github.com/astral-sh/ruff/pull/13963)) - \[`flake8-no-pep420`] Skip namespace package enforcement for PEP 723 scripts (`INP001`) ([#13974](https://redirect.github.com/astral-sh/ruff/pull/13974)) ##### Server - Fix server panic when undoing an edit ([#14010](https://redirect.github.com/astral-sh/ruff/pull/14010)) ##### Bug fixes - Fix issues in discovering ruff in pip build environments ([#13881](https://redirect.github.com/astral-sh/ruff/pull/13881)) - \[`flake8-type-checking`] Fix false positive for `singledispatchmethod` (`TCH003`) ([#13941](https://redirect.github.com/astral-sh/ruff/pull/13941)) - \[`flake8-type-checking`] Treat return type of `singledispatch` as runtime-required (`TCH003`) ([#13957](https://redirect.github.com/astral-sh/ruff/pull/13957)) ##### Documentation - \[`flake8-simplify`] Include caveats of enabling `if-else-block-instead-of-if-exp` (`SIM108`) ([#14019](https://redirect.github.com/astral-sh/ruff/pull/14019)) ### [`v0.7.1`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#071) [Compare Source](https://redirect.github.com/astral-sh/ruff/compare/0.7.0...0.7.1) ##### Preview features - Fix `E221` and `E222` to flag missing or extra whitespace around `==` operator ([#13890](https://redirect.github.com/astral-sh/ruff/pull/13890)) - Formatter: Alternate quotes for strings inside f-strings in preview ([#13860](https://redirect.github.com/astral-sh/ruff/pull/13860)) - Formatter: Join implicit concatenated strings when they fit on a line ([#13663](https://redirect.github.com/astral-sh/ruff/pull/13663)) - \[`pylint`] Restrict `iteration-over-set` to only work on sets of literals (`PLC0208`) ([#13731](https://redirect.github.com/astral-sh/ruff/pull/13731)) ##### Rule changes - \[`flake8-type-checking`] Support auto-quoting when annotations contain quotes ([#11811](https://redirect.github.com/astral-sh/ruff/pull/11811)) ##### Server - Avoid indexing the workspace for single-file mode ([#13770](https://redirect.github.com/astral-sh/ruff/pull/13770)) ##### Bug fixes - Make `ARG002` compatible with `EM101` when raising `NotImplementedError` ([#13714](https://redirect.github.com/astral-sh/ruff/pull/13714)) ##### Other changes - Introduce more Docker tags for Ruff (similar to uv) ([#13274](https://redirect.github.com/astral-sh/ruff/pull/13274)) ### [`v0.7.0`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#070) [Compare Source](https://redirect.github.com/astral-sh/ruff/compare/0.6.9...0.7.0) Check out the [blog post](https://astral.sh/blog/ruff-v0.7.0) for a migration guide and overview of the changes! ##### Breaking changes - The pytest rules `PT001` and `PT023` now default to omitting the decorator parentheses when there are no arguments ([#12838](https://redirect.github.com/astral-sh/ruff/pull/12838), [#13292](https://redirect.github.com/astral-sh/ruff/pull/13292)). This was a change that we attempted to make in Ruff v0.6.0, but only partially made due to an error on our part. See the [blog post](https://astral.sh/blog/ruff-v0.7.0) for more details. - The `useless-try-except` rule (in our `tryceratops` category) has been recoded from `TRY302` to `TRY203` ([#13502](https://redirect.github.com/astral-sh/ruff/pull/13502)). This ensures Ruff's code is consistent with the same rule in the [`tryceratops`](https://redirect.github.com/guilatrova/tryceratops) linter. - The `lint.allow-unused-imports` setting has been removed ([#13677](https://redirect.github.com/astral-sh/ruff/pull/13677)). Use [`lint.pyflakes.allow-unused-imports`](https://docs.astral.sh/ruff/settings/#lint_pyflakes_allowed-unused-imports) instead. ##### Formatter preview style - Normalize implicit concatenated f-string quotes per part ([#13539](https://redirect.github.com/astral-sh/ruff/pull/13539)) ##### Preview linter features - \[`refurb`] implement `hardcoded-string-charset` (FURB156) ([#13530](https://redirect.github.com/astral-sh/ruff/pull/13530)) - \[`refurb`] Count codepoints not bytes for `slice-to-remove-prefix-or-suffix (FURB188)` ([#13631](https://redirect.github.com/astral-sh/ruff/pull/13631)) ##### Rule changes - \[`pylint`] Mark `PLE1141` fix as unsafe ([#13629](https://redirect.github.com/astral-sh/ruff/pull/13629)) - \[`flake8-async`] Consider async generators to be "checkpoints" for `cancel-scope-no-checkpoint` (`ASYNC100`) ([#13639](https://redirect.github.com/astral-sh/ruff/pull/13639)) - \[`flake8-bugbear`] Do not suggest setting parameter `strict=` to `False` in `B905` diagnostic message ([#13656](https://redirect.github.com/astral-sh/ruff/pull/13656)) - \[`flake8-todos`] Only flag the word "TODO", not words starting with "todo" (`TD006`) ([#13640](https://redirect.github.com/astral-sh/ruff/pull/13640)) - \[`pycodestyle`] Fix whitespace-related false positives and false negatives inside type-parameter lists (`E231`, `E251`) ([#13704](https://redirect.github.com/astral-sh/ruff/pull/13704)) - \[`flake8-simplify`] Stabilize preview behavior for `SIM115` so that the rule can detect files being opened from a wider range of standard-library functions ([#12959](https://redirect.github.com/astral-sh/ruff/pull/12959)). ##### CLI - Add explanation of fixable in `--statistics` command ([#13774](https://redirect.github.com/astral-sh/ruff/pull/13774)) ##### Bug fixes - \[`pyflakes`] Allow `ipytest` cell magic (`F401`) ([#13745](https://redirect.github.com/astral-sh/ruff/pull/13745)) - \[`flake8-use-pathlib`] Fix `PTH123` false positive when `open` is passed a file descriptor ([#13616](https://redirect.github.com/astral-sh/ruff/pull/13616)) - \[`flake8-bandit`] Detect patterns from multi line SQL statements (`S608`) ([#13574](https://redirect.github.com/astral-sh/ruff/pull/13574)) - \[`flake8-pyi`] - Fix dropped expressions in `PYI030` autofix ([#13727](https://redirect.github.com/astral-sh/ruff/pull/13727)) ### [`v0.6.9`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#069) [Compare Source](https://redirect.github.com/astral-sh/ruff/compare/0.6.8...0.6.9) ##### Preview features - Fix codeblock dynamic line length calculation for indented docstring examples ([#13523](https://redirect.github.com/astral-sh/ruff/pull/13523)) - \[`refurb`] Mark `FURB118` fix as unsafe ([#13613](https://redirect.github.com/astral-sh/ruff/pull/13613)) ##### Rule changes - \[`pydocstyle`] Don't raise `D208` when last line is non-empty ([#13372](https://redirect.github.com/astral-sh/ruff/pull/13372)) - \[`pylint`] Preserve trivia (i.e. comments) in `PLR5501` autofix ([#13573](https://redirect.github.com/astral-sh/ruff/pull/13573)) ##### Configuration - \[`pyflakes`] Add `allow-unused-imports` setting for `unused-import` rule (`F401`) ([#13601](https://redirect.github.com/astral-sh/ruff/pull/13601)) ##### Bug fixes - Support ruff discovery in pip build environments ([#13591](https://redirect.github.com/astral-sh/ruff/pull/13591)) - \[`flake8-bugbear`] Avoid short circuiting `B017` for multiple context managers ([#13609](https://redirect.github.com/astral-sh/ruff/pull/13609)) - \[`pylint`] Do not offer an invalid fix for `PLR1716` when the comparisons contain parenthesis ([#13527](https://redirect.github.com/astral-sh/ruff/pull/13527)) - \[`pyupgrade`] Fix `UP043` to apply to `collections.abc.Generator` and `collections.abc.AsyncGenerator` ([#13611](https://redirect.github.com/astral-sh/ruff/pull/13611)) - \[`refurb`] Fix handling of slices in tuples for `FURB118`, e.g., `x[:, 1]` ([#13518](https://redirect.github.com/astral-sh/ruff/pull/13518)) ##### Documentation - Update GitHub Action link to `astral-sh/ruff-action` ([#13551](https://redirect.github.com/astral-sh/ruff/pull/13551)) ### [`v0.6.8`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#068) [Compare Source](https://redirect.github.com/astral-sh/ruff/compare/0.6.7...0.6.8) ##### Preview features - Remove unnecessary parentheses around `match case` clauses ([#13510](https://redirect.github.com/astral-sh/ruff/pull/13510)) - Parenthesize overlong `if` guards in `match..case` clauses ([#13513](https://redirect.github.com/astral-sh/ruff/pull/13513)) - Detect basic wildcard imports in `ruff analyze graph` ([#13486](https://redirect.github.com/astral-sh/ruff/pull/13486)) - \[`pylint`] Implement `boolean-chained-comparison` (`R1716`) ([#13435](https://redirect.github.com/astral-sh/ruff/pull/13435)) ##### Rule changes - \[`lake8-simplify`] Detect `SIM910` when using variadic keyword arguments, i.e., `**kwargs` ([#13503](https://redirect.github.com/astral-sh/ruff/pull/13503)) - \[`pyupgrade`] Avoid false negatives with non-reference shadowed bindings of loop variables (`UP028`) ([#13504](https://redirect.github.com/astral-sh/ruff/pull/13504)) ##### Bug fixes - Detect tuples bound to variadic positional arguments i.e. `*args` ([#13512](https://redirect.github.com/astral-sh/ruff/pull/13512)) - Exit gracefully on broken pipe errors ([#13485](https://redirect.github.com/astral-sh/ruff/pull/13485)) - Avoid panic when analyze graph hits broken pipe ([#13484](https://redirect.github.com/astral-sh/ruff/pull/13484)) ##### Performance - Reuse `BTreeSets` in module resolver ([#13440](https://redirect.github.com/astral-sh/ruff/pull/13440)) - Skip traversal for non-compound statements ([#13441](https://redirect.github.com/astral-sh/ruff/pull/13441)) ### [`v0.6.7`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#067) [Compare Source](https://redirect.github.com/astral-sh/ruff/compare/0.6.6...0.6.7) ##### Preview features - Add Python version support to ruff analyze CLI ([#13426](https://redirect.github.com/astral-sh/ruff/pull/13426)) - Add `exclude` support to `ruff analyze` ([#13425](https://redirect.github.com/astral-sh/ruff/pull/13425)) - Fix parentheses around return type annotations ([#13381](https://redirect.github.com/astral-sh/ruff/pull/13381)) ##### Rule changes - \[`pycodestyle`] Fix: Don't autofix if the first line ends in a question mark? (D400) ([#13399](https://redirect.github.com/astral-sh/ruff/pull/13399)) ##### Bug fixes - Respect `lint.exclude` in ruff check `--add-noqa` ([#13427](https://redirect.github.com/astral-sh/ruff/pull/13427)) ##### Performance - Avoid tracking module resolver files in Salsa ([#13437](https://redirect.github.com/astral-sh/ruff/pull/13437)) - Use `forget` for module resolver database ([#13438](https://redirect.github.com/astral-sh/ruff/pull/13438)) ### [`v0.6.6`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#066) [Compare Source](https://redirect.github.com/astral-sh/ruff/compare/0.6.5...0.6.6) ##### Preview features - \[`refurb`] Skip `slice-to-remove-prefix-or-suffix` (`FURB188`) when non-trivial slice steps are present ([#13405](https://redirect.github.com/astral-sh/ruff/pull/13405)) - Add a subcommand to generate dependency graphs ([#13402](https://redirect.github.com/astral-sh/ruff/pull/13402)) ##### Formatter - Fix placement of inline parameter comments ([#13379](https://redirect.github.com/astral-sh/ruff/pull/13379)) ##### Server - Fix off-by one error in the `LineIndex::offset` calculation ([#13407](https://redirect.github.com/astral-sh/ruff/pull/13407)) ##### Bug fixes - \[`fastapi`] Respect FastAPI aliases in route definitions ([#13394](https://redirect.github.com/astral-sh/ruff/pull/13394)) - \[`pydocstyle`] Respect word boundaries when detecting function signature in docs ([#13388](https://redirect.github.com/astral-sh/ruff/pull/13388)) ##### Documentation - Add backlinks to rule overview linter ([#13368](https://redirect.github.com/astral-sh/ruff/pull/13368)) - Fix documentation for editor vim plugin ALE ([#13348](https://redirect.github.com/astral-sh/ruff/pull/13348)) - Fix rendering of `FURB188` docs ([#13406](https://redirect.github.com/astral-sh/ruff/pull/13406))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.
This PR was generated by Mend Renovate. View the repository job log.