Ruff v0.16.0 重大更新:默认规则从 59 条增加至 413 条

Ruff v0.16.0 重大更新:默认规则从 59 条增加至 413 条

Hacker News 摘要

原标题:Ruff v0.16.0 – Significant new updates – 413 default rules up from 59

Ruff v0.16.0 版本现已发布。用户可以通过 PyPI 或使用 uv 工具进行安装。Ruff 是一个由 Rust 编写的高性能 Python 代码检查工具和格式化工具,旨在替代 Black、Flake8、isort、pydocstyle 和 pyupgrade 等多种工具,其执行速度比传统工具快数十倍甚至数百倍。

迁移至 v0.16 版本

Ruff v0.16 包含少量破坏性变更。大多数用户无需对代码或配置进行大规模调整即可完成更新。

改进的默认规则集

从 v0.16 版本开始,Ruff 默认启用的规则数量从 59 条大幅增加到 413 条。

1. 规则增长:自 v0.1.0 版本以来,Ruff 的总规则数已从 708 条增加到 968 条。

2. 严重问题捕获:许多新增的默认规则可以捕获严重的语法错误和即时运行时错误。

3. 发现新规则:即便用户已经手动选择了特定规则,新的默认设置也能帮助用户发现此前未被注意到的有用规则。

4. 包含规则类别:新增的默认规则涵盖了流行的 flake8-bugbear (B)、pyupgrade (UP) 以及 Ruff 自有的 RUF 类别。

5. 回退旧设置:如果用户希望恢复旧的默认设置,可以在配置文件中手动选择 E4、E7、E9 和 F 规则。

Markdown 代码块格式化

Ruff 现在可以格式化嵌入在 Markdown 文件中的 Python 代码块。

1. 支持的标签:Ruff 会识别带有 python、py、python3、py3、pyi 或 pycon 标识的代码块并进行格式化。

2. 不同格式处理:pyi 代码块将按存根文件格式处理,pycon 代码块将按交互式会话格式处理,其他则按常规 Python 文件处理。

3. Quarto 支持:该功能也适用于 Quarto 笔记本,因为 Ruff 能够识别被花括号包围的语言标识。

4. 抑制格式化:用户可以使用 fmt: off 和 fmt: on 注释来控制代码块内的格式化,或者使用 HTML 注释来禁用文档特定区域的格式化。

新的注释抑制功能

Ruff 引入了全新的 ruff: 抑制注释格式,支持独立占行。

1. ruff: ignore:可以用于抑制同一行或后续逻辑行的警告。例如在函数定义前使用该注释,可以抑制整个函数头部的相关警告。

2. ruff: file-ignore:用于忽略整个文件的特定警告,类似于之前的 ruff: noqa 注释。

3. 自动添加:用户可以使用 --add-ignore 命令行参数自动添加这些注释。

4. 预览功能:在预览模式下,这些抑制注释支持使用规则名称代替规则代码,例如使用 unused-import 代替 F401。

5. 原因说明:每种注释都可以添加文字说明,解释添加该抑制规则的原因。

检查结果中显示修复对比

Ruff 现在在输出诊断信息时,会直接显示代码检查和格式化的差异对比(diff)。

1. 默认显示:以往需要使用 --diff 参数才能看到的修改建议,现在会作为默认输出的一部分显示在帮助信息下方。

2. 格式化检查:format --check 命令现在也支持显示差异对比。

3. 多种输出格式:格式化检查现在支持所有代码检查工具支持的输出格式,包括适用于 GitHub 和 GitLab 持续集成的 JSON 格式。

4. JSON 输出变更:JSON 输出中的部分字段(如文件名和位置信息)现在在特定情况下可能返回 null,而不是空字符串或默认行列号,以更准确地反映内部诊断状态。

规则稳定化

多项此前处于预览模式的规则现已转为稳定版:

• airflow3-incompatible-function-signature (AIR303)

• missing-copyright-notice (CPY001)

• unnecessary-from-float (FURB164)

• sorted-min-max (FURB192)

• implicit-string-concatenation-in-collection-literal (ISC004)

• log-exception-outside-except-handler (LOG004)

• invalid-bool-return-type (PLE0304)

• too-many-positional-arguments (PLR0917)

• stop-iteration-return (PLR1708)

• none-not-at-end-of-union (RUF036)

• access-annotations-from-class-dict (RUF063)

• duplicate-entry-in-dunder-all (RUF068)

其他行为稳定化

1. 异常处理:当使用除 critical、error 和 exception 以外的日志方法记录异常时,不再触发 blind-except (BLE001) 警告。

2. 类型注解:future-required-type-annotation (FA102) 现在会检查更多兼容 PEP 585 的 API。

3. 国际化支持:INT 类别规则现在支持更多 gettext 模块的常见用法。

4. 安全性增强:改进了 URL 打开和 SNMP 相关安全规则的检测逻辑,减少误报并支持新版 API。

5. 类型别名:UP019 规则现在可以识别 typing_extensions.Text。


原文:https://astral.sh/blog/ruff-v0.16.0

评论:https://news.ycombinator.com/item?id=49056112

Report Page