Releases: astral-sh/ruff
Releases · astral-sh/ruff
0.14.7
Release Notes
Released on 2025-11-28.
Preview features
- [
flake8-bandit] Handle string literal bindings in suspicious-url-open-usage (S310) (#21469) - [
pylint] FixPLR1708false positives on nested functions (#21177) - [
pylint] Fix suppression for empty dict without tuple key annotation (PLE1141) (#21290) - [
ruff] Add ruleRUF066to detect unnecessary class properties (#21535) - [
ruff] Catch more dummy variable uses (RUF052) (#19799)
Bug fixes
- [server] Set severity for non-rule diagnostics (#21559)
- [
flake8-implicit-str-concat] Avoid invalid fix in (ISC003) (#21517) - [
parser] Fix panic when parsing IPython escape command expressions (#21480)
CLI
- Show partial fixability indicator in statistics output (#21513)
Contributors
- @mikeleppane
- @senekor
- @ShaharNaveh
- @JumboBear
- @prakhar1144
- @tsvikas
- @danparizher
- @chirizxc
- @AlexWaygood
- @MichaReiser
Install ruff 0.14.7
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.7/ruff-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.14.7/ruff-installer.ps1 | iex"Download ruff 0.14.7
0.14.6
Release Notes
Released on 2025-11-21.
Preview features
- [
flake8-bandit] Support new PySNMP API paths (S508,S509) (#21374)
Bug fixes
- Adjust own-line comment placement between branches (#21185)
- Avoid syntax error when formatting attribute expressions with outer parentheses, parenthesized value, and trailing comment on value (#20418)
- Fix panic when formatting comments in unary expressions (#21501)
- Respect
fmt: skipfor compound statements on a single line (#20633) - [
refurb] FixFURB103autofix (#21454) - [
ruff] Fix false positive for complex conversion specifiers inlogging-eager-conversion(RUF065) (#21464)
Rule changes
- [
ruff] Avoid false positive onClassVarreassignment (RUF012) (#21478)
CLI
- Render hyperlinks for lint errors (#21514)
- Add a
ruff analyzeoption to skip over imports inTYPE_CHECKINGblocks (#21472)
Documentation
- Limit
eglot-formathook to eglot-managed Python buffers (#21459) - Mention
force-excludein "Configuration > Python file discovery" (#21500)
Contributors
Install ruff 0.14.6
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.6/ruff-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.14.6/ruff-installer.ps1 | iex"Download ruff 0.14.6
0.14.5
Release Notes
Released on 2025-11-13.
Preview features
- [
flake8-simplify] ApplySIM113when index variable is of typeint(#21395) - [
pydoclint] Fix false positive when Sphinx directives follow a "Raises" section (DOC502) (#20535) - [
pydoclint] Support NumPy-style comma-separated parameters (DOC102) (#20972) - [
refurb] Auto-fix annotated assignments (FURB101) (#21278) - [
ruff] Ignorestr()when not used for simple conversion (RUF065) (#21330)
Bug fixes
- Fix syntax error false positive on alternative
matchpatterns (#21362) - [
flake8-simplify] Fix false positive for iterable initializers with generator arguments (SIM222) (#21187) - [
pyupgrade] Fix false positive on relative imports from local.builtinsmodule (UP029) (#21309) - [
pyupgrade] Consistently set the deprecated tag (UP035) (#21396)
Rule changes
- [
refurb] Detect empty f-strings (FURB105) (#21348)
CLI
- Add option to provide a reason to
--add-noqa(#21294) - Add upstream linter URL to
ruff linter --output-format=json(#21316) - Add color to
--help(#21337)
Documentation
- Add a new "Opening a PR" section to the contribution guide (#21298)
- Added the PyScripter IDE to the list of "Who is using Ruff?" (#21402)
- Update PyCharm setup instructions (#21409)
- [
flake8-annotations] Add link toallow-star-arg-anyoption (ANN401) (#21326)
Other changes
- [
configuration] Improve error message whenline-lengthexceedsu16::MAX(#21329)
Contributors
- @njhearp
- @11happy
- @hugovk
- @Gankra
- @ntBre
- @pyscripter
- @danparizher
- @MichaReiser
- @henryiii
- @charliecloudberry
Install ruff 0.14.5
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.5/ruff-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.14.5/ruff-installer.ps1 | iex"Download ruff 0.14.5
0.14.4
Release Notes
Released on 2025-11-06.
Preview features
- [formatter] Allow newlines after function headers without docstrings (#21110)
- [formatter] Avoid extra parentheses for long
matchpatterns withascaptures (#21176) - [
refurb] Expand fix safety for keyword arguments andDecimals (FURB164) (#21259) - [
refurb] Preserve argument ordering in autofix (FURB103) (#20790)
Bug fixes
- [server] Fix missing diagnostics for notebooks (#21156)
- [
flake8-bugbear] Ignore non-NFKC attribute names inB009andB010(#21131) - [
refurb] Fix false negative for underscores before sign inDecimalconstructor (FURB157) (#21190) - [
ruff] Fix false positives on starred arguments (RUF057) (#21256)
Rule changes
- [
airflow] extend deprecated argumentconcurrencyinairflow..DAG(AIR301) (#21220)
Documentation
- Improve
extenddocs (#21135) - [
flake8-comprehensions] Fix typo inC416documentation (#21184) - Revise Ruff setup instructions for Zed editor (#20935)
Other changes
- Make
ruff analyze graphwork with jupyter notebooks (#21161)
Contributors
- @chirizxc
- @Lee-W
- @musicinmybrain
- @MichaReiser
- @tjkuson
- @danparizher
- @renovate
- @ntBre
- @gauthsvenkat
- @LoicRiegel
Install ruff 0.14.4
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.4/ruff-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.14.4/ruff-installer.ps1 | iex"Download ruff 0.14.4
0.14.3
Release Notes
Released on 2025-10-30.
Preview features
- Respect
--output-formatwith--watch(#21097) - [
pydoclint] Fix false positive on explicit exception re-raising (DOC501,DOC502) (#21011) - [
pyflakes] Revert to stable behavior if imports for module lie in alternate branches forF401(#20878) - [
pylint] Implementstop-iteration-return(PLR1708) (#20733) - [
ruff] Add support for additional eager conversion patterns (RUF065) (#20657)
Bug fixes
- Fix finding keyword range for clause header after statement ending with semicolon (#21067)
- Fix syntax error false positive on nested alternative patterns (#21104)
- [
ISC001] Fix panic when string literals are unclosed (#21034) - [
flake8-django] ApplyDJ001to annotated fields (#20907) - [
flake8-pyi] FixPYI034to not trigger on metaclasses (PYI034) (#20881) - [
flake8-type-checking] FixTC003false positive withfuture-annotations(#21125) - [
pyflakes] Fix false positive for__class__in lambda expressions within class definitions (F821) (#20564) - [
pyupgrade] Fix false positive forTypeVarwith default on Python <3.13 (UP046,UP047) (#21045)
Rule changes
- Add missing docstring sections to the numpy list (#20931)
- [
airflow] Extendairflow.models..Paramcheck (AIR311) (#21043) - [
airflow] Warn thatairflow....DAG.create_dagrunhas been removed (AIR301) (#21093) - [
refurb] Preserve digit separators inDecimalconstructor (FURB157) (#20588)
Server
- Avoid sending an unnecessary "clear diagnostics" message for clients supporting pull diagnostics (#21105)
Documentation
- [
flake8-bandit] Fix correct example forS308(#21128)
Other changes
- Clearer error message when
line-lengthgoes beyond threshold (#21072)
Contributors
- @danparizher
- @jvacek
- @ntBre
- @augustelalande
- @prakhar1144
- @TaKO8Ki
- @dylwil3
- @fatelei
- @ShaharNaveh
- @Lee-W
Install ruff 0.14.3
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.3/ruff-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.14.3/ruff-installer.ps1 | iex"Download ruff 0.14.3
0.14.2
Release Notes
Released on 2025-10-23.
Preview features
- [
flake8-gettext] Resolve qualified names and built-in bindings (INT001,INT002,INT003) (#19045)
Bug fixes
- Avoid reusing nested, interpolated quotes before Python 3.12 (#20930)
- Catch syntax errors in nested interpolations before Python 3.12 (#20949)
- [
fastapi] Handle ellipsis defaults inFAST002autofix (#20810) - [
flake8-simplify] SkipSIM911when unknown arguments are present (#20697) - [
pyupgrade] Always parenthesize assignment expressions in fix forf-string(UP032) (#21003) - [
pyupgrade] FixUP032conversion for decimal ints with underscores (#21022) - [
fastapi] Skip autofix for keyword and__debug__path params (FAST003) (#20960)
Rule changes
- [
flake8-bugbear] SkipB905andB912for fewer than two iterables and no starred arguments (#20998) - [
ruff] UseDiagnosticTagfor morepyflakesandpandasrules (#20801)
CLI
- Improve JSON output from
ruff rule(#20168)
Documentation
Other changes
- [syntax-errors] Name is parameter and global (#20426)
- [syntax-errors] Alternative
matchpatterns bind different names (#20682)
Contributors
Install ruff 0.14.2
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.2/ruff-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.14.2/ruff-installer.ps1 | iex"Download ruff 0.14.2
0.14.1
Release Notes
Released on 2025-10-16.
Preview features
- [formatter] Remove parentheses around multiple exception types on Python 3.14+ (#20768)
- [
flake8-bugbear] Omit annotation in preview fix forB006(#20877) - [
flake8-logging-format] Avoid dropping implicitly concatenated pieces in theG004fix (#20793) - [
pydoclint] Implementdocstring-extraneous-parameter(DOC102) (#20376) - [
pyupgrade] ExtendUP019to detecttyping_extensions.Text(UP019) (#20825) - [
pyupgrade] Fix false negative forTypeVarwith default argument innon-pep695-generic-class(UP046) (#20660)
Bug fixes
- Fix false negatives in
Truthiness::from_exprfor lambdas, generators, and f-strings (#20704) - Fix syntax error false positives for escapes and quotes in f-strings (#20867)
- Fix syntax error false positives on parenthesized context managers (#20846)
- [
fastapi] Fix false positives for path parameters that FastAPI doesn't recognize (FAST003) (#20687) - [
flake8-pyi] Fix operator precedence by adding parentheses when needed (PYI061) (#20508) - [
ruff] Suppress diagnostic for f-string interpolations with debug text (RUF010) (#20525)
Rule changes
- [
airflow] Add warning toairflow.datasets.DatasetEventusage (AIR301) (#20551) - [
flake8-bugbear] MarkB905andB912fixes as unsafe (#20695) - Use
DiagnosticTagfor more rules - changes display in editors (#20758,#20734)
Documentation
- Update Python compatibility from 3.13 to 3.14 in README.md (#20852)
- Update
lint.flake8-type-checking.quoted-annotationsdocs (#20765) - Update setup instructions for Zed 0.208.0+ (#20902)
- [
flake8-datetimez] Clarify docs for several rules (#20778) - Fix typo in
RUF015description (#20873)
Other changes
- Reduce binary size (#20863)
- Improved error recovery for unclosed strings (including f- and t-strings) (#20848)
Contributors
- @ntBre
- @Paillat-dev
- @terror
- @pieterh-oai
- @MichaReiser
- @TaKO8Ki
- @ageorgou
- @danparizher
- @mgaitan
- @augustelalande
- @dylwil3
- @Lee-W
- @injust
- @CarrotManMatt
Install ruff 0.14.1
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.1/ruff-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.14.1/ruff-installer.ps1 | iex"Download ruff 0.14.1
0.14.0
Release Notes
Released on 2025-10-07.
Breaking changes
- Update default and latest Python versions for 3.14 (#20725)
Preview features
- [
flake8-bugbear] Include certain guaranteed-mutable expressions: tuples, generators, and assignment expressions (B006) (#20024) - [
refurb] Add fixes forFURB101andFURB103(#20520) - [
ruff] ExtendFA102with listed PEP 585-compatible APIs (#20659)
Bug fixes
- [
flake8-annotations] Fix return type annotations to handle shadowed builtin symbols (ANN201,ANN202,ANN204,ANN205,ANN206) (#20612) - [
flynt] Fix f-string quoting for mixed quote joiners (FLY002) (#20662) - [
isort] Fix inserting required imports before future imports (I002) (#20676) - [
ruff] Handle argfile expansion errors gracefully (#20691) - [
ruff] SkipRUF051ifelse/elifblock is present (#20705) - [
ruff] Improve handling of intermixed comments inside from-imports (#20561)
Documentation
- [
flake8-comprehensions] Clarify fix safety documentation (C413) (#20640)
Contributors
Install ruff 0.14.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.0/ruff-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.14.0/ruff-installer.ps1 | iex"Download ruff 0.14.0
0.13.3
Release Notes
Released on 2025-10-02.
Preview features
- Display diffs for
ruff format --checkand add support for different output formats (#20443) - [
pyflakes] Handle some common submodule import situations forunused-import(F401) (#20200) - [
ruff] Do not flag%r+repr()combinations (RUF065) (#20600)
Bug fixes
- [
cli] Add conflict between--add-noqaand--diffoptions (#20642) - [
pylint] Exempt required imports fromPLR0402(#20381) - [
pylint] Fix missingmax-nested-blocksin settings display (#20574) - [
pyupgrade] Prevent infinite loop withI002andUP026(#20634)
Rule changes
- [
flake8-simplify] Improve help message clarity (SIM105) (#20548)
Documentation
- Add the The Basics title back to CONTRIBUTING.md (#20624)
- Fixed documentation for try_consider_else (#20587)
- [
isort] Clarify dependency betweenorder-by-typeandcase-sensitivesettings (#20559) - [
pylint] Clarify fix safety to include left-hand hashability (PLR6201) (#20518)
Other changes
- [
playground] Fix quick fixes for empty ranges in playground (#20599)
Contributors
Install ruff 0.13.3
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.13.3/ruff-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.13.3/ruff-installer.ps1 | iex"Download ruff 0.13.3
0.13.2
Release Notes
Released on 2025-09-25.
Preview features
- [
flake8-async] Implementblocking-path-method(ASYNC240) (#20264) - [
flake8-bugbear] Implementmap-without-explicit-strict(B912) (#20429) - [
flake8-bultins] Detect class-scope builtin shadowing in decorators, default args, and attribute initializers (A003) (#20178) - [
ruff] Implementlogging-eager-conversion(RUF065) (#19942) - Include
.pywfiles by default when linting and formatting (#20458)
Bug fixes
- Deduplicate input paths (#20105)
- [
flake8-comprehensions] Preserve trailing commas for single-element lists (C409) (#19571) - [
flake8-pyi] Avoid syntax error from conflict withPIE790(PYI021) (#20010) - [
flake8-simplify] Correct fix for positivemaxsplitwithout separator (SIM905) (#20056) - [
pyupgrade] FixUP008not to apply when__class__is a local variable (#20497) - [
ruff] FixB004to skip invalidhasattr/getattrcalls (#20486) - [
ruff] Replace-nanwithnanwhen using the value to construct aDecimal(FURB164) (#20391)
Documentation
- Add 'Finding ways to help' to CONTRIBUTING.md (#20567)
- Update import path to
ruff-wasm-web(#20539) - [
flake8-bandit] Clarify the supported hashing functions (S324) (#20534)
Other changes
- [
playground] Allow hover quick fixes to appear for overlapping diagnostics (#20527) - [
playground] Fix non‑BMP code point handling in quick fixes and markers (#20526)
Contributors
- @BurntSushi
- @mtshiba
- @second-ed
- @danparizher
- @ShikChen
- @PieterCK
- @GDYendell
- @RazerM
- @TaKO8Ki
- @amyreese
- @ntbre
- @MichaReiser
Install ruff 0.13.2
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.13.2/ruff-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.13.2/ruff-installer.ps1 | iex"