Ruff v0.6.0 现已发布!请从 PyPI 或您选择的包管理器安装。
pip install --upgrade ruff
提醒:Ruff 是一个用 Rust 编写的极速 Python 代码检查工具和格式化工具。Ruff 可以替代 Black、Flake8(以及数十个插件)、isort、pydocstyle、pyupgrade 等,其执行速度比任何单个工具快数十甚至数百倍。
迁移到 v0.6 #
和 Ruff 0.5 一样,本次发布包含的破坏性变更很少:我们的大多数用户应该能够升级到最新的 Ruff 版本,而无需对其代码或配置进行任何重大修改。但话虽如此,升级时仍需记住以下几点
-
经过决定,一些规则因其建议不准确或无益而被弃用
-
默认情况下,我们的
isort
规则现在会在src/
目录中搜索,以确定可能代表第一方代码的包名称列表。这总是可配置的,但许多用户惊讶于 Ruff 没有“开箱即用”地理解这种常见的项目结构。此更改可能导致您的某些导入被重新排序或重新分类,因为这些规则先前认为是第三方导入的导入语句现在将被正确理解为第一方导入。
-
unnecessary-dict-comprehension-for-iterable
规则已从RUF025
重新编码为C420
,确保 Ruff 的代码与flake8-comprehensions
插件中的相同规则保持一致。
Jupyter Notebooks 现在默认进行代码检查和格式化 #
Ruff 长期以来一直支持 Jupyter Notebooks 的代码检查和格式化。然而,在之前的 Ruff 版本中,Ruff 只有在您将 extend-include = ["*.ipynb"]
添加到 Ruff 配置文件后才会对 Notebooks 进行代码检查和格式化。(Ruff 也会检查您在命令行中明确传递给 Ruff 的任何文件,包括 .ipynb
文件。)
在 Ruff 0.6 中,此行为已更改。当传入一个要检查或格式化的文件目录时,Ruff 现在将以与处理 .py
或 .pyi
文件完全相同的方式在该目录中搜索 .ipynb
文件 — 无需额外配置。我们在 Ruff 0.5.6 中将其作为预览模式功能添加;此版本将其提升为稳定功能。
如果您希望 Ruff 不处理您的 Notebooks,您仍然可以通过在 Ruff 配置中设置自定义的 extend-exclude
来恢复旧行为。例如,在 pyproject.toml
文件中
[tool.ruff]
extend-exclude = ["*.ipynb"]
为了更精细地控制 Ruff 如何处理 Notebook 文件,以下是您如何告诉 Ruff 您希望对 Notebooks 进行格式化但不进行代码检查的方法
[tool.ruff.lint]
exclude = ["*.ipynb"]
以下是您如何告诉 Ruff 您希望对 Notebooks 进行代码检查但不进行格式化的方法
[tool.ruff.format]
exclude = ["*.ipynb"]
若要在 Notebooks 上禁用特定的代码检查规则,您可以使用 Ruff 的 per-file-ignores
设置
[tool.ruff.lint.per-file-ignores]
"*.ipynb" = ["E501"] # disable line-too-long in notebooks
flake8-pytest-style
规则的默认行为已更改 #
我们更改了 pytest-fixture-incorrect-parentheses-style
和 pytest-incorrect-mark-parentheses-style
(分别为 PT001
和 PT023
)的默认行为。
以前,PT001
默认会将 @pytest.fixture
装饰器更改为 @pytest.fixture()
,而 PT023
会将 @pytest.mark.foo
装饰器更改为 @pytest.mark.foo()
。现在,它们默认都会移除括号,而不是添加括号。这意味着这些规则现在更符合官方 pytest 项目的样式建议。
这些规则都是可配置的。要恢复 Ruff 以前的默认行为,请在 Ruff 配置文件中使用 lint.flake8-pytest-style.mark-parentheses
和 lint.flake8-pytest-style.fixture-parentheses
设置。例如,在 pyproject.toml
文件中
[tool.ruff.lint.flake8-pytest-style]
fixture-parentheses = true
mark-parentheses = true
这些规则都带有安全的自动修复功能,因此您可以通过运行 ruff check . --fix --select=PT001 --select=PT023
轻松修复此更改导致的任何新的违规行为。
规则稳定化 #
本次发布稳定了九条最初源自 pylint 代码检查工具的规则,所有这些规则以前仅在 --preview
模式下可用
singledispatch-method
(PLE1519
)singledispatchmethod-function
(PLE1520
)bad-staticmethod-argument
(PLW0211
)if-stmt-min-max
(PLR1730
)invalid-bytes-return-type
(PLE0308
)invalid-hash-return-type
(PLE0309
)invalid-index-return-type
(PLE0305
)invalid-length-return-type
(E303
)self-or-cls-assignment
(PLW0642
)
还有两条 PYI
规则(最初源自 flake8-pyi 代码检查工具)和一条 RUF
规则也已稳定。
byte-string-usage
(PYI057
)duplicate-literal-member
(PYI062
)redirected-noqa
(RUF101
)
其他行为稳定化 #
本次发布还稳定了与我们的 ASYNC
规则相关的几个预览模式功能。ASYNC100
、ASYNC109
、ASYNC110
、ASYNC115
和 ASYNC116
的检测范围都已扩大,以便它们除了检测 trio
代码中的反模式外,还能检测 asyncio
和 anyio
代码中的反模式。
cancel-scope-no-checkpoint
(ASYNC100
): 支持asyncio
和anyio
上下文管理器。async-function-with-timeout
(ASYNC109
): 支持asyncio
和anyio
上下文管理器。async-busy-wait
(ASYNC110
): 支持asyncio
和anyio
上下文管理器。async-zero-sleep
(ASYNC115
): 支持anyio
上下文管理器。long-sleep-not-forever
(ASYNC116
): : 支持anyio
上下文管理器。
最后,在我们的 flake8-return
类别中,以下规则的自动修复功能已升级为稳定版
superfluous-else-return
(RET505
)superfluous-else-raise
(RET506
)superfluous-else-continue
(RET507
)superfluous-else-break
(RET508
)
在 GitHub 上查看完整的更新日志。
了解更多关于 Astral — Ruff 背后的公司。