ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Ruff 0.3.x 版本演进全景:2024.2 格式化风格、CLI 子命令重构与规则生态扩张

Ruff 0.3.x 版本演进全景:2024.2 格式化风格、CLI 子命令重构与规则生态扩张 Ruff 0.3.x 版本演进全景2024.2 格式化风格、CLI 子命令重构与规则生态扩张【免费下载链接】ruffAn extremely fast Python linter and code formatter, written in Rust.项目地址: https://gitcode.com/GitHub_Trending/ru/ruffRuff 0.3.x 系列0.3.0 至 0.3.7是该工具发展史上的一个关键过渡期它正式推出了 2024.2 版格式化风格并摘掉 Formatter 的 “Beta” 标签同时完成了命令行从裸ruff path到ruff check path子命令体系的迁移。本文基于仓库中的 changelogs/0.3.x.md 完整梳理这 8 个版本的全部变更并结合当前源码验证 CLI 结构、格式化选项与新规则的实际实现帮助你在理解版本差异的同时掌握从 0.2.x 平滑升级到 0.3.x 的实操要点。0.3.0格式化 2024.2 风格与 CLI 体系重构0.3.0 是 0.3.x 系列中的里程碑版本官方发布说明将其概括为三件事引入新的Ruff formatter 2024.2 风格、新增一条检测无效格式化抑制注释的 lint 规则以及配套的 CLI 迁移。新规则检测无效的格式化抑制注释0.3.0 新增的规则用于检测写错位置或写错语法的# fmt: skip一类格式化抑制注释。对应实现位于 crates/ruff_linter/src/rules/ruff/rules/invalid_formatter_suppression_comment.rs并在 crates/ruff_linter/src/rules/ruff/mod.rs 中注册。这条规则的价值在于# fmt: skip是最常用的格式化逃生舱而写失效的抑制注释会让开发者误以为代码受保护实际仍会被重新格式化——该规则把这种“静默失效”变成显式诊断。Formatter2024.2 风格稳定化清单0.3.0 将 Formatter 的预览特性批量转正为2024.2 风格。发布说明中完整列出了被稳定化的行为变更每一条都直接影响格式化输出优先拆分赋值右侧当赋值语句超宽时优先在赋值值右侧处换行而不是先拆目标或类型标注删除类 docstring 前的空行class Foo:与 docstring 之间不再保留空行Python 3.9 的多上下文管理器加括号多个with项在目标版本为 3.9 及以上时被包裹在括号中利用 3.9 引入的括号语法stub 文件中带...空体的嵌套类后加空行压缩 dummy 体的垂直间距函数或类体仅为...时减少留白模块 docstring 后加空行长类型提示加括号赋值语句中过长的类型标注会被加括号后拆分保留单行多字符串调用表达式的缩进归一化十六进制与 Unicode 转义序列如\x41与\u0041统一规范化格式化模块 docstring对模块级 docstring 应用文本规范化。当前源码中格式化选项集中在 crates/ruff_python_formatter/src/options.rs其中定义了indent_style缩进风格、quote_style引号风格、preview开关以及 3.12 嵌套字符串引号策略nested_string_quote_style等选项预览特性的门控逻辑可参考 crates/ruff_python_formatter/src/preview.rs。从源码结构看0.3.x 之后的版本中 2024.2 的这些行为已成为稳定默认而“预览”机制--preview/preview true仍是后续风格变更的孵化器。CLI从裸命令到子命令体系0.3.0 的 CLI 变更影响面最广官方做了四处调整显式禁止--config值中出现extend防止通过 CLI 展开配置时发生歧义从默认排除列表中移除build目录——之前build/默认不参与检查0.3.0 起不再默认排除弃用并迁移裸命令形式ruff path、ruff --explain、ruff --clean、ruff --generate-shell-completion分别被ruff check path、ruff rule、ruff clean、ruff generate-shell-completion取代移除ruff rule与ruff linter上已弃用的--format选项。当前仓库的 crates/ruff/src/args.rs 验证了这一迁移的最终形态顶层命令由Commands枚举承载其中包含Rule说明规则、Clean清理缓存、GenerateShellCompletion生成 shell 补全等子命令而检查与格式化走Check/Format子命令路径。也就是说0.3.0 宣布的弃用在当前代码中已完全落地ruff --explain这类旧形式不再是有效入口。0.3.0 规则变更与修复摘要该版本还包含一批规则行为调整值得迁移时留意ERA001eradicate开始检测被注释掉的case语句以及try:、except:等单行代码E402pycodestyle预览允许 import 之间修改os.environE203pycodestyle预览元组中逗号前的单个空格不再告警S410flake8-bandit预览检测可疑的 lxml 导入PLE1141pylint新规则dict-iter-missing-items提示for k in d应写d.items()RUF015扩展到list(iterable).pop(0)惯用法修复侧B006不再给 stub 文件补默认参数初始值、RUF027修复 f-string 在 gettext 调用中的误报、PowerPC 小页系统上的崩溃修复等。性能方面0.3.0 在格式化器打印队列的冷门分支加了 cold 属性、并跳过了不必要的字符串归一化文档方面则移除了 Formatter 文档的 “Beta” 标签对应 docs/formatter.md。0.3.1配置能力补强与--config全局化0.3.1 的 CLI 变更对日常使用影响最大ruff format --diff输出开始着色--config与--isolated升级为全局标志可在任意子命令前使用修复--config路径中波浪号与环境变量未展开的问题配置层面required-version支持PEP 440 版本说明符不再要求精确版本并实现了 isort 的default-section设置。规则侧新增了多条预览规则pycodestyle 空行规则族E3*的三项行为调整、pylint 的E1519、W0133并修复了ruff自身规则 RUF028 在 match 分支上不识别# fmt: skip的问题。0.3.2 与 0.3.3稳定期修复与 PEP 440 之外的规则扩张0.3.2偏重修复修复 trailing kwargs 后换行注释的格式化不稳定问题、with项格式不稳定问题f-string 转换UP032不再重复调用同一函数修复格式化字符串中切片导致的 E203 误报语义模型开始跟踪条件删除为后续死代码类规则打基础修复Indexer在换行符后无法识别续行的问题。0.3.3变化更密集预览侧实现S610pickle 加载、W391文件末尾空行、E502冗余反斜杠、W0128重新声明已赋值的名称F401默认移除了对__init__.py导入的修复改为可选择的 unsafe 修复——这是一条重要的行为收紧避免误删被外部工具动态引用的导出ruff check成功后开始输出成功提示消息修复了一批 pyflakesF821/F822在.pyi与from __future__ import annotations场景的误报/漏报、C413取反表达式加括号、.pyi中注解不再被视为重定义等问题。0.3.4 与 0.3.5Lexer 规范化与 isort 排序修正0.3.4的关键点预览侧新增SIM103的隐式 else 检测、pylintPLW0117与 NaN 比较、PLE5120等E501允许SPDX 许可证头超出行长限制Lexer 对 Unicode 标识符应用 NFKC 规范化——从源码结构看这使等价 Unicode 形式如兼容字符在词法层面被视为同一标识符减少了F811等规则在特殊标识符上的不一致修复 PEP 723 脚本元数据标签内误判注释的问题以及绑定顺序不确定导致的 flaky 测试问题。0.3.5继续扩张 refurb 与 pylint 覆盖面FURB142、FURB164、FURB157等配置侧则修复了嵌套命名空间包nested namespace packages不被识别的问题——对 monorepo 中无__init__.py的分层包布局是实质性的修正。Bug 修复方面包括autofix 重命名符号时正确更新__all__内的引用、isort 排序尊重 Unicode 字符、RUF100在多字节空格下删除 noqa 时 panic 的修复等。0.3.6 与 0.3.7per-file-ignores否定模式与缓存并发安全0.3.6的两条配置/CLI 能力对工程化使用价值很高[lint]per-file-ignores含extend-per-file-ignores支持否定模式即可以用!前缀的模式精确排除文件CLI 支持FORCE_COLOR环境变量在 CI 与管道场景中可控着色预览侧新增了UP042用StrEnum替换str, Enum多继承、PLR1730/PLR1731用if语句表达 min/max、FURB103等一批规则Bug 修复覆盖Q00*在 f-string 替换字段内的语义模型标记、SIM103诊断显示取反条件等。0.3.7为该系列的收尾版本重点在修复修复缓存初始化中的 TOCTOUtime-of-check to time-of-use竞态对高并发 CI 场景下的缓存读写稳定性有意义pylintnan-comparison规则重编码为上游一致编号W0177反转if-stmt-min-maxPLR1730/PLR1731的最小/最大判断逻辑修复预览期方向写反的问题预览侧新增B909修改循环迭代器与PLR6104偏好增强赋值。升级实操要点结合整份 changelog 与当前源码结构从 0.2.x 升级到 0.3.x 时建议核对以下事项脚本与 CI 中的裸命令必须迁移ruff .、ruff --explain code、ruff --clean、ruff --generate-shell-completion在 0.3.0 后被弃用应改为ruff check、ruff rule、ruff clean、ruff generate-shell-completion当前 crates/ruff/src/args.rs 中Commands枚举即为最终命令面。依赖默认排除的build/目录会重新被检查如有需要在exclude中显式声明。格式化输出会有 2024.2 风格差异首次升级ruff format可能出现批量 diff赋值换行位置、类 docstring 前空行、模块 docstring 后空行等建议先跑ruff format --diff审阅0.3.1 起该输出已着色再落盘。__init__.py中F401自动修复行为收紧默认不再删除需要时可显式选择 unsafe 修复。配置项新增能力required-version可用 PEP 440 说明符、per-file-ignores支持否定模式、--config/--isolated全局化并支持~与环境变量展开。# fmt: skip写错会被新规则捕获升级后若新增此类诊断应优先修正注释位置而非抑制规则。0.3.x 系列完成后Ruff 的三大形态——checklint、format2024.2 风格、rule/clean/generate-shell-completion等辅助子命令——基本定型后续版本的 changelog见 changelogs/ 下各分册均在此基础上演进。【免费下载链接】ruffAn extremely fast Python linter and code formatter, written in Rust.项目地址: https://gitcode.com/GitHub_Trending/ru/ruff创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表