Ruff v0.9.0

Ruff v0.9.0

💡 原文英文,约1500词,阅读约需6分钟。
📝

内容提要

Ruff v0.9.0 发布,新增 2025 格式化风格指南,包括 f-string 插值表达式格式化、引号规范化、避免单行隐式字符串拼接、优先换行断言消息、减少返回类型注解括号、自动为 match case 的 if 守卫加括号。同时稳定 7 条 lint 规则及 2 条自动修复,并改进多项预览行为。

🔎

延伸解读

2025 风格指南的格式化变化

Ruff v0.9.0 引入了新的 2025 风格指南,对格式化行为进行了多项调整。例如,f-string 中的插值表达式现在会被格式化,引号会根据项目配置进行规范化,不必要的转义会被移除。此外,Ruff 会避免单行隐式字符串拼接,并在可能时合并它们。这些变化旨在提高代码一致性和可读性,但可能影响现有代码的格式,建议在升级后检查格式化差异。

断言与返回类型注解的格式化调整

新风格指南改变了长断言语句的格式化方式:优先将断言消息用括号包裹,而不是拆分断言表达式,以保持表达式在单行。对于返回类型注解,Ruff 现在避免添加不必要的括号,使其更接近 Black 的风格。这些调整减少了视觉噪音,但可能改变代码布局,开发者需注意与现有风格的兼容性。

规则稳定与行为改进

此版本稳定了 7 条 lint 规则(如 A005、A006、FURB188 等)和 2 条自动修复(PYI041、PYI016),并将多项预览行为转为默认,包括对 pytest.parametrize 的检查、忽略 import 之间的 pytest.importorskip 调用、检查 attrs 类的可变默认值等。这些改进提升了 lint 覆盖范围和准确性,但可能对现有代码产生新的警告,建议在 CI 中逐步适配。

❓

Q&A

Ruff v0.9.0 中新的格式化风格指南叫什么?

Ruff 2025 风格指南。

Ruff v0.9.0 对 f-string 的格式化做了哪些改进?

Ruff 现在会格式化 f-string 花括号内的插值表达式,规范化引号,移除不必要的转义,并可能根据插值表达式中的换行将 f-string 拆分为多行。

Ruff v0.9.0 如何处理单行隐式字符串拼接?

Ruff 现在会尽可能将单行隐式拼接的字符串合并为单个字符串,但三引号字符串、原始字符串以及某些包含引号或格式说明符的 f-string 组合除外。

Ruff v0.9.0 在格式化 assert 语句时有什么新偏好?

当 assert 语句过长时,Ruff 现在优先将断言消息用括号括起来,而不是拆分断言表达式。

Ruff v0.9.0 稳定了哪些 lint 规则?

稳定的规则包括:stdlib-module-shadowing (A005)、builtin-lambda-argument-shadowing (A006)、slice-to-remove-prefix-or-suffix (FURB188)、boolean-chained-comparison (PLR1716)、decimal-from-float-literal (RUF032)、post-init-default (RUF033)、useless-if-else (RUF034)。

Ruff v0.9.0 中哪些规则获得了自动修复的稳定化?

redundant-numeric-union (PYI041) 和 duplicate-union-members (PYI016) 的自动修复行为已稳定。

🏷️

标签

➡️

继续阅读