Ruff v0.0.276 发布

Ruff v0.0.276 发布

💡 原文英文,约1700词,阅读约需7分钟。
📝

内容提要

Ruff v0.0.276 发布,新增实验性 Jupyter Notebook 支持,可检查、监视和修复 Notebook 文件;引入基于 Pyright 的导入解析器,支持命名空间包和类型存根;新增 PERF101、PERF203、PERF401、PERF402、NPY003、PLC0205 及 PYI002-005 等规则,并修复多项 bug。

🔎

延伸解读

Jupyter Notebook 支持仍属实验性

Ruff 新增了对 Jupyter Notebook 的实验性支持,可以检查、监视和修复 Notebook 文件。但该功能目前需要手动启用,且存在已知限制,例如不支持混合 Jupyter Magics 和 Python 代码的单元格。因此,在生产环境中使用前建议充分测试,并关注后续版本对限制的改进。

导入解析器为未来功能奠基

新引入的基于 Pyright 的导入解析器支持命名空间包和类型存根,这不仅是技术改进,也为未来移除用户配置(如 namespace-packages)、跨文件解析引用、检测未使用依赖等功能铺平了道路。这意味着 Ruff 正朝着更智能、更少配置的方向发展。

新增性能规则多为微优化

本次新增的 PERF101、PERF203、PERF401、PERF402 等规则旨在提升代码性能,但官方明确指出它们属于微优化,在大多数情况下对性能影响可忽略。开发者应将其视为代码风格和可读性的改进,而非显著的性能提升手段。

类型存根规则助力类型检查准确性

新增的 PYI002-005 规则针对类型存根文件中的条件语句,避免复杂条件、错误版本比较等常见问题。这些规则有助于减少类型检查器的误报和漏报,提升存根文件的可靠性,对使用类型检查的团队尤其有价值。

❓

Q&A

Ruff v0.0.276 新增了哪些主要功能?

新增实验性 Jupyter Notebook 支持、基于 Pyright 的导入解析器,以及多个新规则(PERF101、PERF203、PERF401、PERF402、NPY003、PLC0205、PYI002-005),并修复了多项 bug。

如何在 Ruff 中启用对 Jupyter Notebook 的检查?

在 pyproject.toml 的 [tool.ruff] 部分,将 *.ipynb 添加到 include 设置中,例如:include = ["*.py", "*.pyi", "**/pyproject.toml", "*.ipynb"]。也可以直接对 Notebook 文件运行 ruff check。

Ruff 的导入解析器有什么特点?

基于 Pyright 的导入解析器,支持解析命名空间包、类型存根等。未来将允许移除一些用户设置(如 namespace-packages),并支持跨文件引用解析、检测未使用的依赖等。

PERF401 规则的作用是什么?

PERF401 检查可以用列表推导式替换的 for 循环。当从现有列表创建转换后的列表时,推荐使用列表推导式,因为它更可读且性能更好(在 Python 3.11 上快约 10%,在 3.10 上快约 25%)。

为什么应该避免在 __slots__ 中直接使用字符串?

如果给 __slots__ 赋一个字符串,它会被解释为单个属性名,而不是属性名的可迭代对象。这可能导致混淆,因为迭代 __slots__ 时会遍历字符串的字符。应该将字符串包装在元组等可迭代容器中。

在存根文件中进行版本比较时需要注意什么?

应避免复杂条件、与字符串比较、比较补丁版本(如 3.8.3)以及使用错误长度的元组。类型检查器只支持简单条件、主次版本比较和正确长度的元组。

🏷️

标签

➡️

继续阅读