内容提要
Ruff v0.2.0 发布,这是一个用 Rust 编写的极快 Python linter 和格式化工具。该版本新增 100 多条规则,破坏性变更较少,主要包括弃用规则、规则重映射和移除 nursery 选择器。配置移至 tool.ruff.lint,输出格式新增 concise 和 full。多项规则和行为已稳定化,感谢 362 位贡献者。
延伸解读
迁移注意事项:破坏性变更与警告
Ruff v0.2.0 的破坏性变更较少,但用户升级后可能会遇到警告,提示迁移已弃用的功能。主要破坏性变更涉及 nursery 规则选择(自 v0.1.0 起已弃用)和规则重映射(可能导致之前启用的规则被禁用)。如果使用预览模式,还会遇到更多破坏性变更,因为一些在稳定版中仅警告的行为在预览版中会直接报错。建议仔细阅读弃用规则和输出格式部分,并参考 Dagster、FastAPI 等项目的迁移 PR。
配置结构调整:linter 设置移至 tool.ruff.lint
由于 Ruff 现在包含格式化工具,原本位于顶层 tool.ruff 下的 linter 专用设置已移至 tool.ruff.lint 部分。例如,ruff.allowed-confusables 现在应配置为 ruff.lint.allowed-confusables。升级时,Ruff 会显示详细警告,列出需要移动的设置及其新位置。但部分全局设置仍保留在顶层,如 ruff.builtins、ruff.cache-dir、ruff.exclude 等,不应移动。完整重命名列表可在 v0.2.0 变更日志中查看。
输出格式变化:新增 concise 和 full 选项
Ruff 正在将显示源代码片段作为默认行为,为此新增了两个输出格式选项:concise(替代 text)和 full(替代 --show-source)。--output-format=text、--show-source 和 --no-show-source 标志已弃用,但仍可使用,只是会显示警告。在稳定版中,默认输出保持不变;而在预览版中,默认输出格式已切换为 full,要恢复之前的输出,可以设置输出格式为 concise。这一变化旨在提供更多违规上下文,并为未来显示建议修复做准备。
规则稳定化:大量新规则和修复转正
v0.2.0 将许多之前仅限预览的规则和修复稳定化,所有用户现在可以直接使用。稳定化的规则包括 trio 相关规则(如 TRIO100、TRIO105)、安全规则(如 S201、S202、S502-S507、S611、S702)、以及 SIM、UP、RUF 等系列的多条规则。稳定化的修复包括 D300、UP007、SIM910、SIM118、PLR5501 等。此外,部分修复从 unsafe 提升为 safe,例如 PYI025。这些稳定化意味着用户无需启用预览模式即可受益于这些改进。
Q&A
Ruff v0.2.0 有哪些主要的新特性?
Ruff v0.2.0 新增了 100 多条规则,这些规则之前仅在预览模式下可用,现在已稳定。此外,配置结构有所调整,输出格式新增了 concise 和 full 选项,并弃用了一些规则和选择器。
如何从旧版本迁移到 Ruff v0.2.0?
迁移到 v0.2.0 时,破坏性变更较少,主要涉及弃用规则、规则重映射和移除 nursery 选择器。配置项从 tool.ruff 移至 tool.ruff.lint,输出格式标志如 --show-source 被弃用。建议阅读弃用规则和输出格式部分,并参考示例迁移 PR。
Ruff v0.2.0 中哪些规则被弃用或重映射了?
弃用的规则包括 missing-type-self (ANN101) 和 missing-type-cls (ANN102)。重映射的规则有:raise-without-from-inside-except 从 TRY200 改为 B904,suspicious-eval-usage 从 PGH001 改为 S307,logging-warn 从 PGH002 改为 G010,static-key-dict-comprehension 从 RUF011 改为 B035,runtime-string-union 从 TCH006 改为 TCH010。
Ruff v0.2.0 的配置有哪些变化?
配置项从顶层的 tool.ruff 移到了 tool.ruff.lint 部分,例如 ruff.allowed-confusables 变为 ruff.lint.allowed-confusables。一些全局设置如 ruff.builtins、ruff.cache-dir 等仍保留在顶层。升级时会显示警告提示迁移。
Ruff v0.2.0 的输出格式有什么新变化?
新增了 concise 和 full 两种输出格式。concise 替代了原来的 text 格式,full 替代了 --show-source 标志。在预览模式下,默认输出格式改为 full,而在稳定版中默认输出保持不变。旧的 --output-format=text、--show-source 和 --no-show-source 标志被弃用。
Ruff v0.2.0 稳定了哪些规则和行为?
稳定了多项规则,如 trio-timeout-without-await (TRIO100)、unnecessary-escaped-quote (Q004) 等,以及一些行为改进,如 E402 现在会忽略 sys.path 修改,PIE807 现在也检查 dict 内置函数,PIE790 检查省略号,SIM401 检查 if-else 表达式。此外,许多修复也从预览转为稳定。