Sourced from ruff's\r\nreleases.
\r\n\r\n\r\nv0.4.1
\r\nChanges
\r\nPreview features
\r\n\r\n
\r\n- [
\r\npylint
] Implementinvalid-hash-returned
\r\n(PLE0309
) (#10961)- [
\r\npylint
] Implementinvalid-index-returned
\r\n(PLE0305
) (#10962)Bug fixes
\r\n\r\n
\r\n- [
\r\npylint
] AllowNoReturn
-like functions for\r\n__str__
,__len__
, etc. (PLE0307
)\r\n(#11017)- Parser: Use empty range when there's "gap" in token source\r\n(#11032)
\r\n- [
\r\nruff
] Ignore stub functions in\r\nunused-async
(RUF029
) (#11026)- Parser: Expect indented case block instead of match stmt (#11033)
\r\nContributors
\r\n\r\n
\r\n- \r\n
@AlexWaygood
- \r\n
@HenryAsa
- \r\n
@MithicSpirit
- \r\n
@charliermarsh
- \r\n
@dhruvmanila
- \r\n
@tibor-reiss
v0.4.0
\r\nChanges
\r\nA new, hand-written parser
\r\nRuff's new parser is >2x faster, which translates\r\nto a 20-40% speedup for all linting and formatting\r\ninvocations. There's a lot to say about this exciting change, so check\r\nout the blog post for\r\nmore details!
\r\nSee #10036\r\nfor implementation details.
\r\nA new language server in Rust
\r\nWith this release, we also want to highlight our new language server.\r\n
\r\nruff server
is a Rust-powered language server that comes\r\nbuilt-in with Ruff. It can be used with any editor that supports the Language\r\nServer Protocol (LSP). It uses a multi-threaded, lock-free\r\narchitecture inspired byrust-analyzer
and it will open the\r\ndoor for a lot of exciting features. It’s also faster than our previous\r\nPython-based language\r\nserver -- but you probably guessed that already.\r\n
ruff server
is only in alpha, but it has a lot of\r\nfeatures that you can try out today:\r\n
\r\n- Lints Python files automatically and shows quick-fixes when\r\navailable
\r\n- Formats Python files, with support for range formatting
\r\n- Comes with commands for quickly performing actions:\r\n
\r\nruff.applyAutofix
,ruff.applyFormat
, and\r\nruff.applyOrganizeImports
- Supports
\r\nsource.fixAll
and\r\nsource.organizeImports
source actions- Automatically reloads your project configuration when you change\r\nit
\r\nTo setup
\r\nruff server
with your editor, refer to the README.md.Preview features
\r\n\r\n\r\n
... (truncated)
\r\nSourced from ruff's\r\nchangelog.
\r\n\r\n\r\n0.4.1
\r\nPreview features
\r\n\r\n
\r\n- [
\r\npylint
] Implementinvalid-hash-returned
\r\n(PLE0309
) (#10961)- [
\r\npylint
] Implementinvalid-index-returned
\r\n(PLE0305
) (#10962)Bug fixes
\r\n\r\n
\r\n- [
\r\npylint
] AllowNoReturn
-like functions for\r\n__str__
,__len__
, etc. (PLE0307
)\r\n(#11017)- Parser: Use empty range when there's "gap" in token source\r\n(#11032)
\r\n- [
\r\nruff
] Ignore stub functions in\r\nunused-async
(RUF029
) (#11026)- Parser: Expect indented case block instead of match stmt (#11033)
\r\n0.4.0
\r\nA new, hand-written parser
\r\nRuff's new parser is >2x faster, which translates\r\nto a 20-40% speedup for all linting and formatting\r\ninvocations.\r\nThere's a lot to say about this exciting change, so check out the blog post for more\r\ndetails!
\r\nSee #10036\r\nfor implementation details.
\r\nA new language server in Rust
\r\nWith this release, we also want to highlight our new language server.\r\n
\r\nruff server
is a Rust-powered language\r\nserver that comes built-in with Ruff. It can be used with any editor\r\nthat supports the Language\r\nServer Protocol (LSP).\r\nIt uses a multi-threaded, lock-free architecture inspired by\r\nrust-analyzer
and it will open the door for a lot\r\nof exciting features. It’s also faster than our previous Python-based language\r\nserver\r\n-- but you probably guessed that already.\r\n
ruff server
is only in alpha, but it has a lot of\r\nfeatures that you can try out today:\r\n
\r\n- Lints Python files automatically and shows quick-fixes when\r\navailable
\r\n- Formats Python files, with support for range formatting
\r\n- Comes with commands for quickly performing actions:\r\n
\r\nruff.applyAutofix
,ruff.applyFormat
, and\r\nruff.applyOrganizeImports
- Supports
\r\nsource.fixAll
and\r\nsource.organizeImports
source actions- Automatically reloads your project configuration when you change\r\nit
\r\nTo setup
\r\nruff server
with your editor, refer to the README.md.Preview features
\r\n\r\n
\r\n\r\n- [
\r\npycodestyle
] Do not triggerE3
rules on\r\ndef
s following a function/method with a dummy body (#10704)- [
\r\npylint
] Implementinvalid-bytes-returned
\r\n(E0308
) (#10959)- [
\r\npylint
] Implementinvalid-length-returned
\r\n(E0303
) (#10963)- [
\r\npylint
] Implementself-cls-assignment
\r\n(W0642
) (#9267)- [
\r\npylint
] Omit stubs frominvalid-bool
and\r\ninvalid-str-return-type
(#11008)- [
\r\nruff
] New ruleunused-async
\r\n(RUF029
) to detect unneededasync
keywords on\r\nfunctions (#9966)
... (truncated)
\r\n0ff25a5
\r\nBump version to 0.4.1 (#11035)34873ec
\r\nAdd a script to fuzz the parser (courtesy of\r\npysource-codegen
) (#11015)d3cd61f
\r\nUse empty range when there's "gap" in token source (#11032)9b80cc0
\r\nSelect fewer ruff rules when linting Python files in\r\nscripts/
(#11034)9bb23b0
\r\nExpect indented case block instead of match stmt (#11033)06c248a
\r\n[ruff]
Ignore stub functions in unused-async
\r\n(RUF029
) (#11026)27902b7
\r\n[pylint
] Implement invalid-index-returned
\r\n(PLE0305
) (#10962)97acf1d
\r\nENH: Bump ruff
dependency versions to support the latest\r\nrelease of `v0.4.0...adf63d9
\r\n[pylint
] Implement invalid-hash-returned
\r\n(PLE0309
) (#10961)5d3c9f2
\r\nruff server
: fix Neovim setup guide command (#11021)Sourced from ruff's\r\nreleases.
\r\n\r\n\r\nv0.3.7
\r\nChanges
\r\nPreview features
\r\n\r\n
\r\n- [
\r\nflake8-bugbear
] Implement\r\nloop-iterator-mutation
(B909
) (#9578)- [
\r\npylint
] Implement rule to prefer augmented assignment\r\n(PLR6104
) (#9932)Bug fixes
\r\n\r\n
\r\n- Avoid TOCTOU errors in cache initialization (#10884)
\r\n- [
\r\npylint
] Recodenan-comparison
rule to\r\nW0177
(#10894)- [
\r\npylint
] Reverse min-max logic in\r\nif-stmt-min-max
(#10890)Contributors
\r\n\r\n
\r\n- \r\n
@carljm
- \r\n
@charliermarsh
- \r\n
@lshi18
- \r\n
@mimre25
v0.3.6
\r\nChanges
\r\nPreview features
\r\n\r\n
\r\n- [
\r\npylint
] Implement\r\nbad-staticmethod-argument
(PLW0211
) (#10781)- [
\r\npylint
] Implementif-stmt-min-max
\r\n(PLR1730
,PLR1731
) (#10002)- [
\r\npyupgrade
] Replacestr,Enum
multiple\r\ninheritance withStrEnum
UP042
(#10713)- [
\r\nrefurb
] Implement\r\nif-expr-instead-of-or-operator
(FURB110
) (#10687)- [
\r\nrefurb
] Implementint-on-sliced-str
\r\n(FURB166
) (#10650)- [
\r\nrefurb
] Implementwrite-whole-file
\r\n(FURB103
) (#10802)- [
\r\nrefurb
] Supportitemgetter
in\r\nreimplemented-operator
(FURB118
) (#10526)- [
\r\nflake8_comprehensions
] Add\r\nsum
/min
/max
to unnecessary\r\ncomprehension check (C419
) (#10759)Rule changes
\r\n\r\n
\r\n- [
\r\npydocstyle
] Require capitalizing docstrings where the\r\nfirst sentence is a single word (D403
) (#10776)- [
\r\npycodestyle
] Ignore annotated lambdas in class scopes\r\n(E731
) (#10720)- [
\r\nflake8-pyi
] Various improvements to PYI034 (#10807)- [
\r\nflake8-slots
] Flag subclasses of call-based\r\ntyping.NamedTuple
s as well as subclasses of\r\ncollections.namedtuple()
(SLOT002
) (#10808)- [
\r\npyflakes
] Allow forward references in class bases in\r\nstub files (F821
) (#10779)- [
\r\npygrep-hooks
] Improveblanket-noqa
error\r\nmessage (PGH004
) (#10851)CLI
\r\n\r\n
\r\n- Support
\r\nFORCE_COLOR
env var (#10839)Configuration
\r\n\r\n
\r\n\r\n- Support negated patterns in
\r\n[extend-]per-file-ignores
\r\n(#10852)
... (truncated)
\r\nSourced from ruff's\r\nchangelog.
\r\n\r\n\r\n0.3.7
\r\nPreview features
\r\n\r\n
\r\n- [
\r\nflake8-bugbear
] Implement\r\nloop-iterator-mutation
(B909
) (#9578)- [
\r\npylint
] Implement rule to prefer augmented assignment\r\n(PLR6104
) (#9932)Bug fixes
\r\n\r\n
\r\n- Avoid TOCTOU errors in cache initialization (#10884)
\r\n- [
\r\npylint
] Recodenan-comparison
rule to\r\nW0177
(#10894)- [
\r\npylint
] Reverse min-max logic in\r\nif-stmt-min-max
(#10890)0.3.6
\r\nPreview features
\r\n\r\n
\r\n- [
\r\npylint
] Implement\r\nbad-staticmethod-argument
(PLW0211
) (#10781)- [
\r\npylint
] Implementif-stmt-min-max
\r\n(PLR1730
,PLR1731
) (#10002)- [
\r\npyupgrade
] Replacestr,Enum
multiple\r\ninheritance withStrEnum
UP042
(#10713)- [
\r\nrefurb
] Implement\r\nif-expr-instead-of-or-operator
(FURB110
) (#10687)- [
\r\nrefurb
] Implementint-on-sliced-str
\r\n(FURB166
) (#10650)- [
\r\nrefurb
] Implementwrite-whole-file
\r\n(FURB103
) (#10802)- [
\r\nrefurb
] Supportitemgetter
in\r\nreimplemented-operator
(FURB118
) (#10526)- [
\r\nflake8_comprehensions
] Add\r\nsum
/min
/max
to unnecessary\r\ncomprehension check (C419
) (#10759)Rule changes
\r\n\r\n
\r\n- [
\r\npydocstyle
] Require capitalizing docstrings where the\r\nfirst sentence is a single word (D403
) (#10776)- [
\r\npycodestyle
] Ignore annotated lambdas in class scopes\r\n(E731
) (#10720)- [
\r\nflake8-pyi
] Various improvements to PYI034 (#10807)- [
\r\nflake8-slots
] Flag subclasses of call-based\r\ntyping.NamedTuple
s as well as subclasses of\r\ncollections.namedtuple()
(SLOT002
) (#10808)- [
\r\npyflakes
] Allow forward references in class bases in\r\nstub files (F821
) (#10779)- [
\r\npygrep-hooks
] Improveblanket-noqa
error\r\nmessage (PGH004
) (#10851)CLI
\r\n\r\n
\r\n- Support
\r\nFORCE_COLOR
env var (#10839)Configuration
\r\n\r\n
\r\n- Support negated patterns in
\r\n[extend-]per-file-ignores
\r\n(#10852)Bug fixes
\r\n\r\n
\r\n\r\n- [
\r\nflake8-import-conventions
] Accept non-aliased (but\r\ncorrect) import inunconventional-import-alias
\r\n(ICN001
) (#10729)- [
\r\nflake8-quotes
] Add semantic model flag when inside\r\nf-string replacement field (#10766)- [
\r\npep8-naming
] Recursively resolve\r\nTypeDicts
for N815 violations (#10719)- [
\r\nflake8-quotes
] RespectQ00*
ignores in\r\nflake8-quotes
rules (#10728)- [
\r\nflake8-simplify
] Show negated condition in\r\nneedless-bool
diagnostics (SIM103
) (#10854)
... (truncated)
\r\n2e37cf6
\r\nBump version to v0.3.7 (#10895)a9e4393
\r\n[pylint
] Implement rule to prefer augmented assignment\r\n(PLR6104
) (#9932)312f434
\r\n[pylint
] Recode nan-comparison
rule to\r\nW0177
(#10894)563daa8
\r\nFix docs and add overlap test for negated per-file-ignores (#10863)7ae15c6
\r\nFix comment copy/paste typo in newtype_index (#10892)03899dc
\r\n[flake8-bugbear
] Implement\r\nloop-iterator-mutation
(B909
) (#9578)25f5a8b
\r\nStruct not tuple for compiled per-file ignores (#10864)e7d1d43
\r\n[pylint
] Reverse min-max logic in\r\nif-stmt-min-max
(#10890)9b9098c
\r\nDowngrade ESLint to v8 (#10888)0cc154c
\r\nAvoid TOCTOU errors in cache initialization (#10884)