mirror of
https://github.com/astral-sh/ruff.git
synced 2026-10-28 10:45:37 +08:00
Bump version to 0.17.0 (#29259)
Co-authored-by: astral-automations-bot[bot] <305554984+astral-automations-bot[bot]@users.noreply.github.com> Co-authored-by: Brent Westbrook <brentrwestbrook@gmail.com>
This commit is contained in:
1 parent
8f362bf4cb
commit
5b27c1ccfa
97 files changed
+987
-763
No files matched your search
@@ -26,6 +26,6 @@ body:
|
||||
attributes:
|
||||
label: Version
|
||||
description: What version of ruff are you using? (see `ruff version`)
|
||||
placeholder: e.g., ruff 0.16.10
|
||||
placeholder: e.g., ruff 0.17.0
|
||||
validations:
|
||||
required: false
|
||||
@@ -13,6 +13,6 @@ body:
|
||||
attributes:
|
||||
label: Version
|
||||
description: What version of ruff are you using? (see `ruff version`)
|
||||
placeholder: e.g., ruff 0.16.10
|
||||
placeholder: e.g., ruff 0.17.0
|
||||
validations:
|
||||
required: false
|
||||
@@ -1,5 +1,83 @@
|
||||
# Breaking Changes
|
||||
|
||||
## 0.17.0
|
||||
|
||||
- **Default to Python 3.11**
|
||||
|
||||
Ruff now defaults to Python 3.11 instead of 3.10 if no Python version is configured using
|
||||
[`target-version`](https://docs.astral.sh/ruff/settings/#target-version) or
|
||||
[`project.requires-python`](https://docs.astral.sh/ruff/configuration/#inferring-the-python-version).
|
||||
|
||||
- **Default to Python 3.15 for syntax errors**
|
||||
|
||||
Ruff now defaults to Python 3.15 instead of 3.14 when checking for syntax errors without a
|
||||
configured Python version. This allows Python 3.15 syntax, including lazy imports, without an
|
||||
explicit target version. The default for version-dependent lint rules is Python 3.11.
|
||||
|
||||
- **Updated default rules**
|
||||
|
||||
Ruff no longer enables [`DTZ001`](https://docs.astral.sh/ruff/rules/call-datetime-without-tzinfo/),
|
||||
[`DTZ005`](https://docs.astral.sh/ruff/rules/call-datetime-now-without-tzinfo/),
|
||||
[`DTZ006`](https://docs.astral.sh/ruff/rules/call-datetime-fromtimestamp/),
|
||||
[`DTZ007`](https://docs.astral.sh/ruff/rules/call-datetime-strptime-without-zone/),
|
||||
[`DTZ011`](https://docs.astral.sh/ruff/rules/call-date-today/),
|
||||
[`DTZ012`](https://docs.astral.sh/ruff/rules/call-date-fromtimestamp/), or
|
||||
[`DTZ901`](https://docs.astral.sh/ruff/rules/datetime-min-max/)
|
||||
by default. These rules restrict the use of timezone-naive dates and datetimes, which are
|
||||
appropriate in many applications. The other `DTZ` rules remain in the default rule set.
|
||||
|
||||
[`F406`](https://docs.astral.sh/ruff/rules/undefined-local-with-nested-import-star-usage/),
|
||||
which corresponds to a syntax error, is now enabled by default.
|
||||
|
||||
- **`datetime` import convention**
|
||||
|
||||
[`unconventional-import-alias`](https://docs.astral.sh/ruff/rules/unconventional-import-alias/)
|
||||
(`ICN001`) now expects the `datetime` module to be imported as `dt`.
|
||||
|
||||
- **Unicode dummy variable names**
|
||||
|
||||
The default [`lint.dummy-variable-rgx`](https://docs.astral.sh/ruff/settings/#lint_dummy-variable-rgx)
|
||||
now treats underscore-prefixed Unicode names, such as `_次` or `_é`, as dummy variables.
|
||||
|
||||
- **Unicode 17**
|
||||
|
||||
Ruff now uses Unicode 17 data for identifier normalization and named character escapes.
|
||||
|
||||
- **Unsafe fixes and manual suggestions in CLI output**
|
||||
|
||||
The default `full` output format now displays all suggested fix diffs, including unsafe fixes
|
||||
and suggestions that require manual review. Enabling
|
||||
[`unsafe-fixes`](https://docs.astral.sh/ruff/settings/#unsafe-fixes) in the configuration or
|
||||
passing `--unsafe-fixes` alongside `--fix` are still required to _apply_ unsafe fixes.
|
||||
|
||||
- **JUnit output**
|
||||
|
||||
The `junit` output format now uses `skipped` instead of `disabled` on `<testsuite>` elements and
|
||||
adds a `skipped` attribute to the root `<testsuites>` element.
|
||||
|
||||
- **Pragma comments and line length**
|
||||
|
||||
The formatter, [`unsorted-imports`](https://docs.astral.sh/ruff/rules/unsorted-imports/) (`I001`),
|
||||
[`line-too-long`](https://docs.astral.sh/ruff/rules/line-too-long/) (`E501`), and
|
||||
[`doc-line-too-long`](https://docs.astral.sh/ruff/rules/doc-line-too-long/) (`W505`) now
|
||||
consistently ignore trailing pragma comments when computing line length. This resolved several
|
||||
bugs involving interactions between these rules but may also cause existing imports to be
|
||||
reformatted.
|
||||
|
||||
- **conda-forge package**
|
||||
|
||||
The conda-forge build no longer depends on Python, now supports linux-riscv64, win-arm64, and
|
||||
linux-ppc64le platforms, and now includes shell completions. However, no longer depending on
|
||||
Python means that `python -m ruff` and `import ruff` will no longer work. Use `ruff` directly from
|
||||
`PATH` instead. PyPI installations and those from the standalone installer are unaffected.
|
||||
|
||||
- **Removal of `ruff-lsp` support**
|
||||
|
||||
Support for `ruff-lsp`, the legacy Python language server [deprecated in Ruff
|
||||
v0.9.5](https://github.com/astral-sh/ruff/releases/tag/0.9.5), has been removed. The Ruff VS Code
|
||||
extension now always uses the native language server; `ruff.nativeServer` is deprecated and
|
||||
ignored. See the [migration guide](https://docs.astral.sh/ruff/editors/migration/).
|
||||
|
||||
## 0.16.0
|
||||
|
||||
- **New default rules**
|
||||
|
||||
+84
-549
@@ -1,590 +1,125 @@
|
||||
# Changelog
|
||||
|
||||
## 0.16.10
|
||||
## 0.17.0
|
||||
|
||||
Released on 2026-10-01.
|
||||
|
||||
### Preview features
|
||||
|
||||
- Add a migration guide for categories ([#28087](https://github.com/astral-sh/ruff/pull/28087))
|
||||
- \[`pyupgrade`\] Add rule for context manager iterator annotations (`UP052`) ([#29000](https://github.com/astral-sh/ruff/pull/29000))
|
||||
|
||||
### Performance
|
||||
|
||||
- Reduce memory used by diagnostics ([#28951](https://github.com/astral-sh/ruff/pull/28951))
|
||||
|
||||
### Server
|
||||
|
||||
- Avoid running `uv format` in untrusted workspaces ([#28873](https://github.com/astral-sh/ruff/pull/28873))
|
||||
|
||||
### Documentation
|
||||
|
||||
- Fix links to moved changelog sections and renamed mdtests ([#28941](https://github.com/astral-sh/ruff/pull/28941))
|
||||
- Add Python 3.15 as a supported version ([#28907](https://github.com/astral-sh/ruff/pull/28907))
|
||||
- Add ty as a type checker example ([#28906](https://github.com/astral-sh/ruff/pull/28906))
|
||||
|
||||
### Other changes
|
||||
|
||||
- Update Rust toolchain to 1.99 and MSRV to 1.97 ([#29047](https://github.com/astral-sh/ruff/pull/29047))
|
||||
|
||||
### Contributors
|
||||
|
||||
- [@ntBre](https://github.com/ntBre)
|
||||
- [@spaceone](https://github.com/spaceone)
|
||||
- [@HardMax71](https://github.com/HardMax71)
|
||||
- [@charliermarsh](https://github.com/charliermarsh)
|
||||
|
||||
## 0.16.9
|
||||
|
||||
Released on 2026-09-24.
|
||||
|
||||
### Preview features
|
||||
|
||||
- \[`ruff`\] Avoid false positives for overloaded division (`RUF069`) ([#28309](https://github.com/astral-sh/ruff/pull/28309))
|
||||
|
||||
### Bug fixes
|
||||
|
||||
- \[`flake8-bugbear`\] Avoid false positives for calls with keyword arguments (`B009`, `B010`, `B043`) ([#28776](https://github.com/astral-sh/ruff/pull/28776))
|
||||
- \[`flake8-tidy-imports`\] Allow lazy imports to be used in deferred annotations (`TID255`) ([#28767](https://github.com/astral-sh/ruff/pull/28767))
|
||||
|
||||
### Rule changes
|
||||
|
||||
- Update LibCST-based fixes for Python 3.15 ([#28616](https://github.com/astral-sh/ruff/pull/28616))
|
||||
- \[`flake8-pyi`\] Mention stubs in the diagnostic message (`PYI002`) ([#28542](https://github.com/astral-sh/ruff/pull/28542))
|
||||
|
||||
### Documentation
|
||||
|
||||
- Fix horizontal overflow on the rules documentation page ([#28699](https://github.com/astral-sh/ruff/pull/28699))
|
||||
- Update rules table with category information ([#28651](https://github.com/astral-sh/ruff/pull/28651))
|
||||
- \[`flake8-annotations`\] Clarify that `ANN401` checks return types in addition to arguments ([#28334](https://github.com/astral-sh/ruff/pull/28334))
|
||||
- \[`flake8-bugbear`\] Document type-checker interaction (`B010`) ([#28509](https://github.com/astral-sh/ruff/pull/28509))
|
||||
- \[`flake8-comprehensions`\] Document `map`/generator exception behavior (`C417`) ([#27794](https://github.com/astral-sh/ruff/pull/27794))
|
||||
- \[`ruff`\] Mention related isort settings (`RUF022`) ([#28719](https://github.com/astral-sh/ruff/pull/28719))
|
||||
|
||||
### Contributors
|
||||
|
||||
- [@qinpei-dev](https://github.com/qinpei-dev)
|
||||
- [@sanjayrohith](https://github.com/sanjayrohith)
|
||||
- [@ntBre](https://github.com/ntBre)
|
||||
- [@webdevsamran](https://github.com/webdevsamran)
|
||||
- [@zaniebot](https://github.com/zaniebot)
|
||||
- [@ewdurbin](https://github.com/ewdurbin)
|
||||
- [@MichaReiser](https://github.com/MichaReiser)
|
||||
- [@spaceone](https://github.com/spaceone)
|
||||
- [@IbrahimKhan12](https://github.com/IbrahimKhan12)
|
||||
- [@devtechedge](https://github.com/devtechedge)
|
||||
- [@GruffElixir](https://github.com/GruffElixir)
|
||||
|
||||
## 0.16.8
|
||||
|
||||
Released on 2026-09-16.
|
||||
|
||||
### Bug fixes
|
||||
|
||||
- Visit functional `TypedDict` keyword arguments correctly ([#28584](https://github.com/astral-sh/ruff/pull/28584))
|
||||
- \[`flake8-simplify`\] Detect nested `async with` under sync parent (`SIM117`) ([#27821](https://github.com/astral-sh/ruff/pull/27821))
|
||||
- \[`flake8-simplify`\] Preserve operand order in `SIM109` fix ([#27824](https://github.com/astral-sh/ruff/pull/27824))
|
||||
- \[`pyupgrade`\] Preserve required parentheses in multiline `UP040` fixes ([#28164](https://github.com/astral-sh/ruff/pull/28164))
|
||||
- \[`pyupgrade`\] Skip `TypeVarTuple` and `ParamSpec` conversions with bounds or constraints (`UP040`, `UP046`, `UP047`) ([#28505](https://github.com/astral-sh/ruff/pull/28505))
|
||||
|
||||
### Rule changes
|
||||
|
||||
- Add support for `__lazy_modules__` ([#28459](https://github.com/astral-sh/ruff/pull/28459))
|
||||
- Recognize PEP-728 `TypedDict` class keywords ([#28533](https://github.com/astral-sh/ruff/pull/28533))
|
||||
- Recognize quoted types in `typing.TypeForm` ([#28507](https://github.com/astral-sh/ruff/pull/28507))
|
||||
- Support conditional assignment to `__lazy_modules__` ([#28491](https://github.com/astral-sh/ruff/pull/28491))
|
||||
- \[`flake8-type-checking`\] Prefer lazy imports over `TYPE_CHECKING` on Python 3.15 and later (`TC001`, `TC002`, `TC003`) ([#28541](https://github.com/astral-sh/ruff/pull/28541))
|
||||
- \[`pyupgrade`\] Make the fix for `UP040` always unsafe ([#28526](https://github.com/astral-sh/ruff/pull/28526))
|
||||
- \[`pyupgrade`\] Stop recommending deprecated `ByteString` aliases (`UP035`) ([#28498](https://github.com/astral-sh/ruff/pull/28498))
|
||||
- \[`ruff`, `flake8-use-pathlib`\] Recognize the `parent_mode` argument (`RUF064`, `PTH103`) ([#28528](https://github.com/astral-sh/ruff/pull/28528))
|
||||
- \[`ruff`\] Detect `\Z` in `pytest.raises()` match patterns (`RUF043`) ([#28598](https://github.com/astral-sh/ruff/pull/28598))
|
||||
|
||||
### CLI
|
||||
|
||||
- Use rule name and code in formatter incompatibility warnings ([#28571](https://github.com/astral-sh/ruff/pull/28571))
|
||||
|
||||
### Configuration
|
||||
|
||||
- \[`flake8-tidy-imports`\] Add `extend-banned-api` ([#28644](https://github.com/astral-sh/ruff/pull/28644))
|
||||
|
||||
### Contributors
|
||||
|
||||
- [@VedantMadane](https://github.com/VedantMadane)
|
||||
- [@alzeph](https://github.com/alzeph)
|
||||
- [@charliermarsh](https://github.com/charliermarsh)
|
||||
- [@fredrikblau](https://github.com/fredrikblau)
|
||||
- [@ntBre](https://github.com/ntBre)
|
||||
- [@zsol](https://github.com/zsol)
|
||||
- [@Aniket-a14](https://github.com/Aniket-a14)
|
||||
- [@r-b-1](https://github.com/r-b-1)
|
||||
|
||||
## 0.16.7
|
||||
|
||||
Released on 2026-09-10.
|
||||
|
||||
### Preview features
|
||||
|
||||
- \[`ruff`\] Add rule for default values on method receivers (`RUF077`) ([#26700](https://github.com/astral-sh/ruff/pull/26700))
|
||||
- \[`ruff`\] Recognize `re.prefixmatch` (`RUF039`, `RUF055`) ([#28311](https://github.com/astral-sh/ruff/pull/28311))
|
||||
|
||||
### Bug fixes
|
||||
|
||||
- Alternate nested quotes inside format spec interpolations ([#28259](https://github.com/astral-sh/ruff/pull/28259))
|
||||
- \[`flake8-implicit-str-concat`\] Mark fix unsafe when it creates a docstring (`ISC003`) ([#27981](https://github.com/astral-sh/ruff/pull/27981))
|
||||
- \[`flake8-tidy-imports`\] Skip fixes for multi-member imports (`TID254`) ([#26584](https://github.com/astral-sh/ruff/pull/26584))
|
||||
- \[`pylint`\] Gate `ImportCycleError` on Python 3.15 (`PLW0133`) ([#28310](https://github.com/astral-sh/ruff/pull/28310))
|
||||
|
||||
### Rule changes
|
||||
|
||||
- Correct `D211` and `D203` rule conflict diagnostic ([#28444](https://github.com/astral-sh/ruff/pull/28444))
|
||||
- Recognize `slice` and `frozendict` generics ([#28477](https://github.com/astral-sh/ruff/pull/28477))
|
||||
- Stop defining `__cached__` for Python 3.15 ([#28476](https://github.com/astral-sh/ruff/pull/28476))
|
||||
- \[`pyupgrade`\] Stop recommending removed `typing.no_type_check_decorator` (`UP035`) ([#28475](https://github.com/astral-sh/ruff/pull/28475))
|
||||
|
||||
### Performance
|
||||
|
||||
- Reuse parser name lookups when interning ([#28399](https://github.com/astral-sh/ruff/pull/28399))
|
||||
- Speed up inherited configuration resolution ([#28299](https://github.com/astral-sh/ruff/pull/28299))
|
||||
|
||||
### Documentation
|
||||
|
||||
- Fix `line-length` path in `--config` example ([#28392](https://github.com/astral-sh/ruff/pull/28392))
|
||||
- Remove the "Who’s Using Ruff?" list ([#28455](https://github.com/astral-sh/ruff/pull/28455))
|
||||
|
||||
### Other changes
|
||||
|
||||
- Embed archive checksums in the shell installer ([#28281](https://github.com/astral-sh/ruff/pull/28281))
|
||||
|
||||
### Contributors
|
||||
|
||||
- [@The-Compiler](https://github.com/The-Compiler)
|
||||
- [@mdiniz97](https://github.com/mdiniz97)
|
||||
- [@zsol](https://github.com/zsol)
|
||||
- [@gorewilliams](https://github.com/gorewilliams)
|
||||
- [@RafaelJohn9](https://github.com/RafaelJohn9)
|
||||
- [@qatcod](https://github.com/qatcod)
|
||||
- [@zanieb](https://github.com/zanieb)
|
||||
- [@MichaReiser](https://github.com/MichaReiser)
|
||||
- [@ntBre](https://github.com/ntBre)
|
||||
- [@charliermarsh](https://github.com/charliermarsh)
|
||||
- [@nightt5879](https://github.com/nightt5879)
|
||||
- [@jonathandung](https://github.com/jonathandung)
|
||||
- [@jogo-openai](https://github.com/jogo-openai)
|
||||
|
||||
## 0.16.6
|
||||
|
||||
Released on 2026-09-03.
|
||||
|
||||
### Preview features
|
||||
|
||||
- Move `pytest-fixture-autouse` to the `restriction` category ([#28219](https://github.com/astral-sh/ruff/pull/28219))
|
||||
- \[`flake8-pytest-style`\] Add an autofix for `PT020` ([#27993](https://github.com/astral-sh/ruff/pull/27993))
|
||||
- \[`flake8-tidy-imports`\] Prevent fix loop between `TID254` and `TID255` ([#28262](https://github.com/astral-sh/ruff/pull/28262))
|
||||
- \[`isort`\] Exclude pragma comments from line length calculation (`I001`) ([#27313](https://github.com/astral-sh/ruff/pull/27313))
|
||||
|
||||
### Bug fixes
|
||||
|
||||
- Validate unary expressions when parsing ([#28233](https://github.com/astral-sh/ruff/pull/28233))
|
||||
- \[`flake8-async`, `pylint`\] Recognize `builtins.open` (`ASYNC230`, `PLW1514`) ([#28021](https://github.com/astral-sh/ruff/pull/28021))
|
||||
- \[`flake8-bugbear`\] Fix panic on `match` subjects (`B031`) ([#27781](https://github.com/astral-sh/ruff/pull/27781))
|
||||
- \[`flake8-datetimez`\] Reject `tzinfo=None` for `datetime` bounds (`DTZ901`) ([#28022](https://github.com/astral-sh/ruff/pull/28022))
|
||||
- \[`flake8-pytest-style`\] Avoid duplicate `PT017` diagnostics ([#27918](https://github.com/astral-sh/ruff/pull/27918))
|
||||
- \[`ruff`\] Remove `lint.external` hint for Ruff-specific suppressions (`RUF102`) ([#27923](https://github.com/astral-sh/ruff/pull/27923))
|
||||
|
||||
### Rule changes
|
||||
|
||||
- \[`flake8-use-pathlib`\] Add display-only fix for `os.listdir` (`PTH208`) ([#28027](https://github.com/astral-sh/ruff/pull/28027))
|
||||
|
||||
### Documentation
|
||||
|
||||
- Add another example and glob reference for `lint.per-file-ignores` ([#28106](https://github.com/astral-sh/ruff/pull/28106))
|
||||
- Add duplicate work guidance ([#28229](https://github.com/astral-sh/ruff/pull/28229))
|
||||
- \[`flake8-async`\] Document thread offloading (`ASYNC240`) ([#28008](https://github.com/astral-sh/ruff/pull/28008))
|
||||
- \[`pyupgrade`\] Clarify default `encoding` argument handling (`UP012`) ([#27315](https://github.com/astral-sh/ruff/pull/27315))
|
||||
|
||||
### Other changes
|
||||
|
||||
- Allow unary plus in match patterns on Python 3.15 ([#28231](https://github.com/astral-sh/ruff/pull/28231))
|
||||
|
||||
### Contributors
|
||||
|
||||
- [@flying-sheep](https://github.com/flying-sheep)
|
||||
- [@pikammmmm](https://github.com/pikammmmm)
|
||||
- [@fly1d](https://github.com/fly1d)
|
||||
- [@waterWang](https://github.com/waterWang)
|
||||
- [@Pierre-Sassoulas](https://github.com/Pierre-Sassoulas)
|
||||
- [@ntBre](https://github.com/ntBre)
|
||||
- [@jelle-openai](https://github.com/jelle-openai)
|
||||
- [@ericbuehl](https://github.com/ericbuehl)
|
||||
- [@tjkuson](https://github.com/tjkuson)
|
||||
- [@AbhinavMir](https://github.com/AbhinavMir)
|
||||
- [@Whning0513](https://github.com/Whning0513)
|
||||
- [@chirizxc](https://github.com/chirizxc)
|
||||
|
||||
## 0.16.5
|
||||
|
||||
Released on 2026-08-27.
|
||||
|
||||
### Preview features
|
||||
|
||||
- Allow rules without codes ([#28049](https://github.com/astral-sh/ruff/pull/28049))
|
||||
- Introduce category selectors ([#27666](https://github.com/astral-sh/ruff/pull/27666))
|
||||
- Update preview default rules and categories ([#27877](https://github.com/astral-sh/ruff/pull/27877))
|
||||
|
||||
### Bug fixes
|
||||
|
||||
- \[`flake8-async`\] Detect blocking generic HTTP requests (`ASYNC210`) ([#28024](https://github.com/astral-sh/ruff/pull/28024))
|
||||
- \[`flake8-datetimez`\] Allow timezone-safe `strptime` chains (`DTZ007`) ([#28023](https://github.com/astral-sh/ruff/pull/28023))
|
||||
- \[`flake8-simplify`\] Respect side effects in `lambda` defaults (`SIM401`) ([#28000](https://github.com/astral-sh/ruff/pull/28000))
|
||||
|
||||
### Server
|
||||
|
||||
- Fix duplicated "of" in `ClientOptions` doc comment ([#27978](https://github.com/astral-sh/ruff/pull/27978))
|
||||
|
||||
### Documentation
|
||||
|
||||
- Document rule acceptance guidelines ([#27910](https://github.com/astral-sh/ruff/pull/27910))
|
||||
- Document the new category selectors ([#27906](https://github.com/astral-sh/ruff/pull/27906))
|
||||
|
||||
### Contributors
|
||||
|
||||
- [@AlexWaygood](https://github.com/AlexWaygood)
|
||||
- [@sharkdp](https://github.com/sharkdp)
|
||||
- [@jelle-openai](https://github.com/jelle-openai)
|
||||
- [@charliermarsh](https://github.com/charliermarsh)
|
||||
- [@ntBre](https://github.com/ntBre)
|
||||
- [@aarushkandukoori](https://github.com/aarushkandukoori)
|
||||
|
||||
## 0.16.4
|
||||
|
||||
Released on 2026-08-20.
|
||||
|
||||
### Preview features
|
||||
|
||||
- \[`flake8-use-pathlib`\] Add autofix for `PTH116` ([#26460](https://github.com/astral-sh/ruff/pull/26460))
|
||||
- \[`refurb`\] Restrict `delete-full-slice` to lists (`FURB131`) ([#27711](https://github.com/astral-sh/ruff/pull/27711))
|
||||
- \[`refurb`\] Skip `FURB101` and `FURB103` when the `open` argument is a file descriptor ([#27643](https://github.com/astral-sh/ruff/pull/27643))
|
||||
|
||||
### Bug fixes
|
||||
|
||||
- Fix `InvalidInstruction` on Windows CPUs that do not support `POPCNT` ([#27803](https://github.com/astral-sh/ruff/pull/27803))
|
||||
- \[`pyflakes`\] Emit semantic syntax errors in string type definitions as `F722` ([#27835](https://github.com/astral-sh/ruff/pull/27835))
|
||||
- \[`pylint`\] Allow `os._exit` imports in `import-private-name` (`PLC2701`) ([#27738](https://github.com/astral-sh/ruff/pull/27738))
|
||||
|
||||
### Rule changes
|
||||
|
||||
- [syntax-errors] Align mixed t-string/bytes error message with CPython 3.14 ([#27766](https://github.com/astral-sh/ruff/pull/27766))
|
||||
- \[`ruff`\] Add `ctypes.LittleEndianStructure` and related types to existing exception (`RUF012`) ([#27753](https://github.com/astral-sh/ruff/pull/27753))
|
||||
- [syntax-errors] Detect duplicate keyword arguments ([#17804](https://github.com/astral-sh/ruff/pull/17804))
|
||||
- [syntax-errors] Detect parameters declared `nonlocal` ([#27628](https://github.com/astral-sh/ruff/pull/27628))
|
||||
|
||||
### Server
|
||||
|
||||
- Offer display-only fixes and mark safe fixes preferred ([#27807](https://github.com/astral-sh/ruff/pull/27807))
|
||||
- Support pull diagnostics for notebook cells ([#27779](https://github.com/astral-sh/ruff/pull/27779))
|
||||
|
||||
### Documentation
|
||||
|
||||
- Add default indicator to rules table ([#27724](https://github.com/astral-sh/ruff/pull/27724))
|
||||
- Fix broken link to Python docs ([#27757](https://github.com/astral-sh/ruff/pull/27757))
|
||||
|
||||
### Other changes
|
||||
|
||||
- Fix s390x stacker assembly in release builds ([#27776](https://github.com/astral-sh/ruff/pull/27776))
|
||||
- Guarantee minimum stack size when parsing a module, standalone expression, and suites ([#25464](https://github.com/astral-sh/ruff/pull/25464))
|
||||
- Reduce configuration deserialization code size ([#27924](https://github.com/astral-sh/ruff/pull/27924))
|
||||
- Check packed AST index bounds ([#27849](https://github.com/astral-sh/ruff/pull/27849))
|
||||
|
||||
### Contributors
|
||||
|
||||
- [@AbhinavMir](https://github.com/AbhinavMir)
|
||||
- [@eduardorittner](https://github.com/eduardorittner)
|
||||
- [@royb3](https://github.com/royb3)
|
||||
- [@MichaReiser](https://github.com/MichaReiser)
|
||||
- [@carljm](https://github.com/carljm)
|
||||
- [@rosstitmarsh](https://github.com/rosstitmarsh)
|
||||
- [@ntBre](https://github.com/ntBre)
|
||||
- [@zaniebot](https://github.com/zaniebot)
|
||||
- [@ewdurbin](https://github.com/ewdurbin)
|
||||
- [@woodruffw](https://github.com/woodruffw)
|
||||
- [@Sacrimento](https://github.com/Sacrimento)
|
||||
- [@lakshayxi](https://github.com/lakshayxi)
|
||||
- [@WhiteFox0-0](https://github.com/WhiteFox0-0)
|
||||
- [@baltasarblanco](https://github.com/baltasarblanco)
|
||||
|
||||
## 0.16.3
|
||||
|
||||
Released on 2026-08-13.
|
||||
|
||||
### Preview features
|
||||
|
||||
- \[`pylint`\] Fix false negatives on negative numbers (`PLR6104`) ([#27251](https://github.com/astral-sh/ruff/pull/27251))
|
||||
- \[`pyupgrade`\] Add rule to replace `while 1` with `while True` (`UP048`) ([#27190](https://github.com/astral-sh/ruff/pull/27190))
|
||||
|
||||
### Bug fixes
|
||||
|
||||
- \[`flake8-bandit`\] Also check keyword arguments (`S602`, `S603`, `S607`, `S609`) ([#27687](https://github.com/astral-sh/ruff/pull/27687))
|
||||
- \[`pylint`\] Allow `continue` in `finally` on Python 3.8 ([#27626](https://github.com/astral-sh/ruff/pull/27626))
|
||||
- \[`pylint`\] Fix `PLE1307` false positive with bools ([#27651](https://github.com/astral-sh/ruff/pull/27651))
|
||||
- \[`pylint`\] Fix false positives and negatives with `%b` format character (`PLE1300`, `PLE1307`) ([#27560](https://github.com/astral-sh/ruff/pull/27560))
|
||||
- \[`pylint`\] Improve handling of concatenated strings (`PLE1300`) ([#27659](https://github.com/astral-sh/ruff/pull/27659))
|
||||
|
||||
### Rule changes
|
||||
|
||||
- \[`numpy`\] Make `np.chararray` autofix backwards-compatible (`NPY201`) ([#27527](https://github.com/astral-sh/ruff/pull/27527))
|
||||
|
||||
### Performance
|
||||
|
||||
- Enable PGO for Linux x86-64 Ruff releases ([#27570](https://github.com/astral-sh/ruff/pull/27570))
|
||||
- Enable PGO for Linux ARM64 Ruff releases ([#27574](https://github.com/astral-sh/ruff/pull/27574))
|
||||
- Enable PGO for Windows x86-64 Ruff releases ([#27573](https://github.com/astral-sh/ruff/pull/27573))
|
||||
- Enable PGO for macOS ARM64 Ruff releases ([#27572](https://github.com/astral-sh/ruff/pull/27572))
|
||||
- Reduce `Expr` size to 64 bytes ([#27591](https://github.com/astral-sh/ruff/pull/27591))
|
||||
|
||||
### CLI
|
||||
|
||||
- Hyperlink rule codes in `ruff check --statistics` output ([#27646](https://github.com/astral-sh/ruff/pull/27646))
|
||||
|
||||
### Documentation
|
||||
|
||||
- \[`ruff`\] Also suggest `asyncio.TaskGroup` (`RUF006`) ([#27461](https://github.com/astral-sh/ruff/pull/27461))
|
||||
|
||||
### Other changes
|
||||
|
||||
- Use mimalloc v3 ([#27586](https://github.com/astral-sh/ruff/pull/27586))
|
||||
|
||||
### Contributors
|
||||
|
||||
- [@Andrej730](https://github.com/Andrej730)
|
||||
- [@alonfaraj](https://github.com/alonfaraj)
|
||||
- [@romero-deshaw](https://github.com/romero-deshaw)
|
||||
- [@Avasam](https://github.com/Avasam)
|
||||
- [@tjkuson](https://github.com/tjkuson)
|
||||
- [@charliermarsh](https://github.com/charliermarsh)
|
||||
- [@chirizxc](https://github.com/chirizxc)
|
||||
- [@saberoueslati](https://github.com/saberoueslati)
|
||||
- [@MichaReiser](https://github.com/MichaReiser)
|
||||
|
||||
## 0.16.2
|
||||
|
||||
Released on 2026-08-06.
|
||||
|
||||
### Bug fixes
|
||||
|
||||
- \[`flake8-pyi`\] Avoid false positives on `singledispatch` functions (`PYI041`) ([#27335](https://github.com/astral-sh/ruff/pull/27335))
|
||||
|
||||
### Server
|
||||
|
||||
- Register formatting capabilities dynamically to exclude TOML files ([#27332](https://github.com/astral-sh/ruff/pull/27332))
|
||||
|
||||
### Contributors
|
||||
|
||||
- [@MeGaGiGaGon](https://github.com/MeGaGiGaGon)
|
||||
- [@charliermarsh](https://github.com/charliermarsh)
|
||||
- [@epage](https://github.com/epage)
|
||||
- [@sharkdp](https://github.com/sharkdp)
|
||||
- [@ntBre](https://github.com/ntBre)
|
||||
|
||||
## 0.16.1
|
||||
|
||||
Released on 2026-07-30.
|
||||
|
||||
### Preview features
|
||||
|
||||
- Add an option to opt out of human-readable names ([#27160](https://github.com/astral-sh/ruff/pull/27160))
|
||||
- \[`flake8-pytest-style`\] Make fixes safe by default and unsafe only when comments are present (`PT018`) ([#27201](https://github.com/astral-sh/ruff/pull/27201))
|
||||
- \[`pyupgrade`\] Skip fix when a defaulted `TypeVar` precedes a non-defaulted one (`UP040`, `UP046`, `UP047`) ([#27133](https://github.com/astral-sh/ruff/pull/27133))
|
||||
- \[`ruff`\] Fix false positive with unpacked arguments (`RUF065`) ([#26959](https://github.com/astral-sh/ruff/pull/26959))
|
||||
|
||||
### Bug fixes
|
||||
|
||||
- Bump `gen-lsp-types` to gracefully handle unknown enumeration values in LSP messages ([#27230](https://github.com/astral-sh/ruff/pull/27230))
|
||||
- \[`flake8-bugbear`\] Mark `range` as immutable (`B008`) ([#27247](https://github.com/astral-sh/ruff/pull/27247))
|
||||
- \[`flake8-comprehensions`\] NFKC-normalize keyword names in `C408` fix ([#26813](https://github.com/astral-sh/ruff/pull/26813))
|
||||
- \[`flake8-return`\] Fix false positive when variable is read in `finally` clause (`RET504`) ([#25441](https://github.com/astral-sh/ruff/pull/25441))
|
||||
- \[`pydocstyle`\] Skip section detection inside RST directive bodies (`D214`, `D405`, `D413`) ([#23635](https://github.com/astral-sh/ruff/pull/23635))
|
||||
- \[`refurb`\] Parenthesize `yield` arguments in the `FURB192` fix ([#27192](https://github.com/astral-sh/ruff/pull/27192))
|
||||
|
||||
### Rule changes
|
||||
|
||||
- \[`flake8-pytest-style`\] Mark `PT022` fixes as unsafe ([#26440](https://github.com/astral-sh/ruff/pull/26440))
|
||||
- \[`refurb`\] Mark fixes that remove unknown separators as unsafe (`FURB105`) ([#27200](https://github.com/astral-sh/ruff/pull/27200))
|
||||
|
||||
### Server
|
||||
|
||||
- Fix indexing of excluded nested Ruff workspaces ([#27303](https://github.com/astral-sh/ruff/pull/27303))
|
||||
- Lint TOML files in the LSP ([#26862](https://github.com/astral-sh/ruff/pull/26862))
|
||||
|
||||
### Documentation
|
||||
|
||||
- Cover `pycon` Markdown formatting ([#27153](https://github.com/astral-sh/ruff/pull/27153))
|
||||
- \[`flake8-bandit`\] Document `TYPE_CHECKING` exception (`S101`) ([#27004](https://github.com/astral-sh/ruff/pull/27004))
|
||||
- \[`flake8-import-conventions`\] Document that `extend-aliases` can override default aliases ([#27191](https://github.com/astral-sh/ruff/pull/27191))
|
||||
- \[`pylint`\] Add missing fix safety gotchas for `non-augmented-assignment` (`PLR6104`) ([#27250](https://github.com/astral-sh/ruff/pull/27250))
|
||||
|
||||
### Other changes
|
||||
|
||||
- Reduce syntax error noise by swallowing dedents like indents ([#27170](https://github.com/astral-sh/ruff/pull/27170))
|
||||
- Vendor latest annotate-snippets ([#27033](https://github.com/astral-sh/ruff/pull/27033))
|
||||
|
||||
### Contributors
|
||||
|
||||
- [@bxff](https://github.com/bxff)
|
||||
- [@anishgirianish](https://github.com/anishgirianish)
|
||||
- [@Avasam](https://github.com/Avasam)
|
||||
- [@epage](https://github.com/epage)
|
||||
- [@LHMQ878](https://github.com/LHMQ878)
|
||||
- [@MichaReiser](https://github.com/MichaReiser)
|
||||
- [@ntBre](https://github.com/ntBre)
|
||||
- [@HarshalPatel1972](https://github.com/HarshalPatel1972)
|
||||
- [@mjpieters](https://github.com/mjpieters)
|
||||
- [@joshuavetos](https://github.com/joshuavetos)
|
||||
- [@jesco-absolute](https://github.com/jesco-absolut)
|
||||
- [@vidigoat](https://github.com/vidigoat)
|
||||
- [@baltasarblanco](https://github.com/baltasarblanco)
|
||||
- [@ribru17](https://github.com/ribru17)
|
||||
- [@oh-summy](https://github.com/oh-summy)
|
||||
- [@Jayashanker-Padishala](https://github.com/Jayashanker-Padishala)
|
||||
|
||||
## 0.16.0
|
||||
|
||||
Released on 2026-07-23.
|
||||
|
||||
Check out the [blog post](https://astral.sh/blog/ruff-v0.16.0) for a migration
|
||||
guide and overview of the changes!
|
||||
Released on 2026-10-09.
|
||||
|
||||
### Breaking changes
|
||||
|
||||
- Ruff now enables a much larger set of rules by default (413, up from 59). See the blog post for
|
||||
more details and the new [Default Rules](https://docs.astral.sh/ruff/default-rules/) page for a
|
||||
full listing of the enabled rules. Note that this is primarily an expansion, but 18 of the more
|
||||
opinionated pycodestyle (`E`) and pyflakes (`F`) rules have been removed from the default set:
|
||||
`E401`, `E402`, `E701`, `E702`, `E703`, `E711`, `E712`, `E713`, `E714`, `E721`, `E731`, `E741`,
|
||||
`E742`, `E743`, `F403`, `F405`, `F406`, and `F722`.
|
||||
- Update the default and latest Python versions for 3.15 ([#28792](https://github.com/astral-sh/ruff/pull/28792))
|
||||
|
||||
- Ruff can now format Python code blocks in Markdown files and will do this by default. See the
|
||||
[documentation](https://docs.astral.sh/ruff/formatter/#markdown-code-formatting) for more details.
|
||||
Ruff now defaults to Python 3.11 instead of 3.10 when no Python version is configured through
|
||||
[`target-version`](https://docs.astral.sh/ruff/settings/#target-version) or
|
||||
[`requires-python`](https://docs.astral.sh/ruff/configuration/#inferring-the-python-version). When
|
||||
checking for syntax errors without a configured Python version, Ruff now defaults to Python 3.15
|
||||
instead of 3.14.
|
||||
|
||||
- Ruff now supports `ruff: ignore` comments at the ends of lines, like `noqa` comments, or on the line preceding a diagnostic. For example, these both suppress an [`unused-import`](https://docs.astral.sh/ruff/rules/unused-import/) (`F401`) diagnostic:
|
||||
- Update the default rule set ([#28786](https://github.com/astral-sh/ruff/pull/28786))
|
||||
|
||||
```py
|
||||
import math # ruff: ignore[F401]
|
||||
Several of the `flake8-datetimez` rules
|
||||
([`DTZ001`](https://docs.astral.sh/ruff/rules/call-datetime-without-tzinfo/),
|
||||
[`DTZ005`](https://docs.astral.sh/ruff/rules/call-datetime-now-without-tzinfo/),
|
||||
[`DTZ006`](https://docs.astral.sh/ruff/rules/call-datetime-fromtimestamp/),
|
||||
[`DTZ007`](https://docs.astral.sh/ruff/rules/call-datetime-strptime-without-zone/),
|
||||
[`DTZ011`](https://docs.astral.sh/ruff/rules/call-date-today/),
|
||||
[`DTZ012`](https://docs.astral.sh/ruff/rules/call-date-fromtimestamp/), and
|
||||
[`DTZ901`](https://docs.astral.sh/ruff/rules/datetime-min-max/)) are no longer enabled by default,
|
||||
while [`undefined-local-with-nested-import-star-usage`](https://docs.astral.sh/ruff/rules/undefined-local-with-nested-import-star-usage/)
|
||||
(`F406`), which corresponds to a syntax error, is now enabled by default.
|
||||
|
||||
# ruff: ignore[F401]
|
||||
import os
|
||||
```
|
||||
- Update Rust crate quick-junit to 0.8.0 ([#27295](https://github.com/astral-sh/ruff/pull/27295))
|
||||
|
||||
- Fixes are now shown in `check` and `format --check` output:
|
||||
JUnit output now uses a `skipped` attribute instead of `disabled` on `<testsuite>` elements and
|
||||
includes a `skipped` attribute on the root `<testsuites>` element.
|
||||
|
||||
````console
|
||||
❯ ruff format --check .
|
||||
unformatted: File would be reformatted
|
||||
--> try.md:1:1
|
||||
|
|
||||
1 | ```python
|
||||
- import math
|
||||
2 + import math
|
||||
3 | ```
|
||||
|
|
||||
- \[`flake8-import-conventions`\] Add `datetime as dt` as a conventional alias (`ICN001`) ([#28790](https://github.com/astral-sh/ruff/pull/28790))
|
||||
|
||||
1 file would be reformatted
|
||||
````
|
||||
- Support Unicode dummy variable names ([#28722](https://github.com/astral-sh/ruff/pull/28722))
|
||||
|
||||
This example also shows off the Markdown formatting.
|
||||
The default [`lint.dummy-variable-rgx`](https://docs.astral.sh/ruff/settings/#lint_dummy-variable-rgx)
|
||||
now recognizes underscore-prefixed Unicode names, such as `_次`, as dummy variables.
|
||||
|
||||
- `format --check` now supports the same output formats as the linter, including the `github` and
|
||||
`gitlab` outputs for rendering annotations in CI:
|
||||
- Update to Unicode 17 ([#21229](https://github.com/astral-sh/ruff/pull/21229), [#28784](https://github.com/astral-sh/ruff/pull/28784))
|
||||
|
||||
```console
|
||||
❯ ruff format --check --output-format github .
|
||||
::error title=ruff (unformatted),file=try.md,line=2,col=8,endLine=2,endColumn=10::try.md:2:8: unformatted: File would be reformatted
|
||||
```
|
||||
Ruff now uses Unicode 17 data for identifier normalization and named character escapes (`"\N{...}"`).
|
||||
|
||||
See the CLI help or [documentation](https://docs.astral.sh/ruff/settings/#output-format) for the
|
||||
full list of supported formats.
|
||||
- Always show unsafe and display-only fixes in the CLI ([#27810](https://github.com/astral-sh/ruff/pull/27810))
|
||||
|
||||
- The `filename`, `location`, `end_location`, `fix.edits[].location`, and `fix.edits[].end_location`
|
||||
fields in the JSON output format may now be `null` rather than defaulting to the empty string and
|
||||
row 1, column 1, respectively.
|
||||
The default `full` output format now shows unsafe fixes and suggestions requiring manual review,
|
||||
regardless of the [`unsafe-fixes`](https://docs.astral.sh/ruff/settings/#unsafe-fixes) setting.
|
||||
Actually applying unsafe fixes still requires explicit opt-in.
|
||||
|
||||
- Remove the Python dependency from conda-forge builds ([conda-forge/ruff-feedstock#361](https://github.com/conda-forge/ruff-feedstock/pull/361))
|
||||
|
||||
The conda-forge build no longer depends on Python, now supports linux-riscv64, win-arm64, and
|
||||
linux-ppc64le platforms, and now includes shell completions. However, no longer depending on
|
||||
Python means that `python -m ruff` and `import ruff` will no longer work. Use `ruff` directly from
|
||||
`PATH` instead. PyPI installations and those from the standalone installer are unaffected.
|
||||
|
||||
- Remove support for ruff-lsp ([#28750](https://github.com/astral-sh/ruff/pull/28750))
|
||||
|
||||
Support for `ruff-lsp`, the legacy Python language server [deprecated in Ruff
|
||||
v0.9.5](https://github.com/astral-sh/ruff/releases/tag/0.9.5), has been removed. The Ruff VS Code
|
||||
extension now always uses the native language server; `ruff.nativeServer` is deprecated and
|
||||
ignored. See the [migration guide](https://docs.astral.sh/ruff/editors/migration/).
|
||||
|
||||
### Stabilization
|
||||
|
||||
The following rules have been stabilized and are no longer in preview:
|
||||
|
||||
- [`airflow3-incompatible-function-signature`](https://docs.astral.sh/ruff/rules/airflow3-incompatible-function-signature)
|
||||
(`AIR303`)
|
||||
- [`missing-copyright-notice`](https://docs.astral.sh/ruff/rules/missing-copyright-notice)
|
||||
(`CPY001`)
|
||||
- [`unnecessary-from-float`](https://docs.astral.sh/ruff/rules/unnecessary-from-float) (`FURB164`)
|
||||
- [`sorted-min-max`](https://docs.astral.sh/ruff/rules/sorted-min-max) (`FURB192`)
|
||||
- [`implicit-string-concatenation-in-collection-literal`](https://docs.astral.sh/ruff/rules/implicit-string-concatenation-in-collection-literal)
|
||||
(`ISC004`)
|
||||
- [`log-exception-outside-except-handler`](https://docs.astral.sh/ruff/rules/log-exception-outside-except-handler)
|
||||
(`LOG004`)
|
||||
- [`invalid-bool-return-type`](https://docs.astral.sh/ruff/rules/invalid-bool-return-type)
|
||||
(`PLE0304`)
|
||||
- [`too-many-positional-arguments`](https://docs.astral.sh/ruff/rules/too-many-positional-arguments)
|
||||
(`PLR0917`)
|
||||
- [`stop-iteration-return`](https://docs.astral.sh/ruff/rules/stop-iteration-return) (`PLR1708`)
|
||||
- [`none-not-at-end-of-union`](https://docs.astral.sh/ruff/rules/none-not-at-end-of-union)
|
||||
(`RUF036`)
|
||||
- [`access-annotations-from-class-dict`](https://docs.astral.sh/ruff/rules/access-annotations-from-class-dict)
|
||||
(`RUF063`)
|
||||
- [`duplicate-entry-in-dunder-all`](https://docs.astral.sh/ruff/rules/duplicate-entry-in-dunder-all)
|
||||
(`RUF068`)
|
||||
- [`lazy-import-mismatch`](https://docs.astral.sh/ruff/rules/lazy-import-mismatch) (`TID254`)
|
||||
- [`lazy-import-immediately-resolved`](https://docs.astral.sh/ruff/rules/lazy-import-immediately-resolved)
|
||||
(`TID255`)
|
||||
- [`os-path-commonprefix`](https://docs.astral.sh/ruff/rules/os-path-commonprefix) (`RUF071`)
|
||||
|
||||
The following behaviors have been stabilized:
|
||||
|
||||
- [`blind-except`](https://docs.astral.sh/ruff/rules/blind-except) (`BLE001`) is now suppressed when
|
||||
the exception is logged via `logging` methods other than `critical`, `error` and `exception`.
|
||||
- [`future-required-type-annotation`](https://docs.astral.sh/ruff/rules/future-required-type-annotation)
|
||||
(`FA102`) now checks for additional [PEP 585](https://peps.python.org/pep-0585/)-compatible
|
||||
APIs, such as those from `collections.abc`.
|
||||
- [`f-string-in-get-text-func-call`](https://docs.astral.sh/ruff/rules/f-string-in-get-text-func-call)
|
||||
(`INT001`),
|
||||
[`format-in-get-text-func-call`](https://docs.astral.sh/ruff/rules/format-in-get-text-func-call)
|
||||
(`INT002`), and
|
||||
[`printf-in-get-text-func-call`](https://docs.astral.sh/ruff/rules/printf-in-get-text-func-call)
|
||||
(`INT003`) now check for additional common ways of using the `gettext` module, such as assigning
|
||||
it to `builtins._`.
|
||||
- [`suspicious-url-open-usage`](https://docs.astral.sh/ruff/rules/suspicious-url-open-usage)
|
||||
(`S310`) now resolves local string literal bindings to avoid more false positives.
|
||||
- [`snmp-insecure-version`](https://docs.astral.sh/ruff/rules/snmp-insecure-version) (`S508`) and
|
||||
[`snmp-weak-cryptography`](https://docs.astral.sh/ruff/rules/snmp-weak-cryptography) (`S509`) now
|
||||
support the recommended API from newer versions of PySNMP.
|
||||
- [`typing-text-str-alias`](https://docs.astral.sh/ruff/rules/typing-text-str-alias) (`UP019`) now
|
||||
recognizes `typing_extensions.Text` in addition to `typing.Text`.
|
||||
- The formatter, [`unsorted-imports`](https://docs.astral.sh/ruff/rules/unsorted-imports/) (`I001`),
|
||||
[`line-too-long`](https://docs.astral.sh/ruff/rules/line-too-long/) (`E501`), and
|
||||
[`doc-line-too-long`](https://docs.astral.sh/ruff/rules/doc-line-too-long/) (`W505`) now
|
||||
consistently ignore trailing pragma comments when computing line length. This resolved several
|
||||
bugs involving interactions between these rules
|
||||
([#27313](https://github.com/astral-sh/ruff/pull/27313)) but may also cause existing imports to be
|
||||
reformatted and was thus classified as a breaking change.
|
||||
|
||||
### Preview features
|
||||
|
||||
- \[`pyupgrade`\] Fix false positive with `TypeVar` default before Python 3.13 (`UP040`) ([#26888](https://github.com/astral-sh/ruff/pull/26888))
|
||||
- \[`flake8-bugbear`\] Report the method name and a more precise range (`B005`) ([#27050](https://github.com/astral-sh/ruff/pull/27050))
|
||||
- \[`refurb`\] Mark fix unsafe and move to `suspicious` (`FURB152`) ([#28405](https://github.com/astral-sh/ruff/pull/28405))
|
||||
- \[`ruff`\] Allow docstrings in strict mode (`RUF067`) ([#28679](https://github.com/astral-sh/ruff/pull/28679))
|
||||
|
||||
### Bug fixes
|
||||
|
||||
- \[`ruff`\] Fix missing check on unrecognized early bound (`RUF016`) ([#26986](https://github.com/astral-sh/ruff/pull/26986))
|
||||
- \[`flake8-builtins`\] Expand checks in class scopes (`A001`) ([#29076](https://github.com/astral-sh/ruff/pull/29076))
|
||||
- \[`flake8-self`\] Allow private access on `object.__new__(cls)` instances (`SLF001`) ([#29001](https://github.com/astral-sh/ruff/pull/29001))
|
||||
- \[`flake8-tidy-imports`\] Skip `lazy-import-mismatch` in stubs (`TID254`) ([#29095](https://github.com/astral-sh/ruff/pull/29095))
|
||||
- \[`flake8-type-checking`\] Add the notion of runtime-ambiguous references ([#26508](https://github.com/astral-sh/ruff/pull/26508))
|
||||
- \[`flake8-type-checking`\] Never flag annotations in function scopes ([#29183](https://github.com/astral-sh/ruff/pull/29183))
|
||||
- \[`pyflakes`\] Mark the fix as unsafe when it creates a docstring (`F541`) ([#28258](https://github.com/astral-sh/ruff/pull/28258))
|
||||
- \[`pylint`\] Preserve trailing comments in `useless-return` fix (`PLR1711`) ([#29180](https://github.com/astral-sh/ruff/pull/29180))
|
||||
- \[`ruff`\] Avoid false positive when `pytest.raises` is used in a `with` statement (`RUF061`) ([#28186](https://github.com/astral-sh/ruff/pull/28186))
|
||||
|
||||
### Rule changes
|
||||
|
||||
- Insert a space after the colon in Ruff suppression comments ([#27123](https://github.com/astral-sh/ruff/pull/27123))
|
||||
|
||||
### Performance
|
||||
|
||||
- \[`pyupgrade`\] Speed up `unnecessary-future-import` (`UP010`) ([#27047](https://github.com/astral-sh/ruff/pull/27047))
|
||||
|
||||
### Documentation
|
||||
|
||||
- \[`ruff`\] Add missing period in "Why is this bad?" section (`RUF200`) ([#26930](https://github.com/astral-sh/ruff/pull/26930))
|
||||
- \[`flake8-simplify`\] Clarify `os.environ` behavior on Windows (`SIM112`) ([#26972](https://github.com/astral-sh/ruff/pull/26972))
|
||||
- \[`pydocstyle`\] Document fix safety (`D400`) ([#26971](https://github.com/astral-sh/ruff/pull/26971))
|
||||
- \[`pyupgrade`\] Suggest `typing.TypeForm` on Python 3.15 (`UP035`) ([#29084](https://github.com/astral-sh/ruff/pull/29084))
|
||||
|
||||
### Contributors
|
||||
|
||||
- [@jonathandung](https://github.com/jonathandung)
|
||||
- [@Joosboy](https://github.com/Joosboy)
|
||||
- [@MichaReiser](https://github.com/MichaReiser)
|
||||
- [@Andrej730](https://github.com/Andrej730)
|
||||
- [@ntBre](https://github.com/ntBre)
|
||||
- [@zaniebot](https://github.com/zaniebot)
|
||||
- [@DeviousCardi](https://github.com/DeviousCardi)
|
||||
- [@hugehoo](https://github.com/hugehoo)
|
||||
- [@nekomario28](https://github.com/nekomario28)
|
||||
- [@Daverball](https://github.com/Daverball)
|
||||
- [@Viicos](https://github.com/Viicos)
|
||||
- [@DebadityaHait](https://github.com/DebadityaHait)
|
||||
- [@saberoueslati](https://github.com/saberoueslati)
|
||||
- [@baltasarblanco](https://github.com/baltasarblanco)
|
||||
- [@yxshee](https://github.com/yxshee)
|
||||
- [@lognd](https://github.com/lognd)
|
||||
- [@dor-sr](https://github.com/dor-sr)
|
||||
|
||||
## 0.16.x
|
||||
|
||||
See [changelogs/0.16.x](./changelogs/0.16.x.md)
|
||||
|
||||
## 0.15.x
|
||||
|
||||
|
||||
Generated
+41
-41
@@ -3084,7 +3084,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "ruff"
|
||||
version = "0.16.10"
|
||||
version = "0.17.0"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"assert_fs",
|
||||
@@ -3148,7 +3148,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "ruff_annotate_snippets"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
dependencies = [
|
||||
"anstream 1.0.0",
|
||||
"anstyle",
|
||||
@@ -3192,7 +3192,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "ruff_cache"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
dependencies = [
|
||||
"char_str",
|
||||
"filetime",
|
||||
@@ -3206,14 +3206,14 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "ruff_command_line"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
dependencies = [
|
||||
"argfile",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ruff_db"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
dependencies = [
|
||||
"anstyle",
|
||||
"arc-swap",
|
||||
@@ -3304,7 +3304,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "ruff_diagnostics"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
dependencies = [
|
||||
"get-size2",
|
||||
"is-macro",
|
||||
@@ -3314,7 +3314,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "ruff_formatter"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
dependencies = [
|
||||
"drop_bomb",
|
||||
"ruff_cache",
|
||||
@@ -3330,7 +3330,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "ruff_graph"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"clap",
|
||||
@@ -3351,7 +3351,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "ruff_index"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
dependencies = [
|
||||
"get-size2",
|
||||
"ruff_macros",
|
||||
@@ -3361,7 +3361,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "ruff_linter"
|
||||
version = "0.16.10"
|
||||
version = "0.17.0"
|
||||
dependencies = [
|
||||
"aho-corasick",
|
||||
"anyhow",
|
||||
@@ -3424,7 +3424,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "ruff_macros"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
dependencies = [
|
||||
"heck",
|
||||
"itertools 0.15.0",
|
||||
@@ -3437,7 +3437,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "ruff_markdown"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
dependencies = [
|
||||
"insta",
|
||||
"regex",
|
||||
@@ -3468,14 +3468,14 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "ruff_memory_usage"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
dependencies = [
|
||||
"get-size2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ruff_notebook"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"rand 0.10.2",
|
||||
@@ -3491,14 +3491,14 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "ruff_options_metadata"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ruff_python_ast"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
dependencies = [
|
||||
"aho-corasick",
|
||||
"arrayvec",
|
||||
@@ -3535,7 +3535,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "ruff_python_codegen"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
dependencies = [
|
||||
"ruff_python_ast",
|
||||
"ruff_python_literal",
|
||||
@@ -3547,7 +3547,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "ruff_python_edits"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
dependencies = [
|
||||
"ruff_python_ast",
|
||||
"ruff_python_parser",
|
||||
@@ -3557,7 +3557,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "ruff_python_formatter"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"clap",
|
||||
@@ -3590,7 +3590,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "ruff_python_importer"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"insta",
|
||||
@@ -3605,7 +3605,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "ruff_python_index"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
dependencies = [
|
||||
"ruff_python_ast",
|
||||
"ruff_python_parser",
|
||||
@@ -3616,7 +3616,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "ruff_python_literal"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
dependencies = [
|
||||
"bitflags 2.13.1",
|
||||
"icu_normalizer",
|
||||
@@ -3627,7 +3627,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "ruff_python_parser"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bitflags 2.13.1",
|
||||
@@ -3658,7 +3658,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "ruff_python_semantic"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
dependencies = [
|
||||
"bitflags 2.13.1",
|
||||
"insta",
|
||||
@@ -3679,7 +3679,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "ruff_python_stdlib"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
dependencies = [
|
||||
"bitflags 2.13.1",
|
||||
"unicode-ident",
|
||||
@@ -3687,7 +3687,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "ruff_python_trivia"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
dependencies = [
|
||||
"itertools 0.15.0",
|
||||
"memchr",
|
||||
@@ -3710,7 +3710,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "ruff_ranged_value"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
dependencies = [
|
||||
"get-size2",
|
||||
"ruff_db",
|
||||
@@ -3723,7 +3723,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "ruff_server"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"crossbeam",
|
||||
@@ -3767,7 +3767,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "ruff_source_file"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
dependencies = [
|
||||
"get-size2",
|
||||
"memchr",
|
||||
@@ -3777,7 +3777,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "ruff_text_size"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
dependencies = [
|
||||
"get-size2",
|
||||
"schemars",
|
||||
@@ -3788,7 +3788,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "ruff_unicode_names2"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
dependencies = [
|
||||
"phf 0.11.3",
|
||||
"rand 0.8.5",
|
||||
@@ -3797,7 +3797,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "ruff_unicode_names2_generator"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
dependencies = [
|
||||
"phf_codegen",
|
||||
"rand 0.8.5",
|
||||
@@ -3805,7 +3805,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "ruff_wasm"
|
||||
version = "0.16.10"
|
||||
version = "0.17.0"
|
||||
dependencies = [
|
||||
"console_error_panic_hook",
|
||||
"console_log",
|
||||
@@ -3832,7 +3832,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "ruff_workspace"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"colored",
|
||||
@@ -4714,7 +4714,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "ty_combine"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
dependencies = [
|
||||
"ordermap",
|
||||
"ruff_db",
|
||||
@@ -4795,7 +4795,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "ty_module_resolver"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"camino",
|
||||
@@ -4874,7 +4874,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "ty_python_core"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bitflags 2.13.1",
|
||||
@@ -4909,7 +4909,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "ty_python_semantic"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bitflags 2.13.1",
|
||||
@@ -5009,7 +5009,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "ty_site_packages"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
dependencies = [
|
||||
"camino",
|
||||
"colored",
|
||||
@@ -5030,7 +5030,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "ty_static"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
dependencies = [
|
||||
"ruff_macros",
|
||||
]
|
||||
@@ -5063,7 +5063,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "ty_vendored"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
dependencies = [
|
||||
"path-slash",
|
||||
"ruff_db",
|
||||
|
||||
+40
-40
@@ -14,55 +14,55 @@ license = "MIT"
|
||||
|
||||
[workspace.dependencies]
|
||||
char_str = { version = "0.0.4", default-features = false, features = ["std"] }
|
||||
ruff = { version = "0.16.10", path = "crates/ruff" }
|
||||
ruff_annotate_snippets = { version = "0.0.16", path = "crates/ruff_annotate_snippets" }
|
||||
ruff_cache = { version = "0.0.16", path = "crates/ruff_cache" }
|
||||
ruff_command_line = { version = "0.0.16", path = "crates/ruff_command_line" }
|
||||
ruff_db = { version = "0.0.16", path = "crates/ruff_db", default-features = false }
|
||||
ruff_diagnostics = { version = "0.0.16", path = "crates/ruff_diagnostics" }
|
||||
ruff_formatter = { version = "0.0.16", path = "crates/ruff_formatter" }
|
||||
ruff_graph = { version = "0.0.16", path = "crates/ruff_graph" }
|
||||
ruff_index = { version = "0.0.16", path = "crates/ruff_index" }
|
||||
ruff_linter = { version = "0.16.10", path = "crates/ruff_linter" }
|
||||
ruff_macros = { version = "0.0.16", path = "crates/ruff_macros" }
|
||||
ruff_markdown = { version = "0.0.16", path = "crates/ruff_markdown" }
|
||||
ruff_memory_usage = { version = "0.0.16", path = "crates/ruff_memory_usage" }
|
||||
ruff_notebook = { version = "0.0.16", path = "crates/ruff_notebook" }
|
||||
ruff_options_metadata = { version = "0.0.16", path = "crates/ruff_options_metadata" }
|
||||
ruff_python_ast = { version = "0.0.16", path = "crates/ruff_python_ast" }
|
||||
ruff_python_codegen = { version = "0.0.16", path = "crates/ruff_python_codegen" }
|
||||
ruff_python_edits = { version = "0.0.16", path = "crates/ruff_python_edits" }
|
||||
ruff_python_formatter = { version = "0.0.16", path = "crates/ruff_python_formatter" }
|
||||
ruff_python_importer = { version = "0.0.16", path = "crates/ruff_python_importer" }
|
||||
ruff_python_index = { version = "0.0.16", path = "crates/ruff_python_index" }
|
||||
ruff_python_literal = { version = "0.0.16", path = "crates/ruff_python_literal" }
|
||||
ruff_python_parser = { version = "0.0.16", path = "crates/ruff_python_parser" }
|
||||
ruff_python_semantic = { version = "0.0.16", path = "crates/ruff_python_semantic" }
|
||||
ruff_python_stdlib = { version = "0.0.16", path = "crates/ruff_python_stdlib" }
|
||||
ruff_python_trivia = { version = "0.0.16", path = "crates/ruff_python_trivia" }
|
||||
ruff_server = { version = "0.0.16", path = "crates/ruff_server" }
|
||||
ruff_source_file = { version = "0.0.16", path = "crates/ruff_source_file" }
|
||||
ruff = { version = "0.17.0", path = "crates/ruff" }
|
||||
ruff_annotate_snippets = { version = "0.0.17", path = "crates/ruff_annotate_snippets" }
|
||||
ruff_cache = { version = "0.0.17", path = "crates/ruff_cache" }
|
||||
ruff_command_line = { version = "0.0.17", path = "crates/ruff_command_line" }
|
||||
ruff_db = { version = "0.0.17", path = "crates/ruff_db", default-features = false }
|
||||
ruff_diagnostics = { version = "0.0.17", path = "crates/ruff_diagnostics" }
|
||||
ruff_formatter = { version = "0.0.17", path = "crates/ruff_formatter" }
|
||||
ruff_graph = { version = "0.0.17", path = "crates/ruff_graph" }
|
||||
ruff_index = { version = "0.0.17", path = "crates/ruff_index" }
|
||||
ruff_linter = { version = "0.17.0", path = "crates/ruff_linter" }
|
||||
ruff_macros = { version = "0.0.17", path = "crates/ruff_macros" }
|
||||
ruff_markdown = { version = "0.0.17", path = "crates/ruff_markdown" }
|
||||
ruff_memory_usage = { version = "0.0.17", path = "crates/ruff_memory_usage" }
|
||||
ruff_notebook = { version = "0.0.17", path = "crates/ruff_notebook" }
|
||||
ruff_options_metadata = { version = "0.0.17", path = "crates/ruff_options_metadata" }
|
||||
ruff_python_ast = { version = "0.0.17", path = "crates/ruff_python_ast" }
|
||||
ruff_python_codegen = { version = "0.0.17", path = "crates/ruff_python_codegen" }
|
||||
ruff_python_edits = { version = "0.0.17", path = "crates/ruff_python_edits" }
|
||||
ruff_python_formatter = { version = "0.0.17", path = "crates/ruff_python_formatter" }
|
||||
ruff_python_importer = { version = "0.0.17", path = "crates/ruff_python_importer" }
|
||||
ruff_python_index = { version = "0.0.17", path = "crates/ruff_python_index" }
|
||||
ruff_python_literal = { version = "0.0.17", path = "crates/ruff_python_literal" }
|
||||
ruff_python_parser = { version = "0.0.17", path = "crates/ruff_python_parser" }
|
||||
ruff_python_semantic = { version = "0.0.17", path = "crates/ruff_python_semantic" }
|
||||
ruff_python_stdlib = { version = "0.0.17", path = "crates/ruff_python_stdlib" }
|
||||
ruff_python_trivia = { version = "0.0.17", path = "crates/ruff_python_trivia" }
|
||||
ruff_server = { version = "0.0.17", path = "crates/ruff_server" }
|
||||
ruff_source_file = { version = "0.0.17", path = "crates/ruff_source_file" }
|
||||
ruff_mdtest = { path = "crates/ruff_mdtest" }
|
||||
ruff_ranged_value = { version = "0.0.16", path = "crates/ruff_ranged_value" }
|
||||
ruff_text_size = { version = "0.0.16", path = "crates/ruff_text_size" }
|
||||
ruff_unicode_names2 = { version = "0.0.16", path = "crates/ruff_unicode_names2" }
|
||||
ruff_unicode_names2_generator = { version = "0.0.16", path = "crates/ruff_unicode_names2_generator" }
|
||||
ruff_workspace = { version = "0.0.16", path = "crates/ruff_workspace" }
|
||||
ruff_ranged_value = { version = "0.0.17", path = "crates/ruff_ranged_value" }
|
||||
ruff_text_size = { version = "0.0.17", path = "crates/ruff_text_size" }
|
||||
ruff_unicode_names2 = { version = "0.0.17", path = "crates/ruff_unicode_names2" }
|
||||
ruff_unicode_names2_generator = { version = "0.0.17", path = "crates/ruff_unicode_names2_generator" }
|
||||
ruff_workspace = { version = "0.0.17", path = "crates/ruff_workspace" }
|
||||
|
||||
ty = { path = "crates/ty" }
|
||||
ty_combine = { version = "0.0.16", path = "crates/ty_combine" }
|
||||
ty_combine = { version = "0.0.17", path = "crates/ty_combine" }
|
||||
ty_completion_bench = { path = "crates/ty_completion_bench" }
|
||||
ty_completion_eval = { path = "crates/ty_completion_eval" }
|
||||
ty_ide = { path = "crates/ty_ide" }
|
||||
ty_module_resolver = { version = "0.0.16", path = "crates/ty_module_resolver" }
|
||||
ty_module_resolver = { version = "0.0.17", path = "crates/ty_module_resolver" }
|
||||
ty_project = { path = "crates/ty_project", default-features = false }
|
||||
ty_python_semantic = { version = "0.0.16", path = "crates/ty_python_semantic" }
|
||||
ty_python_core = { version = "0.0.16", path = "crates/ty_python_core" }
|
||||
ty_python_semantic = { version = "0.0.17", path = "crates/ty_python_semantic" }
|
||||
ty_python_core = { version = "0.0.17", path = "crates/ty_python_core" }
|
||||
ty_server = { path = "crates/ty_server" }
|
||||
ty_site_packages = { version = "0.0.16", path = "crates/ty_site_packages" }
|
||||
ty_static = { version = "0.0.16", path = "crates/ty_static" }
|
||||
ty_site_packages = { version = "0.0.17", path = "crates/ty_site_packages" }
|
||||
ty_static = { version = "0.0.17", path = "crates/ty_static" }
|
||||
ty_test = { path = "crates/ty_test" }
|
||||
ty_vendored = { version = "0.0.16", path = "crates/ty_vendored" }
|
||||
ty_vendored = { version = "0.0.17", path = "crates/ty_vendored" }
|
||||
|
||||
mdtest = { path = "crates/mdtest" }
|
||||
|
||||
|
||||
@@ -122,8 +122,8 @@ Ruff is available as [`ruff`](https://pypi.org/project/ruff/) on PyPI.
|
||||
Invoke Ruff directly with [`uvx`](https://docs.astral.sh/uv/):
|
||||
|
||||
```shell
|
||||
uvx ruff@0.16.10 check # Lint all files in the current directory.
|
||||
uvx ruff@0.16.10 format # Format all files in the current directory.
|
||||
uvx ruff@0.17.0 check # Lint all files in the current directory.
|
||||
uvx ruff@0.17.0 format # Format all files in the current directory.
|
||||
```
|
||||
|
||||
Or install Ruff with `uv` (recommended), `pip`, or `pipx`:
|
||||
@@ -150,8 +150,8 @@ curl -LsSf https://astral.sh/ruff/install.sh | sh
|
||||
powershell -c "irm https://astral.sh/ruff/install.ps1 | iex"
|
||||
|
||||
# For a specific version.
|
||||
curl -LsSf https://astral.sh/ruff/0.16.10/install.sh | sh
|
||||
powershell -c "irm https://astral.sh/ruff/0.16.10/install.ps1 | iex"
|
||||
curl -LsSf https://astral.sh/ruff/0.17.0/install.sh | sh
|
||||
powershell -c "irm https://astral.sh/ruff/0.17.0/install.ps1 | iex"
|
||||
```
|
||||
|
||||
You can also install Ruff via [Homebrew](https://formulae.brew.sh/formula/ruff), [Conda](https://anaconda.org/conda-forge/ruff),
|
||||
@@ -184,7 +184,7 @@ Ruff can also be used as a [pre-commit](https://pre-commit.com/) hook via [`ruff
|
||||
```yaml
|
||||
- repo: https://github.com/astral-sh/ruff-pre-commit
|
||||
# Ruff version.
|
||||
rev: v0.16.10
|
||||
rev: v0.17.0
|
||||
hooks:
|
||||
# Run the linter.
|
||||
- id: ruff-check
|
||||
|
||||
@@ -0,0 +1,585 @@
|
||||
## 0.16.0
|
||||
|
||||
Released on 2026-07-23.
|
||||
|
||||
Check out the [blog post](https://astral.sh/blog/ruff-v0.16.0) for a migration
|
||||
guide and overview of the changes!
|
||||
|
||||
### Breaking changes
|
||||
|
||||
- Ruff now enables a much larger set of rules by default (413, up from 59). See the blog post for
|
||||
more details and the new [Default Rules](https://docs.astral.sh/ruff/default-rules/) page for a
|
||||
full listing of the enabled rules. Note that this is primarily an expansion, but 18 of the more
|
||||
opinionated pycodestyle (`E`) and pyflakes (`F`) rules have been removed from the default set:
|
||||
`E401`, `E402`, `E701`, `E702`, `E703`, `E711`, `E712`, `E713`, `E714`, `E721`, `E731`, `E741`,
|
||||
`E742`, `E743`, `F403`, `F405`, `F406`, and `F722`.
|
||||
|
||||
- Ruff can now format Python code blocks in Markdown files and will do this by default. See the
|
||||
[documentation](https://docs.astral.sh/ruff/formatter/#markdown-code-formatting) for more details.
|
||||
|
||||
- Ruff now supports `ruff: ignore` comments at the ends of lines, like `noqa` comments, or on the line preceding a diagnostic. For example, these both suppress an [`unused-import`](https://docs.astral.sh/ruff/rules/unused-import/) (`F401`) diagnostic:
|
||||
|
||||
```py
|
||||
import math # ruff: ignore[F401]
|
||||
|
||||
# ruff: ignore[F401]
|
||||
import os
|
||||
```
|
||||
|
||||
- Fixes are now shown in `check` and `format --check` output:
|
||||
|
||||
````console
|
||||
❯ ruff format --check .
|
||||
unformatted: File would be reformatted
|
||||
--> try.md:1:1
|
||||
|
|
||||
1 | ```python
|
||||
- import math
|
||||
2 + import math
|
||||
3 | ```
|
||||
|
|
||||
|
||||
1 file would be reformatted
|
||||
````
|
||||
|
||||
This example also shows off the Markdown formatting.
|
||||
|
||||
- `format --check` now supports the same output formats as the linter, including the `github` and
|
||||
`gitlab` outputs for rendering annotations in CI:
|
||||
|
||||
```console
|
||||
❯ ruff format --check --output-format github .
|
||||
::error title=ruff (unformatted),file=try.md,line=2,col=8,endLine=2,endColumn=10::try.md:2:8: unformatted: File would be reformatted
|
||||
```
|
||||
|
||||
See the CLI help or [documentation](https://docs.astral.sh/ruff/settings/#output-format) for the
|
||||
full list of supported formats.
|
||||
|
||||
- The `filename`, `location`, `end_location`, `fix.edits[].location`, and `fix.edits[].end_location`
|
||||
fields in the JSON output format may now be `null` rather than defaulting to the empty string and
|
||||
row 1, column 1, respectively.
|
||||
|
||||
### Stabilization
|
||||
|
||||
The following rules have been stabilized and are no longer in preview:
|
||||
|
||||
- [`airflow3-incompatible-function-signature`](https://docs.astral.sh/ruff/rules/airflow3-incompatible-function-signature)
|
||||
(`AIR303`)
|
||||
- [`missing-copyright-notice`](https://docs.astral.sh/ruff/rules/missing-copyright-notice)
|
||||
(`CPY001`)
|
||||
- [`unnecessary-from-float`](https://docs.astral.sh/ruff/rules/unnecessary-from-float) (`FURB164`)
|
||||
- [`sorted-min-max`](https://docs.astral.sh/ruff/rules/sorted-min-max) (`FURB192`)
|
||||
- [`implicit-string-concatenation-in-collection-literal`](https://docs.astral.sh/ruff/rules/implicit-string-concatenation-in-collection-literal)
|
||||
(`ISC004`)
|
||||
- [`log-exception-outside-except-handler`](https://docs.astral.sh/ruff/rules/log-exception-outside-except-handler)
|
||||
(`LOG004`)
|
||||
- [`invalid-bool-return-type`](https://docs.astral.sh/ruff/rules/invalid-bool-return-type)
|
||||
(`PLE0304`)
|
||||
- [`too-many-positional-arguments`](https://docs.astral.sh/ruff/rules/too-many-positional-arguments)
|
||||
(`PLR0917`)
|
||||
- [`stop-iteration-return`](https://docs.astral.sh/ruff/rules/stop-iteration-return) (`PLR1708`)
|
||||
- [`none-not-at-end-of-union`](https://docs.astral.sh/ruff/rules/none-not-at-end-of-union)
|
||||
(`RUF036`)
|
||||
- [`access-annotations-from-class-dict`](https://docs.astral.sh/ruff/rules/access-annotations-from-class-dict)
|
||||
(`RUF063`)
|
||||
- [`duplicate-entry-in-dunder-all`](https://docs.astral.sh/ruff/rules/duplicate-entry-in-dunder-all)
|
||||
(`RUF068`)
|
||||
|
||||
The following behaviors have been stabilized:
|
||||
|
||||
- [`blind-except`](https://docs.astral.sh/ruff/rules/blind-except) (`BLE001`) is now suppressed when
|
||||
the exception is logged via `logging` methods other than `critical`, `error` and `exception`.
|
||||
- [`future-required-type-annotation`](https://docs.astral.sh/ruff/rules/future-required-type-annotation)
|
||||
(`FA102`) now checks for additional [PEP 585](https://peps.python.org/pep-0585/)-compatible
|
||||
APIs, such as those from `collections.abc`.
|
||||
- [`f-string-in-get-text-func-call`](https://docs.astral.sh/ruff/rules/f-string-in-get-text-func-call)
|
||||
(`INT001`),
|
||||
[`format-in-get-text-func-call`](https://docs.astral.sh/ruff/rules/format-in-get-text-func-call)
|
||||
(`INT002`), and
|
||||
[`printf-in-get-text-func-call`](https://docs.astral.sh/ruff/rules/printf-in-get-text-func-call)
|
||||
(`INT003`) now check for additional common ways of using the `gettext` module, such as assigning
|
||||
it to `builtins._`.
|
||||
- [`suspicious-url-open-usage`](https://docs.astral.sh/ruff/rules/suspicious-url-open-usage)
|
||||
(`S310`) now resolves local string literal bindings to avoid more false positives.
|
||||
- [`snmp-insecure-version`](https://docs.astral.sh/ruff/rules/snmp-insecure-version) (`S508`) and
|
||||
[`snmp-weak-cryptography`](https://docs.astral.sh/ruff/rules/snmp-weak-cryptography) (`S509`) now
|
||||
support the recommended API from newer versions of PySNMP.
|
||||
- [`typing-text-str-alias`](https://docs.astral.sh/ruff/rules/typing-text-str-alias) (`UP019`) now
|
||||
recognizes `typing_extensions.Text` in addition to `typing.Text`.
|
||||
|
||||
### Preview features
|
||||
|
||||
- \[`pyupgrade`\] Fix false positive with `TypeVar` default before Python 3.13 (`UP040`) ([#26888](https://github.com/astral-sh/ruff/pull/26888))
|
||||
|
||||
### Bug fixes
|
||||
|
||||
- \[`ruff`\] Fix missing check on unrecognized early bound (`RUF016`) ([#26986](https://github.com/astral-sh/ruff/pull/26986))
|
||||
|
||||
### Rule changes
|
||||
|
||||
- Insert a space after the colon in Ruff suppression comments ([#27123](https://github.com/astral-sh/ruff/pull/27123))
|
||||
|
||||
### Performance
|
||||
|
||||
- \[`pyupgrade`\] Speed up `unnecessary-future-import` (`UP010`) ([#27047](https://github.com/astral-sh/ruff/pull/27047))
|
||||
|
||||
### Documentation
|
||||
|
||||
- \[`ruff`\] Add missing period in "Why is this bad?" section (`RUF200`) ([#26930](https://github.com/astral-sh/ruff/pull/26930))
|
||||
- \[`flake8-simplify`\] Clarify `os.environ` behavior on Windows (`SIM112`) ([#26972](https://github.com/astral-sh/ruff/pull/26972))
|
||||
- \[`pydocstyle`\] Document fix safety (`D400`) ([#26971](https://github.com/astral-sh/ruff/pull/26971))
|
||||
|
||||
### Contributors
|
||||
|
||||
- [@jonathandung](https://github.com/jonathandung)
|
||||
- [@Joosboy](https://github.com/Joosboy)
|
||||
- [@MichaReiser](https://github.com/MichaReiser)
|
||||
- [@Andrej730](https://github.com/Andrej730)
|
||||
- [@ntBre](https://github.com/ntBre)
|
||||
- [@zaniebot](https://github.com/zaniebot)
|
||||
|
||||
## 0.16.1
|
||||
|
||||
Released on 2026-07-30.
|
||||
|
||||
### Preview features
|
||||
|
||||
- Add an option to opt out of human-readable names ([#27160](https://github.com/astral-sh/ruff/pull/27160))
|
||||
- \[`flake8-pytest-style`\] Make fixes safe by default and unsafe only when comments are present (`PT018`) ([#27201](https://github.com/astral-sh/ruff/pull/27201))
|
||||
- \[`pyupgrade`\] Skip fix when a defaulted `TypeVar` precedes a non-defaulted one (`UP040`, `UP046`, `UP047`) ([#27133](https://github.com/astral-sh/ruff/pull/27133))
|
||||
- \[`ruff`\] Fix false positive with unpacked arguments (`RUF065`) ([#26959](https://github.com/astral-sh/ruff/pull/26959))
|
||||
|
||||
### Bug fixes
|
||||
|
||||
- Bump `gen-lsp-types` to gracefully handle unknown enumeration values in LSP messages ([#27230](https://github.com/astral-sh/ruff/pull/27230))
|
||||
- \[`flake8-bugbear`\] Mark `range` as immutable (`B008`) ([#27247](https://github.com/astral-sh/ruff/pull/27247))
|
||||
- \[`flake8-comprehensions`\] NFKC-normalize keyword names in `C408` fix ([#26813](https://github.com/astral-sh/ruff/pull/26813))
|
||||
- \[`flake8-return`\] Fix false positive when variable is read in `finally` clause (`RET504`) ([#25441](https://github.com/astral-sh/ruff/pull/25441))
|
||||
- \[`pydocstyle`\] Skip section detection inside RST directive bodies (`D214`, `D405`, `D413`) ([#23635](https://github.com/astral-sh/ruff/pull/23635))
|
||||
- \[`refurb`\] Parenthesize `yield` arguments in the `FURB192` fix ([#27192](https://github.com/astral-sh/ruff/pull/27192))
|
||||
|
||||
### Rule changes
|
||||
|
||||
- \[`flake8-pytest-style`\] Mark `PT022` fixes as unsafe ([#26440](https://github.com/astral-sh/ruff/pull/26440))
|
||||
- \[`refurb`\] Mark fixes that remove unknown separators as unsafe (`FURB105`) ([#27200](https://github.com/astral-sh/ruff/pull/27200))
|
||||
|
||||
### Server
|
||||
|
||||
- Fix indexing of excluded nested Ruff workspaces ([#27303](https://github.com/astral-sh/ruff/pull/27303))
|
||||
- Lint TOML files in the LSP ([#26862](https://github.com/astral-sh/ruff/pull/26862))
|
||||
|
||||
### Documentation
|
||||
|
||||
- Cover `pycon` Markdown formatting ([#27153](https://github.com/astral-sh/ruff/pull/27153))
|
||||
- \[`flake8-bandit`\] Document `TYPE_CHECKING` exception (`S101`) ([#27004](https://github.com/astral-sh/ruff/pull/27004))
|
||||
- \[`flake8-import-conventions`\] Document that `extend-aliases` can override default aliases ([#27191](https://github.com/astral-sh/ruff/pull/27191))
|
||||
- \[`pylint`\] Add missing fix safety gotchas for `non-augmented-assignment` (`PLR6104`) ([#27250](https://github.com/astral-sh/ruff/pull/27250))
|
||||
|
||||
### Other changes
|
||||
|
||||
- Reduce syntax error noise by swallowing dedents like indents ([#27170](https://github.com/astral-sh/ruff/pull/27170))
|
||||
- Vendor latest annotate-snippets ([#27033](https://github.com/astral-sh/ruff/pull/27033))
|
||||
|
||||
### Contributors
|
||||
|
||||
- [@bxff](https://github.com/bxff)
|
||||
- [@anishgirianish](https://github.com/anishgirianish)
|
||||
- [@Avasam](https://github.com/Avasam)
|
||||
- [@epage](https://github.com/epage)
|
||||
- [@LHMQ878](https://github.com/LHMQ878)
|
||||
- [@MichaReiser](https://github.com/MichaReiser)
|
||||
- [@ntBre](https://github.com/ntBre)
|
||||
- [@HarshalPatel1972](https://github.com/HarshalPatel1972)
|
||||
- [@mjpieters](https://github.com/mjpieters)
|
||||
- [@joshuavetos](https://github.com/joshuavetos)
|
||||
- [@jesco-absolute](https://github.com/jesco-absolut)
|
||||
- [@vidigoat](https://github.com/vidigoat)
|
||||
- [@baltasarblanco](https://github.com/baltasarblanco)
|
||||
- [@ribru17](https://github.com/ribru17)
|
||||
- [@oh-summy](https://github.com/oh-summy)
|
||||
- [@Jayashanker-Padishala](https://github.com/Jayashanker-Padishala)
|
||||
|
||||
## 0.16.2
|
||||
|
||||
Released on 2026-08-06.
|
||||
|
||||
### Bug fixes
|
||||
|
||||
- \[`flake8-pyi`\] Avoid false positives on `singledispatch` functions (`PYI041`) ([#27335](https://github.com/astral-sh/ruff/pull/27335))
|
||||
|
||||
### Server
|
||||
|
||||
- Register formatting capabilities dynamically to exclude TOML files ([#27332](https://github.com/astral-sh/ruff/pull/27332))
|
||||
|
||||
### Contributors
|
||||
|
||||
- [@MeGaGiGaGon](https://github.com/MeGaGiGaGon)
|
||||
- [@charliermarsh](https://github.com/charliermarsh)
|
||||
- [@epage](https://github.com/epage)
|
||||
- [@sharkdp](https://github.com/sharkdp)
|
||||
- [@ntBre](https://github.com/ntBre)
|
||||
|
||||
## 0.16.3
|
||||
|
||||
Released on 2026-08-13.
|
||||
|
||||
### Preview features
|
||||
|
||||
- \[`pylint`\] Fix false negatives on negative numbers (`PLR6104`) ([#27251](https://github.com/astral-sh/ruff/pull/27251))
|
||||
- \[`pyupgrade`\] Add rule to replace `while 1` with `while True` (`UP048`) ([#27190](https://github.com/astral-sh/ruff/pull/27190))
|
||||
|
||||
### Bug fixes
|
||||
|
||||
- \[`flake8-bandit`\] Also check keyword arguments (`S602`, `S603`, `S607`, `S609`) ([#27687](https://github.com/astral-sh/ruff/pull/27687))
|
||||
- \[`pylint`\] Allow `continue` in `finally` on Python 3.8 ([#27626](https://github.com/astral-sh/ruff/pull/27626))
|
||||
- \[`pylint`\] Fix `PLE1307` false positive with bools ([#27651](https://github.com/astral-sh/ruff/pull/27651))
|
||||
- \[`pylint`\] Fix false positives and negatives with `%b` format character (`PLE1300`, `PLE1307`) ([#27560](https://github.com/astral-sh/ruff/pull/27560))
|
||||
- \[`pylint`\] Improve handling of concatenated strings (`PLE1300`) ([#27659](https://github.com/astral-sh/ruff/pull/27659))
|
||||
|
||||
### Rule changes
|
||||
|
||||
- \[`numpy`\] Make `np.chararray` autofix backwards-compatible (`NPY201`) ([#27527](https://github.com/astral-sh/ruff/pull/27527))
|
||||
|
||||
### Performance
|
||||
|
||||
- Enable PGO for Linux x86-64 Ruff releases ([#27570](https://github.com/astral-sh/ruff/pull/27570))
|
||||
- Enable PGO for Linux ARM64 Ruff releases ([#27574](https://github.com/astral-sh/ruff/pull/27574))
|
||||
- Enable PGO for Windows x86-64 Ruff releases ([#27573](https://github.com/astral-sh/ruff/pull/27573))
|
||||
- Enable PGO for macOS ARM64 Ruff releases ([#27572](https://github.com/astral-sh/ruff/pull/27572))
|
||||
- Reduce `Expr` size to 64 bytes ([#27591](https://github.com/astral-sh/ruff/pull/27591))
|
||||
|
||||
### CLI
|
||||
|
||||
- Hyperlink rule codes in `ruff check --statistics` output ([#27646](https://github.com/astral-sh/ruff/pull/27646))
|
||||
|
||||
### Documentation
|
||||
|
||||
- \[`ruff`\] Also suggest `asyncio.TaskGroup` (`RUF006`) ([#27461](https://github.com/astral-sh/ruff/pull/27461))
|
||||
|
||||
### Other changes
|
||||
|
||||
- Use mimalloc v3 ([#27586](https://github.com/astral-sh/ruff/pull/27586))
|
||||
|
||||
### Contributors
|
||||
|
||||
- [@Andrej730](https://github.com/Andrej730)
|
||||
- [@alonfaraj](https://github.com/alonfaraj)
|
||||
- [@romero-deshaw](https://github.com/romero-deshaw)
|
||||
- [@Avasam](https://github.com/Avasam)
|
||||
- [@tjkuson](https://github.com/tjkuson)
|
||||
- [@charliermarsh](https://github.com/charliermarsh)
|
||||
- [@chirizxc](https://github.com/chirizxc)
|
||||
- [@saberoueslati](https://github.com/saberoueslati)
|
||||
- [@MichaReiser](https://github.com/MichaReiser)
|
||||
|
||||
## 0.16.4
|
||||
|
||||
Released on 2026-08-20.
|
||||
|
||||
### Preview features
|
||||
|
||||
- \[`flake8-use-pathlib`\] Add autofix for `PTH116` ([#26460](https://github.com/astral-sh/ruff/pull/26460))
|
||||
- \[`refurb`\] Restrict `delete-full-slice` to lists (`FURB131`) ([#27711](https://github.com/astral-sh/ruff/pull/27711))
|
||||
- \[`refurb`\] Skip `FURB101` and `FURB103` when the `open` argument is a file descriptor ([#27643](https://github.com/astral-sh/ruff/pull/27643))
|
||||
|
||||
### Bug fixes
|
||||
|
||||
- Fix `InvalidInstruction` on Windows CPUs that do not support `POPCNT` ([#27803](https://github.com/astral-sh/ruff/pull/27803))
|
||||
- \[`pyflakes`\] Emit semantic syntax errors in string type definitions as `F722` ([#27835](https://github.com/astral-sh/ruff/pull/27835))
|
||||
- \[`pylint`\] Allow `os._exit` imports in `import-private-name` (`PLC2701`) ([#27738](https://github.com/astral-sh/ruff/pull/27738))
|
||||
|
||||
### Rule changes
|
||||
|
||||
- [syntax-errors] Align mixed t-string/bytes error message with CPython 3.14 ([#27766](https://github.com/astral-sh/ruff/pull/27766))
|
||||
- \[`ruff`\] Add `ctypes.LittleEndianStructure` and related types to existing exception (`RUF012`) ([#27753](https://github.com/astral-sh/ruff/pull/27753))
|
||||
- [syntax-errors] Detect duplicate keyword arguments ([#17804](https://github.com/astral-sh/ruff/pull/17804))
|
||||
- [syntax-errors] Detect parameters declared `nonlocal` ([#27628](https://github.com/astral-sh/ruff/pull/27628))
|
||||
|
||||
### Server
|
||||
|
||||
- Offer display-only fixes and mark safe fixes preferred ([#27807](https://github.com/astral-sh/ruff/pull/27807))
|
||||
- Support pull diagnostics for notebook cells ([#27779](https://github.com/astral-sh/ruff/pull/27779))
|
||||
|
||||
### Documentation
|
||||
|
||||
- Add default indicator to rules table ([#27724](https://github.com/astral-sh/ruff/pull/27724))
|
||||
- Fix broken link to Python docs ([#27757](https://github.com/astral-sh/ruff/pull/27757))
|
||||
|
||||
### Other changes
|
||||
|
||||
- Fix s390x stacker assembly in release builds ([#27776](https://github.com/astral-sh/ruff/pull/27776))
|
||||
- Guarantee minimum stack size when parsing a module, standalone expression, and suites ([#25464](https://github.com/astral-sh/ruff/pull/25464))
|
||||
- Reduce configuration deserialization code size ([#27924](https://github.com/astral-sh/ruff/pull/27924))
|
||||
- Check packed AST index bounds ([#27849](https://github.com/astral-sh/ruff/pull/27849))
|
||||
|
||||
### Contributors
|
||||
|
||||
- [@AbhinavMir](https://github.com/AbhinavMir)
|
||||
- [@eduardorittner](https://github.com/eduardorittner)
|
||||
- [@royb3](https://github.com/royb3)
|
||||
- [@MichaReiser](https://github.com/MichaReiser)
|
||||
- [@carljm](https://github.com/carljm)
|
||||
- [@rosstitmarsh](https://github.com/rosstitmarsh)
|
||||
- [@ntBre](https://github.com/ntBre)
|
||||
- [@zaniebot](https://github.com/zaniebot)
|
||||
- [@ewdurbin](https://github.com/ewdurbin)
|
||||
- [@woodruffw](https://github.com/woodruffw)
|
||||
- [@Sacrimento](https://github.com/Sacrimento)
|
||||
- [@lakshayxi](https://github.com/lakshayxi)
|
||||
- [@WhiteFox0-0](https://github.com/WhiteFox0-0)
|
||||
- [@baltasarblanco](https://github.com/baltasarblanco)
|
||||
|
||||
## 0.16.5
|
||||
|
||||
Released on 2026-08-27.
|
||||
|
||||
### Preview features
|
||||
|
||||
- Allow rules without codes ([#28049](https://github.com/astral-sh/ruff/pull/28049))
|
||||
- Introduce category selectors ([#27666](https://github.com/astral-sh/ruff/pull/27666))
|
||||
- Update preview default rules and categories ([#27877](https://github.com/astral-sh/ruff/pull/27877))
|
||||
|
||||
### Bug fixes
|
||||
|
||||
- \[`flake8-async`\] Detect blocking generic HTTP requests (`ASYNC210`) ([#28024](https://github.com/astral-sh/ruff/pull/28024))
|
||||
- \[`flake8-datetimez`\] Allow timezone-safe `strptime` chains (`DTZ007`) ([#28023](https://github.com/astral-sh/ruff/pull/28023))
|
||||
- \[`flake8-simplify`\] Respect side effects in `lambda` defaults (`SIM401`) ([#28000](https://github.com/astral-sh/ruff/pull/28000))
|
||||
|
||||
### Server
|
||||
|
||||
- Fix duplicated "of" in `ClientOptions` doc comment ([#27978](https://github.com/astral-sh/ruff/pull/27978))
|
||||
|
||||
### Documentation
|
||||
|
||||
- Document rule acceptance guidelines ([#27910](https://github.com/astral-sh/ruff/pull/27910))
|
||||
- Document the new category selectors ([#27906](https://github.com/astral-sh/ruff/pull/27906))
|
||||
|
||||
### Contributors
|
||||
|
||||
- [@AlexWaygood](https://github.com/AlexWaygood)
|
||||
- [@sharkdp](https://github.com/sharkdp)
|
||||
- [@jelle-openai](https://github.com/jelle-openai)
|
||||
- [@charliermarsh](https://github.com/charliermarsh)
|
||||
- [@ntBre](https://github.com/ntBre)
|
||||
- [@aarushkandukoori](https://github.com/aarushkandukoori)
|
||||
|
||||
## 0.16.6
|
||||
|
||||
Released on 2026-09-03.
|
||||
|
||||
### Preview features
|
||||
|
||||
- Move `pytest-fixture-autouse` to the `restriction` category ([#28219](https://github.com/astral-sh/ruff/pull/28219))
|
||||
- \[`flake8-pytest-style`\] Add an autofix for `PT020` ([#27993](https://github.com/astral-sh/ruff/pull/27993))
|
||||
- \[`flake8-tidy-imports`\] Prevent fix loop between `TID254` and `TID255` ([#28262](https://github.com/astral-sh/ruff/pull/28262))
|
||||
- \[`isort`\] Exclude pragma comments from line length calculation (`I001`) ([#27313](https://github.com/astral-sh/ruff/pull/27313))
|
||||
|
||||
### Bug fixes
|
||||
|
||||
- Validate unary expressions when parsing ([#28233](https://github.com/astral-sh/ruff/pull/28233))
|
||||
- \[`flake8-async`, `pylint`\] Recognize `builtins.open` (`ASYNC230`, `PLW1514`) ([#28021](https://github.com/astral-sh/ruff/pull/28021))
|
||||
- \[`flake8-bugbear`\] Fix panic on `match` subjects (`B031`) ([#27781](https://github.com/astral-sh/ruff/pull/27781))
|
||||
- \[`flake8-datetimez`\] Reject `tzinfo=None` for `datetime` bounds (`DTZ901`) ([#28022](https://github.com/astral-sh/ruff/pull/28022))
|
||||
- \[`flake8-pytest-style`\] Avoid duplicate `PT017` diagnostics ([#27918](https://github.com/astral-sh/ruff/pull/27918))
|
||||
- \[`ruff`\] Remove `lint.external` hint for Ruff-specific suppressions (`RUF102`) ([#27923](https://github.com/astral-sh/ruff/pull/27923))
|
||||
|
||||
### Rule changes
|
||||
|
||||
- \[`flake8-use-pathlib`\] Add display-only fix for `os.listdir` (`PTH208`) ([#28027](https://github.com/astral-sh/ruff/pull/28027))
|
||||
|
||||
### Documentation
|
||||
|
||||
- Add another example and glob reference for `lint.per-file-ignores` ([#28106](https://github.com/astral-sh/ruff/pull/28106))
|
||||
- Add duplicate work guidance ([#28229](https://github.com/astral-sh/ruff/pull/28229))
|
||||
- \[`flake8-async`\] Document thread offloading (`ASYNC240`) ([#28008](https://github.com/astral-sh/ruff/pull/28008))
|
||||
- \[`pyupgrade`\] Clarify default `encoding` argument handling (`UP012`) ([#27315](https://github.com/astral-sh/ruff/pull/27315))
|
||||
|
||||
### Other changes
|
||||
|
||||
- Allow unary plus in match patterns on Python 3.15 ([#28231](https://github.com/astral-sh/ruff/pull/28231))
|
||||
|
||||
### Contributors
|
||||
|
||||
- [@flying-sheep](https://github.com/flying-sheep)
|
||||
- [@pikammmmm](https://github.com/pikammmmm)
|
||||
- [@fly1d](https://github.com/fly1d)
|
||||
- [@waterWang](https://github.com/waterWang)
|
||||
- [@Pierre-Sassoulas](https://github.com/Pierre-Sassoulas)
|
||||
- [@ntBre](https://github.com/ntBre)
|
||||
- [@jelle-openai](https://github.com/jelle-openai)
|
||||
- [@ericbuehl](https://github.com/ericbuehl)
|
||||
- [@tjkuson](https://github.com/tjkuson)
|
||||
- [@AbhinavMir](https://github.com/AbhinavMir)
|
||||
- [@Whning0513](https://github.com/Whning0513)
|
||||
- [@chirizxc](https://github.com/chirizxc)
|
||||
|
||||
## 0.16.7
|
||||
|
||||
Released on 2026-09-10.
|
||||
|
||||
### Preview features
|
||||
|
||||
- \[`ruff`\] Add rule for default values on method receivers (`RUF077`) ([#26700](https://github.com/astral-sh/ruff/pull/26700))
|
||||
- \[`ruff`\] Recognize `re.prefixmatch` (`RUF039`, `RUF055`) ([#28311](https://github.com/astral-sh/ruff/pull/28311))
|
||||
|
||||
### Bug fixes
|
||||
|
||||
- Alternate nested quotes inside format spec interpolations ([#28259](https://github.com/astral-sh/ruff/pull/28259))
|
||||
- \[`flake8-implicit-str-concat`\] Mark fix unsafe when it creates a docstring (`ISC003`) ([#27981](https://github.com/astral-sh/ruff/pull/27981))
|
||||
- \[`flake8-tidy-imports`\] Skip fixes for multi-member imports (`TID254`) ([#26584](https://github.com/astral-sh/ruff/pull/26584))
|
||||
- \[`pylint`\] Gate `ImportCycleError` on Python 3.15 (`PLW0133`) ([#28310](https://github.com/astral-sh/ruff/pull/28310))
|
||||
|
||||
### Rule changes
|
||||
|
||||
- Correct `D211` and `D203` rule conflict diagnostic ([#28444](https://github.com/astral-sh/ruff/pull/28444))
|
||||
- Recognize `slice` and `frozendict` generics ([#28477](https://github.com/astral-sh/ruff/pull/28477))
|
||||
- Stop defining `__cached__` for Python 3.15 ([#28476](https://github.com/astral-sh/ruff/pull/28476))
|
||||
- \[`pyupgrade`\] Stop recommending removed `typing.no_type_check_decorator` (`UP035`) ([#28475](https://github.com/astral-sh/ruff/pull/28475))
|
||||
|
||||
### Performance
|
||||
|
||||
- Reuse parser name lookups when interning ([#28399](https://github.com/astral-sh/ruff/pull/28399))
|
||||
- Speed up inherited configuration resolution ([#28299](https://github.com/astral-sh/ruff/pull/28299))
|
||||
|
||||
### Documentation
|
||||
|
||||
- Fix `line-length` path in `--config` example ([#28392](https://github.com/astral-sh/ruff/pull/28392))
|
||||
- Remove the "Who’s Using Ruff?" list ([#28455](https://github.com/astral-sh/ruff/pull/28455))
|
||||
|
||||
### Other changes
|
||||
|
||||
- Embed archive checksums in the shell installer ([#28281](https://github.com/astral-sh/ruff/pull/28281))
|
||||
|
||||
### Contributors
|
||||
|
||||
- [@The-Compiler](https://github.com/The-Compiler)
|
||||
- [@mdiniz97](https://github.com/mdiniz97)
|
||||
- [@zsol](https://github.com/zsol)
|
||||
- [@gorewilliams](https://github.com/gorewilliams)
|
||||
- [@RafaelJohn9](https://github.com/RafaelJohn9)
|
||||
- [@qatcod](https://github.com/qatcod)
|
||||
- [@zanieb](https://github.com/zanieb)
|
||||
- [@MichaReiser](https://github.com/MichaReiser)
|
||||
- [@ntBre](https://github.com/ntBre)
|
||||
- [@charliermarsh](https://github.com/charliermarsh)
|
||||
- [@nightt5879](https://github.com/nightt5879)
|
||||
- [@jonathandung](https://github.com/jonathandung)
|
||||
- [@jogo-openai](https://github.com/jogo-openai)
|
||||
|
||||
## 0.16.8
|
||||
|
||||
Released on 2026-09-16.
|
||||
|
||||
### Bug fixes
|
||||
|
||||
- Visit functional `TypedDict` keyword arguments correctly ([#28584](https://github.com/astral-sh/ruff/pull/28584))
|
||||
- \[`flake8-simplify`\] Detect nested `async with` under sync parent (`SIM117`) ([#27821](https://github.com/astral-sh/ruff/pull/27821))
|
||||
- \[`flake8-simplify`\] Preserve operand order in `SIM109` fix ([#27824](https://github.com/astral-sh/ruff/pull/27824))
|
||||
- \[`pyupgrade`\] Preserve required parentheses in multiline `UP040` fixes ([#28164](https://github.com/astral-sh/ruff/pull/28164))
|
||||
- \[`pyupgrade`\] Skip `TypeVarTuple` and `ParamSpec` conversions with bounds or constraints (`UP040`, `UP046`, `UP047`) ([#28505](https://github.com/astral-sh/ruff/pull/28505))
|
||||
|
||||
### Rule changes
|
||||
|
||||
- Add support for `__lazy_modules__` ([#28459](https://github.com/astral-sh/ruff/pull/28459))
|
||||
- Recognize PEP-728 `TypedDict` class keywords ([#28533](https://github.com/astral-sh/ruff/pull/28533))
|
||||
- Recognize quoted types in `typing.TypeForm` ([#28507](https://github.com/astral-sh/ruff/pull/28507))
|
||||
- Support conditional assignment to `__lazy_modules__` ([#28491](https://github.com/astral-sh/ruff/pull/28491))
|
||||
- \[`flake8-type-checking`\] Prefer lazy imports over `TYPE_CHECKING` on Python 3.15 and later (`TC001`, `TC002`, `TC003`) ([#28541](https://github.com/astral-sh/ruff/pull/28541))
|
||||
- \[`pyupgrade`\] Make the fix for `UP040` always unsafe ([#28526](https://github.com/astral-sh/ruff/pull/28526))
|
||||
- \[`pyupgrade`\] Stop recommending deprecated `ByteString` aliases (`UP035`) ([#28498](https://github.com/astral-sh/ruff/pull/28498))
|
||||
- \[`ruff`, `flake8-use-pathlib`\] Recognize the `parent_mode` argument (`RUF064`, `PTH103`) ([#28528](https://github.com/astral-sh/ruff/pull/28528))
|
||||
- \[`ruff`\] Detect `\Z` in `pytest.raises()` match patterns (`RUF043`) ([#28598](https://github.com/astral-sh/ruff/pull/28598))
|
||||
|
||||
### CLI
|
||||
|
||||
- Use rule name and code in formatter incompatibility warnings ([#28571](https://github.com/astral-sh/ruff/pull/28571))
|
||||
|
||||
### Configuration
|
||||
|
||||
- \[`flake8-tidy-imports`\] Add `extend-banned-api` ([#28644](https://github.com/astral-sh/ruff/pull/28644))
|
||||
|
||||
### Contributors
|
||||
|
||||
- [@VedantMadane](https://github.com/VedantMadane)
|
||||
- [@alzeph](https://github.com/alzeph)
|
||||
- [@charliermarsh](https://github.com/charliermarsh)
|
||||
- [@fredrikblau](https://github.com/fredrikblau)
|
||||
- [@ntBre](https://github.com/ntBre)
|
||||
- [@zsol](https://github.com/zsol)
|
||||
- [@Aniket-a14](https://github.com/Aniket-a14)
|
||||
- [@r-b-1](https://github.com/r-b-1)
|
||||
|
||||
## 0.16.9
|
||||
|
||||
Released on 2026-09-24.
|
||||
|
||||
### Preview features
|
||||
|
||||
- \[`ruff`\] Avoid false positives for overloaded division (`RUF069`) ([#28309](https://github.com/astral-sh/ruff/pull/28309))
|
||||
|
||||
### Bug fixes
|
||||
|
||||
- \[`flake8-bugbear`\] Avoid false positives for calls with keyword arguments (`B009`, `B010`, `B043`) ([#28776](https://github.com/astral-sh/ruff/pull/28776))
|
||||
- \[`flake8-tidy-imports`\] Allow lazy imports to be used in deferred annotations (`TID255`) ([#28767](https://github.com/astral-sh/ruff/pull/28767))
|
||||
|
||||
### Rule changes
|
||||
|
||||
- Update LibCST-based fixes for Python 3.15 ([#28616](https://github.com/astral-sh/ruff/pull/28616))
|
||||
- \[`flake8-pyi`\] Mention stubs in the diagnostic message (`PYI002`) ([#28542](https://github.com/astral-sh/ruff/pull/28542))
|
||||
|
||||
### Documentation
|
||||
|
||||
- Fix horizontal overflow on the rules documentation page ([#28699](https://github.com/astral-sh/ruff/pull/28699))
|
||||
- Update rules table with category information ([#28651](https://github.com/astral-sh/ruff/pull/28651))
|
||||
- \[`flake8-annotations`\] Clarify that `ANN401` checks return types in addition to arguments ([#28334](https://github.com/astral-sh/ruff/pull/28334))
|
||||
- \[`flake8-bugbear`\] Document type-checker interaction (`B010`) ([#28509](https://github.com/astral-sh/ruff/pull/28509))
|
||||
- \[`flake8-comprehensions`\] Document `map`/generator exception behavior (`C417`) ([#27794](https://github.com/astral-sh/ruff/pull/27794))
|
||||
- \[`ruff`\] Mention related isort settings (`RUF022`) ([#28719](https://github.com/astral-sh/ruff/pull/28719))
|
||||
|
||||
### Contributors
|
||||
|
||||
- [@qinpei-dev](https://github.com/qinpei-dev)
|
||||
- [@sanjayrohith](https://github.com/sanjayrohith)
|
||||
- [@ntBre](https://github.com/ntBre)
|
||||
- [@webdevsamran](https://github.com/webdevsamran)
|
||||
- [@zaniebot](https://github.com/zaniebot)
|
||||
- [@ewdurbin](https://github.com/ewdurbin)
|
||||
- [@MichaReiser](https://github.com/MichaReiser)
|
||||
- [@spaceone](https://github.com/spaceone)
|
||||
- [@IbrahimKhan12](https://github.com/IbrahimKhan12)
|
||||
- [@devtechedge](https://github.com/devtechedge)
|
||||
- [@GruffElixir](https://github.com/GruffElixir)
|
||||
|
||||
## 0.16.10
|
||||
|
||||
Released on 2026-10-01.
|
||||
|
||||
### Preview features
|
||||
|
||||
- Add a migration guide for categories ([#28087](https://github.com/astral-sh/ruff/pull/28087))
|
||||
- \[`pyupgrade`\] Add rule for context manager iterator annotations (`UP052`) ([#29000](https://github.com/astral-sh/ruff/pull/29000))
|
||||
|
||||
### Performance
|
||||
|
||||
- Reduce memory used by diagnostics ([#28951](https://github.com/astral-sh/ruff/pull/28951))
|
||||
|
||||
### Server
|
||||
|
||||
- Avoid running `uv format` in untrusted workspaces ([#28873](https://github.com/astral-sh/ruff/pull/28873))
|
||||
|
||||
### Documentation
|
||||
|
||||
- Fix links to moved changelog sections and renamed mdtests ([#28941](https://github.com/astral-sh/ruff/pull/28941))
|
||||
- Add Python 3.15 as a supported version ([#28907](https://github.com/astral-sh/ruff/pull/28907))
|
||||
- Add ty as a type checker example ([#28906](https://github.com/astral-sh/ruff/pull/28906))
|
||||
|
||||
### Other changes
|
||||
|
||||
- Update Rust toolchain to 1.99 and MSRV to 1.97 ([#29047](https://github.com/astral-sh/ruff/pull/29047))
|
||||
|
||||
### Contributors
|
||||
|
||||
- [@ntBre](https://github.com/ntBre)
|
||||
- [@spaceone](https://github.com/spaceone)
|
||||
- [@HardMax71](https://github.com/HardMax71)
|
||||
- [@charliermarsh](https://github.com/charliermarsh)
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "ruff"
|
||||
version = "0.16.10"
|
||||
version = "0.17.0"
|
||||
description = "An extremely fast Python linter and code formatter"
|
||||
authors = { workspace = true }
|
||||
edition = { workspace = true }
|
||||
|
||||
@@ -10,7 +10,7 @@ See the [documentation](https://docs.astral.sh/ruff/) or
|
||||
This crate is the entry point to the Ruff command-line interface. The Rust API exposed here is not
|
||||
considered public interface.
|
||||
|
||||
This is version 0.16.10. The source can be found [here](https://github.com/astral-sh/ruff/blob/0.16.10/crates/ruff).
|
||||
This is version 0.17.0. The source can be found [here](https://github.com/astral-sh/ruff/blob/0.17.0/crates/ruff).
|
||||
|
||||
The following Ruff workspace members are also available:
|
||||
|
||||
@@ -43,6 +43,8 @@ The following Ruff workspace members are also available:
|
||||
- [ruff_server](https://crates.io/crates/ruff_server)
|
||||
- [ruff_source_file](https://crates.io/crates/ruff_source_file)
|
||||
- [ruff_text_size](https://crates.io/crates/ruff_text_size)
|
||||
- [ruff_unicode_names2](https://crates.io/crates/ruff_unicode_names2)
|
||||
- [ruff_unicode_names2_generator](https://crates.io/crates/ruff_unicode_names2_generator)
|
||||
- [ruff_wasm](https://crates.io/crates/ruff_wasm)
|
||||
- [ruff_workspace](https://crates.io/crates/ruff_workspace)
|
||||
- [ty_combine](https://crates.io/crates/ty_combine)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "ruff_annotate_snippets"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
description = "This is an internal component crate of Ruff"
|
||||
authors = { workspace = true }
|
||||
edition = { workspace = true }
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "ruff_cache"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
description = "This is an internal component crate of Ruff"
|
||||
authors = { workspace = true }
|
||||
edition = { workspace = true }
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
This crate is an internal component of [Ruff](https://crates.io/crates/ruff). The Rust API exposed
|
||||
here is unstable and will have frequent breaking changes.
|
||||
|
||||
This version (0.0.16) is a component of [Ruff 0.16.10](https://crates.io/crates/ruff/0.16.10). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.16.10/crates/ruff_cache).
|
||||
This version (0.0.17) is a component of [Ruff 0.17.0](https://crates.io/crates/ruff/0.17.0). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.17.0/crates/ruff_cache).
|
||||
|
||||
See Ruff's [crate versioning policy](https://docs.astral.sh/ruff/versioning/#crate-versioning) for
|
||||
details on versioning.
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "ruff_command_line"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
description = "This is an internal component crate of Ruff"
|
||||
authors = { workspace = true }
|
||||
edition = { workspace = true }
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
<!-- This file is generated. DO NOT EDIT -->
|
||||
|
||||
# ruff_command_line
|
||||
|
||||
This crate is an internal component of [Ruff](https://crates.io/crates/ruff). The Rust API exposed
|
||||
here is unstable and will have frequent breaking changes.
|
||||
|
||||
This version (0.0.17) is a component of [Ruff 0.17.0](https://crates.io/crates/ruff/0.17.0). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.17.0/crates/ruff_command_line).
|
||||
|
||||
See Ruff's [crate versioning policy](https://docs.astral.sh/ruff/versioning/#crate-versioning) for
|
||||
details on versioning.
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "ruff_db"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
description = "This is an internal component crate of Ruff"
|
||||
authors = { workspace = true }
|
||||
edition = { workspace = true }
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
This crate is an internal component of [Ruff](https://crates.io/crates/ruff). The Rust API exposed
|
||||
here is unstable and will have frequent breaking changes.
|
||||
|
||||
This version (0.0.16) is a component of [Ruff 0.16.10](https://crates.io/crates/ruff/0.16.10). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.16.10/crates/ruff_db).
|
||||
This version (0.0.17) is a component of [Ruff 0.17.0](https://crates.io/crates/ruff/0.17.0). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.17.0/crates/ruff_db).
|
||||
|
||||
See Ruff's [crate versioning policy](https://docs.astral.sh/ruff/versioning/#crate-versioning) for
|
||||
details on versioning.
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "ruff_diagnostics"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
description = "This is an internal component crate of Ruff"
|
||||
authors = { workspace = true }
|
||||
edition = { workspace = true }
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
This crate is an internal component of [Ruff](https://crates.io/crates/ruff). The Rust API exposed
|
||||
here is unstable and will have frequent breaking changes.
|
||||
|
||||
This version (0.0.16) is a component of [Ruff 0.16.10](https://crates.io/crates/ruff/0.16.10). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.16.10/crates/ruff_diagnostics).
|
||||
This version (0.0.17) is a component of [Ruff 0.17.0](https://crates.io/crates/ruff/0.17.0). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.17.0/crates/ruff_diagnostics).
|
||||
|
||||
See Ruff's [crate versioning policy](https://docs.astral.sh/ruff/versioning/#crate-versioning) for
|
||||
details on versioning.
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "ruff_formatter"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
description = "This is an internal component crate of Ruff"
|
||||
authors = { workspace = true }
|
||||
edition = { workspace = true }
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
This crate is an internal component of [Ruff](https://crates.io/crates/ruff). The Rust API exposed
|
||||
here is unstable and will have frequent breaking changes.
|
||||
|
||||
This version (0.0.16) is a component of [Ruff 0.16.10](https://crates.io/crates/ruff/0.16.10). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.16.10/crates/ruff_formatter).
|
||||
This version (0.0.17) is a component of [Ruff 0.17.0](https://crates.io/crates/ruff/0.17.0). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.17.0/crates/ruff_formatter).
|
||||
|
||||
See Ruff's [crate versioning policy](https://docs.astral.sh/ruff/versioning/#crate-versioning) for
|
||||
details on versioning.
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "ruff_graph"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
description = "This is an internal component crate of Ruff"
|
||||
edition.workspace = true
|
||||
rust-version.workspace = true
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
This crate is an internal component of [Ruff](https://crates.io/crates/ruff). The Rust API exposed
|
||||
here is unstable and will have frequent breaking changes.
|
||||
|
||||
This version (0.0.16) is a component of [Ruff 0.16.10](https://crates.io/crates/ruff/0.16.10). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.16.10/crates/ruff_graph).
|
||||
This version (0.0.17) is a component of [Ruff 0.17.0](https://crates.io/crates/ruff/0.17.0). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.17.0/crates/ruff_graph).
|
||||
|
||||
See Ruff's [crate versioning policy](https://docs.astral.sh/ruff/versioning/#crate-versioning) for
|
||||
details on versioning.
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "ruff_index"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
description = "This is an internal component crate of Ruff"
|
||||
authors = { workspace = true }
|
||||
edition = { workspace = true }
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
This crate is an internal component of [Ruff](https://crates.io/crates/ruff). The Rust API exposed
|
||||
here is unstable and will have frequent breaking changes.
|
||||
|
||||
This version (0.0.16) is a component of [Ruff 0.16.10](https://crates.io/crates/ruff/0.16.10). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.16.10/crates/ruff_index).
|
||||
This version (0.0.17) is a component of [Ruff 0.17.0](https://crates.io/crates/ruff/0.17.0). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.17.0/crates/ruff_index).
|
||||
|
||||
See Ruff's [crate versioning policy](https://docs.astral.sh/ruff/versioning/#crate-versioning) for
|
||||
details on versioning.
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "ruff_linter"
|
||||
version = "0.16.10"
|
||||
version = "0.17.0"
|
||||
description = "This is an internal component crate of Ruff"
|
||||
authors = { workspace = true }
|
||||
edition = { workspace = true }
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
This crate is an internal component of [Ruff](https://crates.io/crates/ruff). The Rust API exposed
|
||||
here is unstable and will have frequent breaking changes.
|
||||
|
||||
This version (0.16.10) is a component of [Ruff 0.16.10](https://crates.io/crates/ruff/0.16.10). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.16.10/crates/ruff_linter).
|
||||
This version (0.17.0) is a component of [Ruff 0.17.0](https://crates.io/crates/ruff/0.17.0). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.17.0/crates/ruff_linter).
|
||||
|
||||
See Ruff's [crate versioning policy](https://docs.astral.sh/ruff/versioning/#crate-versioning) for
|
||||
details on versioning.
|
||||
+1
-1
@@ -67,7 +67,7 @@ use crate::{Edit, Fix, FixAvailability, Violation};
|
||||
///
|
||||
/// - [`lint.flake8-tidy-imports.require-lazy`]
|
||||
#[derive(ViolationMetadata)]
|
||||
#[violation_metadata(stable_since = "NEXT_RUFF_VERSION", category = Category::Correctness)]
|
||||
#[violation_metadata(stable_since = "0.17.0", category = Category::Correctness)]
|
||||
pub(crate) struct LazyImportImmediatelyResolved {
|
||||
name: String,
|
||||
fixable: bool,
|
||||
|
||||
@@ -60,7 +60,7 @@ use crate::{Edit, Fix, FixAvailability, Violation};
|
||||
/// - `lint.flake8-tidy-imports.require-lazy`
|
||||
/// - `lint.flake8-tidy-imports.ban-lazy`
|
||||
#[derive(ViolationMetadata)]
|
||||
#[violation_metadata(stable_since = "NEXT_RUFF_VERSION", category = Category::Restriction)]
|
||||
#[violation_metadata(stable_since = "0.17.0", category = Category::Restriction)]
|
||||
pub(crate) struct LazyImportMismatch {
|
||||
policy: LazyImportPolicy,
|
||||
name: Option<String>,
|
||||
|
||||
@@ -68,7 +68,7 @@ use crate::{Edit, Fix, FixAvailability, Violation};
|
||||
/// - [Why `os.path.commonprefix` is deprecated](https://sethmlarson.dev/deprecate-confusing-apis-like-os-path-commonprefix)
|
||||
/// - [CPython deprecation issue](https://github.com/python/cpython/issues/144347)
|
||||
#[derive(ViolationMetadata)]
|
||||
#[violation_metadata(stable_since = "NEXT_RUFF_VERSION", category = Category::Suspicious)]
|
||||
#[violation_metadata(stable_since = "0.17.0", category = Category::Suspicious)]
|
||||
pub(crate) struct OsPathCommonprefix;
|
||||
|
||||
impl Violation for OsPathCommonprefix {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "ruff_macros"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
description = "This is an internal component crate of Ruff"
|
||||
authors = { workspace = true }
|
||||
edition = { workspace = true }
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
This crate is an internal component of [Ruff](https://crates.io/crates/ruff). The Rust API exposed
|
||||
here is unstable and will have frequent breaking changes.
|
||||
|
||||
This version (0.0.16) is a component of [Ruff 0.16.10](https://crates.io/crates/ruff/0.16.10). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.16.10/crates/ruff_macros).
|
||||
This version (0.0.17) is a component of [Ruff 0.17.0](https://crates.io/crates/ruff/0.17.0). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.17.0/crates/ruff_macros).
|
||||
|
||||
See Ruff's [crate versioning policy](https://docs.astral.sh/ruff/versioning/#crate-versioning) for
|
||||
details on versioning.
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "ruff_markdown"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
description = "This is an internal component crate of Ruff"
|
||||
edition = { workspace = true }
|
||||
rust-version = { workspace = true }
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
This crate is an internal component of [Ruff](https://crates.io/crates/ruff). The Rust API exposed
|
||||
here is unstable and will have frequent breaking changes.
|
||||
|
||||
This version (0.0.16) is a component of [Ruff 0.16.10](https://crates.io/crates/ruff/0.16.10). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.16.10/crates/ruff_markdown).
|
||||
This version (0.0.17) is a component of [Ruff 0.17.0](https://crates.io/crates/ruff/0.17.0). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.17.0/crates/ruff_markdown).
|
||||
|
||||
See Ruff's [crate versioning policy](https://docs.astral.sh/ruff/versioning/#crate-versioning) for
|
||||
details on versioning.
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "ruff_memory_usage"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
description = "This is an internal component crate of Ruff"
|
||||
authors = { workspace = true }
|
||||
edition = { workspace = true }
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
This crate is an internal component of [Ruff](https://crates.io/crates/ruff). The Rust API exposed
|
||||
here is unstable and will have frequent breaking changes.
|
||||
|
||||
This version (0.0.16) is a component of [Ruff 0.16.10](https://crates.io/crates/ruff/0.16.10). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.16.10/crates/ruff_memory_usage).
|
||||
This version (0.0.17) is a component of [Ruff 0.17.0](https://crates.io/crates/ruff/0.17.0). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.17.0/crates/ruff_memory_usage).
|
||||
|
||||
See Ruff's [crate versioning policy](https://docs.astral.sh/ruff/versioning/#crate-versioning) for
|
||||
details on versioning.
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "ruff_notebook"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
description = "This is an internal component crate of Ruff"
|
||||
authors = { workspace = true }
|
||||
edition = { workspace = true }
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
This crate is an internal component of [Ruff](https://crates.io/crates/ruff). The Rust API exposed
|
||||
here is unstable and will have frequent breaking changes.
|
||||
|
||||
This version (0.0.16) is a component of [Ruff 0.16.10](https://crates.io/crates/ruff/0.16.10). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.16.10/crates/ruff_notebook).
|
||||
This version (0.0.17) is a component of [Ruff 0.17.0](https://crates.io/crates/ruff/0.17.0). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.17.0/crates/ruff_notebook).
|
||||
|
||||
See Ruff's [crate versioning policy](https://docs.astral.sh/ruff/versioning/#crate-versioning) for
|
||||
details on versioning.
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "ruff_options_metadata"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
description = "This is an internal component crate of Ruff"
|
||||
authors = { workspace = true }
|
||||
edition = { workspace = true }
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
This crate is an internal component of [Ruff](https://crates.io/crates/ruff). The Rust API exposed
|
||||
here is unstable and will have frequent breaking changes.
|
||||
|
||||
This version (0.0.16) is a component of [Ruff 0.16.10](https://crates.io/crates/ruff/0.16.10). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.16.10/crates/ruff_options_metadata).
|
||||
This version (0.0.17) is a component of [Ruff 0.17.0](https://crates.io/crates/ruff/0.17.0). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.17.0/crates/ruff_options_metadata).
|
||||
|
||||
See Ruff's [crate versioning policy](https://docs.astral.sh/ruff/versioning/#crate-versioning) for
|
||||
details on versioning.
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "ruff_python_ast"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
description = "This is an internal component crate of Ruff"
|
||||
authors = { workspace = true }
|
||||
edition = { workspace = true }
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
This crate is an internal component of [Ruff](https://crates.io/crates/ruff). The Rust API exposed
|
||||
here is unstable and will have frequent breaking changes.
|
||||
|
||||
This version (0.0.16) is a component of [Ruff 0.16.10](https://crates.io/crates/ruff/0.16.10). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.16.10/crates/ruff_python_ast).
|
||||
This version (0.0.17) is a component of [Ruff 0.17.0](https://crates.io/crates/ruff/0.17.0). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.17.0/crates/ruff_python_ast).
|
||||
|
||||
See Ruff's [crate versioning policy](https://docs.astral.sh/ruff/versioning/#crate-versioning) for
|
||||
details on versioning.
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "ruff_python_codegen"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
description = "This is an internal component crate of Ruff"
|
||||
authors = { workspace = true }
|
||||
edition = { workspace = true }
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
This crate is an internal component of [Ruff](https://crates.io/crates/ruff). The Rust API exposed
|
||||
here is unstable and will have frequent breaking changes.
|
||||
|
||||
This version (0.0.16) is a component of [Ruff 0.16.10](https://crates.io/crates/ruff/0.16.10). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.16.10/crates/ruff_python_codegen).
|
||||
This version (0.0.17) is a component of [Ruff 0.17.0](https://crates.io/crates/ruff/0.17.0). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.17.0/crates/ruff_python_codegen).
|
||||
|
||||
See Ruff's [crate versioning policy](https://docs.astral.sh/ruff/versioning/#crate-versioning) for
|
||||
details on versioning.
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "ruff_python_edits"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
description = "This is an internal component crate of Ruff"
|
||||
authors = { workspace = true }
|
||||
edition = { workspace = true }
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
This crate is an internal component of [Ruff](https://crates.io/crates/ruff). The Rust API exposed
|
||||
here is unstable and will have frequent breaking changes.
|
||||
|
||||
This version (0.0.16) is a component of [Ruff 0.16.10](https://crates.io/crates/ruff/0.16.10). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.16.10/crates/ruff_python_edits).
|
||||
This version (0.0.17) is a component of [Ruff 0.17.0](https://crates.io/crates/ruff/0.17.0). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.17.0/crates/ruff_python_edits).
|
||||
|
||||
See Ruff's [crate versioning policy](https://docs.astral.sh/ruff/versioning/#crate-versioning) for
|
||||
details on versioning.
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "ruff_python_formatter"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
description = "This is an internal component crate of Ruff"
|
||||
authors = { workspace = true }
|
||||
edition = { workspace = true }
|
||||
|
||||
@@ -32,8 +32,8 @@ Head to [The Ruff Formatter](https://docs.astral.sh/ruff/formatter/) for usage i
|
||||
This crate is an internal component of [Ruff](https://crates.io/crates/ruff). The Rust API exposed
|
||||
here is unstable and will have frequent breaking changes.
|
||||
|
||||
This version (0.0.16) is a component of [Ruff 0.16.10](https://crates.io/crates/ruff/0.16.10). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.16.10/crates/ruff_python_formatter).
|
||||
This version (0.0.17) is a component of [Ruff 0.17.0](https://crates.io/crates/ruff/0.17.0). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.17.0/crates/ruff_python_formatter).
|
||||
|
||||
See Ruff's [crate versioning policy](https://docs.astral.sh/ruff/versioning/#crate-versioning) for
|
||||
details on versioning.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "ruff_python_importer"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
description = "This is an internal component crate of Ruff"
|
||||
authors = { workspace = true }
|
||||
edition = { workspace = true }
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
This crate is an internal component of [Ruff](https://crates.io/crates/ruff). The Rust API exposed
|
||||
here is unstable and will have frequent breaking changes.
|
||||
|
||||
This version (0.0.16) is a component of [Ruff 0.16.10](https://crates.io/crates/ruff/0.16.10). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.16.10/crates/ruff_python_importer).
|
||||
This version (0.0.17) is a component of [Ruff 0.17.0](https://crates.io/crates/ruff/0.17.0). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.17.0/crates/ruff_python_importer).
|
||||
|
||||
See Ruff's [crate versioning policy](https://docs.astral.sh/ruff/versioning/#crate-versioning) for
|
||||
details on versioning.
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "ruff_python_index"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
description = "This is an internal component crate of Ruff"
|
||||
authors = { workspace = true }
|
||||
edition = { workspace = true }
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
This crate is an internal component of [Ruff](https://crates.io/crates/ruff). The Rust API exposed
|
||||
here is unstable and will have frequent breaking changes.
|
||||
|
||||
This version (0.0.16) is a component of [Ruff 0.16.10](https://crates.io/crates/ruff/0.16.10). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.16.10/crates/ruff_python_index).
|
||||
This version (0.0.17) is a component of [Ruff 0.17.0](https://crates.io/crates/ruff/0.17.0). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.17.0/crates/ruff_python_index).
|
||||
|
||||
See Ruff's [crate versioning policy](https://docs.astral.sh/ruff/versioning/#crate-versioning) for
|
||||
details on versioning.
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "ruff_python_literal"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
description = "This is an internal component crate of Ruff"
|
||||
authors = ["Charlie Marsh <charlie.r.marsh@gmail.com>", "RustPython Team"]
|
||||
edition = { workspace = true }
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
This crate is an internal component of [Ruff](https://crates.io/crates/ruff). The Rust API exposed
|
||||
here is unstable and will have frequent breaking changes.
|
||||
|
||||
This version (0.0.16) is a component of [Ruff 0.16.10](https://crates.io/crates/ruff/0.16.10). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.16.10/crates/ruff_python_literal).
|
||||
This version (0.0.17) is a component of [Ruff 0.17.0](https://crates.io/crates/ruff/0.17.0). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.17.0/crates/ruff_python_literal).
|
||||
|
||||
See Ruff's [crate versioning policy](https://docs.astral.sh/ruff/versioning/#crate-versioning) for
|
||||
details on versioning.
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "ruff_python_parser"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
description = "This is an internal component crate of Ruff"
|
||||
authors = ["Charlie Marsh <charlie.r.marsh@gmail.com>", "RustPython Team"]
|
||||
edition = { workspace = true }
|
||||
|
||||
@@ -19,8 +19,8 @@ Refer to the [contributing guidelines](./CONTRIBUTING.md) to get started and Git
|
||||
This crate is an internal component of [Ruff](https://crates.io/crates/ruff). The Rust API exposed
|
||||
here is unstable and will have frequent breaking changes.
|
||||
|
||||
This version (0.0.16) is a component of [Ruff 0.16.10](https://crates.io/crates/ruff/0.16.10). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.16.10/crates/ruff_python_parser).
|
||||
This version (0.0.17) is a component of [Ruff 0.17.0](https://crates.io/crates/ruff/0.17.0). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.17.0/crates/ruff_python_parser).
|
||||
|
||||
See Ruff's [crate versioning policy](https://docs.astral.sh/ruff/versioning/#crate-versioning) for
|
||||
details on versioning.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "ruff_python_semantic"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
description = "This is an internal component crate of Ruff"
|
||||
authors = { workspace = true }
|
||||
edition = { workspace = true }
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
This crate is an internal component of [Ruff](https://crates.io/crates/ruff). The Rust API exposed
|
||||
here is unstable and will have frequent breaking changes.
|
||||
|
||||
This version (0.0.16) is a component of [Ruff 0.16.10](https://crates.io/crates/ruff/0.16.10). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.16.10/crates/ruff_python_semantic).
|
||||
This version (0.0.17) is a component of [Ruff 0.17.0](https://crates.io/crates/ruff/0.17.0). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.17.0/crates/ruff_python_semantic).
|
||||
|
||||
See Ruff's [crate versioning policy](https://docs.astral.sh/ruff/versioning/#crate-versioning) for
|
||||
details on versioning.
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "ruff_python_stdlib"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
description = "This is an internal component crate of Ruff"
|
||||
authors = { workspace = true }
|
||||
edition = { workspace = true }
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
This crate is an internal component of [Ruff](https://crates.io/crates/ruff). The Rust API exposed
|
||||
here is unstable and will have frequent breaking changes.
|
||||
|
||||
This version (0.0.16) is a component of [Ruff 0.16.10](https://crates.io/crates/ruff/0.16.10). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.16.10/crates/ruff_python_stdlib).
|
||||
This version (0.0.17) is a component of [Ruff 0.17.0](https://crates.io/crates/ruff/0.17.0). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.17.0/crates/ruff_python_stdlib).
|
||||
|
||||
See Ruff's [crate versioning policy](https://docs.astral.sh/ruff/versioning/#crate-versioning) for
|
||||
details on versioning.
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "ruff_python_trivia"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
description = "This is an internal component crate of Ruff"
|
||||
authors = { workspace = true }
|
||||
edition = { workspace = true }
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
This crate is an internal component of [Ruff](https://crates.io/crates/ruff). The Rust API exposed
|
||||
here is unstable and will have frequent breaking changes.
|
||||
|
||||
This version (0.0.16) is a component of [Ruff 0.16.10](https://crates.io/crates/ruff/0.16.10). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.16.10/crates/ruff_python_trivia).
|
||||
This version (0.0.17) is a component of [Ruff 0.17.0](https://crates.io/crates/ruff/0.17.0). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.17.0/crates/ruff_python_trivia).
|
||||
|
||||
See Ruff's [crate versioning policy](https://docs.astral.sh/ruff/versioning/#crate-versioning) for
|
||||
details on versioning.
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "ruff_ranged_value"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
description = "This is an internal component crate of Ruff"
|
||||
authors = { workspace = true }
|
||||
edition = { workspace = true }
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
This crate is an internal component of [Ruff](https://crates.io/crates/ruff). The Rust API exposed
|
||||
here is unstable and will have frequent breaking changes.
|
||||
|
||||
This version (0.0.16) is a component of [Ruff 0.16.10](https://crates.io/crates/ruff/0.16.10). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.16.10/crates/ruff_ranged_value).
|
||||
This version (0.0.17) is a component of [Ruff 0.17.0](https://crates.io/crates/ruff/0.17.0). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.17.0/crates/ruff_ranged_value).
|
||||
|
||||
See Ruff's [crate versioning policy](https://docs.astral.sh/ruff/versioning/#crate-versioning) for
|
||||
details on versioning.
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "ruff_server"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
description = "This is an internal component crate of Ruff"
|
||||
authors = { workspace = true }
|
||||
edition = { workspace = true }
|
||||
|
||||
@@ -24,8 +24,8 @@ You can also join us on [**Discord**](https://discord.com/invite/astral-sh).
|
||||
This crate is an internal component of [Ruff](https://crates.io/crates/ruff). The Rust API exposed
|
||||
here is unstable and will have frequent breaking changes.
|
||||
|
||||
This version (0.0.16) is a component of [Ruff 0.16.10](https://crates.io/crates/ruff/0.16.10). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.16.10/crates/ruff_server).
|
||||
This version (0.0.17) is a component of [Ruff 0.17.0](https://crates.io/crates/ruff/0.17.0). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.17.0/crates/ruff_server).
|
||||
|
||||
See Ruff's [crate versioning policy](https://docs.astral.sh/ruff/versioning/#crate-versioning) for
|
||||
details on versioning.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "ruff_source_file"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
description = "This is an internal component crate of Ruff"
|
||||
authors = { workspace = true }
|
||||
edition = { workspace = true }
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
This crate is an internal component of [Ruff](https://crates.io/crates/ruff). The Rust API exposed
|
||||
here is unstable and will have frequent breaking changes.
|
||||
|
||||
This version (0.0.16) is a component of [Ruff 0.16.10](https://crates.io/crates/ruff/0.16.10). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.16.10/crates/ruff_source_file).
|
||||
This version (0.0.17) is a component of [Ruff 0.17.0](https://crates.io/crates/ruff/0.17.0). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.17.0/crates/ruff_source_file).
|
||||
|
||||
See Ruff's [crate versioning policy](https://docs.astral.sh/ruff/versioning/#crate-versioning) for
|
||||
details on versioning.
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "ruff_text_size"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
description = "This is an internal component crate of Ruff"
|
||||
authors = { workspace = true }
|
||||
edition = { workspace = true }
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
This crate is an internal component of [Ruff](https://crates.io/crates/ruff). The Rust API exposed
|
||||
here is unstable and will have frequent breaking changes.
|
||||
|
||||
This version (0.0.16) is a component of [Ruff 0.16.10](https://crates.io/crates/ruff/0.16.10). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.16.10/crates/ruff_text_size).
|
||||
This version (0.0.17) is a component of [Ruff 0.17.0](https://crates.io/crates/ruff/0.17.0). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.17.0/crates/ruff_text_size).
|
||||
|
||||
See Ruff's [crate versioning policy](https://docs.astral.sh/ruff/versioning/#crate-versioning) for
|
||||
details on versioning.
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "ruff_unicode_names2"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
description = "This is an internal component crate of Ruff"
|
||||
authors = { workspace = true }
|
||||
edition = { workspace = true }
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "ruff_unicode_names2_generator"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
description = "This is an internal component crate of Ruff"
|
||||
authors = { workspace = true }
|
||||
edition = "2018"
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
<!-- This file is generated. DO NOT EDIT -->
|
||||
|
||||
# ruff_unicode_names2_generator
|
||||
|
||||
This crate is an internal component of [Ruff](https://crates.io/crates/ruff). The Rust API exposed
|
||||
here is unstable and will have frequent breaking changes.
|
||||
|
||||
This version (0.0.17) is a component of [Ruff 0.17.0](https://crates.io/crates/ruff/0.17.0). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.17.0/crates/ruff_unicode_names2_generator).
|
||||
|
||||
See Ruff's [crate versioning policy](https://docs.astral.sh/ruff/versioning/#crate-versioning) for
|
||||
details on versioning.
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "ruff_wasm"
|
||||
version = "0.16.10"
|
||||
version = "0.17.0"
|
||||
description = "WebAssembly bindings for Ruff"
|
||||
authors = { workspace = true }
|
||||
edition = { workspace = true }
|
||||
|
||||
@@ -55,8 +55,8 @@ const formatted = workspace.format(exampleDocument);
|
||||
This crate is an internal component of [Ruff](https://crates.io/crates/ruff). The Rust API exposed
|
||||
here is unstable and will have frequent breaking changes.
|
||||
|
||||
This version (0.16.10) is a component of [Ruff 0.16.10](https://crates.io/crates/ruff/0.16.10). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.16.10/crates/ruff_wasm).
|
||||
This version (0.17.0) is a component of [Ruff 0.17.0](https://crates.io/crates/ruff/0.17.0). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.17.0/crates/ruff_wasm).
|
||||
|
||||
See Ruff's [crate versioning policy](https://docs.astral.sh/ruff/versioning/#crate-versioning) for
|
||||
details on versioning.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "ruff_workspace"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
description = "This is an internal component crate of Ruff"
|
||||
authors = { workspace = true }
|
||||
edition = { workspace = true }
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
This crate is an internal component of [Ruff](https://crates.io/crates/ruff). The Rust API exposed
|
||||
here is unstable and will have frequent breaking changes.
|
||||
|
||||
This version (0.0.16) is a component of [Ruff 0.16.10](https://crates.io/crates/ruff/0.16.10). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.16.10/crates/ruff_workspace).
|
||||
This version (0.0.17) is a component of [Ruff 0.17.0](https://crates.io/crates/ruff/0.17.0). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.17.0/crates/ruff_workspace).
|
||||
|
||||
See Ruff's [crate versioning policy](https://docs.astral.sh/ruff/versioning/#crate-versioning) for
|
||||
details on versioning.
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "ty_combine"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
description = "This is an internal component crate of Ruff"
|
||||
edition.workspace = true
|
||||
rust-version.workspace = true
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
This crate is an internal component of [Ruff](https://crates.io/crates/ruff). The Rust API exposed
|
||||
here is unstable and will have frequent breaking changes.
|
||||
|
||||
This version (0.0.16) is a component of [Ruff 0.16.10](https://crates.io/crates/ruff/0.16.10). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.16.10/crates/ty_combine).
|
||||
This version (0.0.17) is a component of [Ruff 0.17.0](https://crates.io/crates/ruff/0.17.0). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.17.0/crates/ty_combine).
|
||||
|
||||
See Ruff's [crate versioning policy](https://docs.astral.sh/ruff/versioning/#crate-versioning) for
|
||||
details on versioning.
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "ty_module_resolver"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
description = "This is an internal component crate of Ruff"
|
||||
authors = { workspace = true }
|
||||
edition = { workspace = true }
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
This crate is an internal component of [Ruff](https://crates.io/crates/ruff). The Rust API exposed
|
||||
here is unstable and will have frequent breaking changes.
|
||||
|
||||
This version (0.0.16) is a component of [Ruff 0.16.10](https://crates.io/crates/ruff/0.16.10). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.16.10/crates/ty_module_resolver).
|
||||
This version (0.0.17) is a component of [Ruff 0.17.0](https://crates.io/crates/ruff/0.17.0). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.17.0/crates/ty_module_resolver).
|
||||
|
||||
See Ruff's [crate versioning policy](https://docs.astral.sh/ruff/versioning/#crate-versioning) for
|
||||
details on versioning.
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "ty_python_core"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
description = "This is an internal component crate of Ruff"
|
||||
authors = { workspace = true }
|
||||
edition = { workspace = true }
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
This crate is an internal component of [Ruff](https://crates.io/crates/ruff). The Rust API exposed
|
||||
here is unstable and will have frequent breaking changes.
|
||||
|
||||
This version (0.0.16) is a component of [Ruff 0.16.10](https://crates.io/crates/ruff/0.16.10). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.16.10/crates/ty_python_core).
|
||||
This version (0.0.17) is a component of [Ruff 0.17.0](https://crates.io/crates/ruff/0.17.0). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.17.0/crates/ty_python_core).
|
||||
|
||||
See Ruff's [crate versioning policy](https://docs.astral.sh/ruff/versioning/#crate-versioning) for
|
||||
details on versioning.
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "ty_python_semantic"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
description = "This is an internal component crate of Ruff"
|
||||
authors = { workspace = true }
|
||||
edition = { workspace = true }
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
This crate is an internal component of [Ruff](https://crates.io/crates/ruff). The Rust API exposed
|
||||
here is unstable and will have frequent breaking changes.
|
||||
|
||||
This version (0.0.16) is a component of [Ruff 0.16.10](https://crates.io/crates/ruff/0.16.10). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.16.10/crates/ty_python_semantic).
|
||||
This version (0.0.17) is a component of [Ruff 0.17.0](https://crates.io/crates/ruff/0.17.0). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.17.0/crates/ty_python_semantic).
|
||||
|
||||
See Ruff's [crate versioning policy](https://docs.astral.sh/ruff/versioning/#crate-versioning) for
|
||||
details on versioning.
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "ty_site_packages"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
description = "This is an internal component crate of Ruff"
|
||||
authors = { workspace = true }
|
||||
edition = { workspace = true }
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
This crate is an internal component of [Ruff](https://crates.io/crates/ruff). The Rust API exposed
|
||||
here is unstable and will have frequent breaking changes.
|
||||
|
||||
This version (0.0.16) is a component of [Ruff 0.16.10](https://crates.io/crates/ruff/0.16.10). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.16.10/crates/ty_site_packages).
|
||||
This version (0.0.17) is a component of [Ruff 0.17.0](https://crates.io/crates/ruff/0.17.0). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.17.0/crates/ty_site_packages).
|
||||
|
||||
See Ruff's [crate versioning policy](https://docs.astral.sh/ruff/versioning/#crate-versioning) for
|
||||
details on versioning.
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "ty_static"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
description = "This is an internal component crate of Ruff"
|
||||
edition = { workspace = true }
|
||||
rust-version = { workspace = true }
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
This crate is an internal component of [Ruff](https://crates.io/crates/ruff). The Rust API exposed
|
||||
here is unstable and will have frequent breaking changes.
|
||||
|
||||
This version (0.0.16) is a component of [Ruff 0.16.10](https://crates.io/crates/ruff/0.16.10). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.16.10/crates/ty_static).
|
||||
This version (0.0.17) is a component of [Ruff 0.17.0](https://crates.io/crates/ruff/0.17.0). The
|
||||
source can be found [here](https://github.com/astral-sh/ruff/blob/0.17.0/crates/ty_static).
|
||||
|
||||
See Ruff's [crate versioning policy](https://docs.astral.sh/ruff/versioning/#crate-versioning) for
|
||||
details on versioning.
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "ty_vendored"
|
||||
version = "0.0.16"
|
||||
version = "0.0.17"
|
||||
description = "This is an internal component crate of Ruff"
|
||||
authors = { workspace = true }
|
||||
edition = { workspace = true }
|
||||
|
||||
+1
-1
@@ -303,7 +303,7 @@ support needs to be explicitly included by adding it to `types_or`:
|
||||
```yaml title=".pre-commit-config.yaml"
|
||||
repos:
|
||||
- repo: https://github.com/astral-sh/ruff-pre-commit
|
||||
rev: v0.16.10
|
||||
rev: v0.17.0
|
||||
hooks:
|
||||
- id: ruff-format
|
||||
types_or: [python, pyi, jupyter, markdown]
|
||||
|
||||
@@ -5,8 +5,8 @@ Ruff is available as [`ruff`](https://pypi.org/project/ruff/) on PyPI.
|
||||
Ruff can be invoked directly with [`uvx`](https://docs.astral.sh/uv/):
|
||||
|
||||
```shell
|
||||
uvx ruff@0.16.10 check # Lint all files in the current directory.
|
||||
uvx ruff@0.16.10 format # Format all files in the current directory.
|
||||
uvx ruff@0.17.0 check # Lint all files in the current directory.
|
||||
uvx ruff@0.17.0 format # Format all files in the current directory.
|
||||
```
|
||||
|
||||
Or installed with `uv` (recommended), `pip`, or `pipx`:
|
||||
|
||||
@@ -80,7 +80,7 @@ You can add the following configuration to `.gitlab-ci.yml` to run a `ruff forma
|
||||
stage: build
|
||||
interruptible: true
|
||||
image:
|
||||
name: ghcr.io/astral-sh/ruff:0.16.10-alpine
|
||||
name: ghcr.io/astral-sh/ruff:0.17.0-alpine
|
||||
before_script:
|
||||
- cd $CI_PROJECT_DIR
|
||||
- ruff --version
|
||||
@@ -106,7 +106,7 @@ Ruff can be used as a [pre-commit](https://pre-commit.com) hook via [`ruff-pre-c
|
||||
```yaml
|
||||
- repo: https://github.com/astral-sh/ruff-pre-commit
|
||||
# Ruff version.
|
||||
rev: v0.16.10
|
||||
rev: v0.17.0
|
||||
hooks:
|
||||
# Run the linter.
|
||||
- id: ruff-check
|
||||
@@ -119,7 +119,7 @@ To enable lint fixes, add the `--fix` argument to the lint hook:
|
||||
```yaml
|
||||
- repo: https://github.com/astral-sh/ruff-pre-commit
|
||||
# Ruff version.
|
||||
rev: v0.16.10
|
||||
rev: v0.17.0
|
||||
hooks:
|
||||
# Run the linter.
|
||||
- id: ruff-check
|
||||
@@ -133,7 +133,7 @@ To avoid running on Jupyter Notebooks, remove `jupyter` from the list of allowed
|
||||
```yaml
|
||||
- repo: https://github.com/astral-sh/ruff-pre-commit
|
||||
# Ruff version.
|
||||
rev: v0.16.10
|
||||
rev: v0.17.0
|
||||
hooks:
|
||||
# Run the linter.
|
||||
- id: ruff-check
|
||||
|
||||
+1
-1
@@ -372,7 +372,7 @@ This tutorial has focused on Ruff's command-line interface, but Ruff can also be
|
||||
```yaml
|
||||
- repo: https://github.com/astral-sh/ruff-pre-commit
|
||||
# Ruff version.
|
||||
rev: v0.16.10
|
||||
rev: v0.17.0
|
||||
hooks:
|
||||
# Run the linter.
|
||||
- id: ruff-check
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@ build-backend = "maturin"
|
||||
|
||||
[project]
|
||||
name = "ruff"
|
||||
version = "0.16.10"
|
||||
version = "0.17.0"
|
||||
description = "An extremely fast Python linter and code formatter, written in Rust."
|
||||
authors = [{ name = "Astral Software Inc.", email = "hey@astral.sh" }]
|
||||
readme = "README.md"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[project]
|
||||
name = "scripts"
|
||||
version = "0.16.10"
|
||||
version = "0.17.0"
|
||||
description = ""
|
||||
authors = ["Charles Marsh <charlie.r.marsh@gmail.com>"]
|
||||
|
||||
|
||||
Reference in new issue
Block a user