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。