Ruff 的版本号规则怎么理解:minor 版本引入哪些不兼容变更
Ruff 的版本号规则怎么理解minor 版本引入哪些不兼容变更【免费下载链接】ruffAn extremely fast Python linter and code formatter, written in Rust.项目地址: https://gitcode.com/GitHub_Trending/ru/ruff如果你把项目的 Ruff 从0.15.x升到0.16.0发现 lint 结果和之前不一样先别急着回滚Ruff 不是按语义化版本semver发布的。它的minor 版本号专门用来承载不兼容变更patch 版本只修 bug。理解这条规则后升级前的判断路径就清楚了minor 版本要逐条核对变更说明patch 版本一般可以放心跟随。Ruff 目前还没有稳定 API官方文档明确说明等 API 稳定后会改用 major 版本号加语义化版本。在这之前以下规则就是判断这个版本升级会不会影响我的依据见 docs/versioning.md。Ruff 的版本号怎么分Ruff 使用自定义的版本号方案minor 版本0.x.0的x用于不兼容变更如移除已弃用的选项、配置语义变化、规则行为变化、稳定格式风格变化等。patch 版本0.x.y的y用于 bug 修复包括那些会改变行为的 bug 修复。major 版本目前不使用。API 稳定后才启用 semver。另外Ruff 以0.0.x版本发布的其余 crate 没有任何稳定性保证它们的 Rust 接口被视为内部实现每次发布都会递增 patch 版本。而ruff、ruff_linter、ruff_wasm三个 crate 跟随 Ruff 的正常版本策略但它们的 Rust 接口同样不遵循语义化版本。也就是说如果你把 Ruff 当 Rust 依赖用不能按 semver 的预期来依赖这些接口。minor 版本会引入哪些不兼容变更docs/versioning.md 给出的 minor 版本变更清单如下这也是你升级 minor 版本前应该逐条对照的内容已弃用的选项或功能被移除配置以向后不兼容的方式变化文档说明在1.0.0之前这类变更可能出现在 minor 版本中但通常会尽量避免;新文件类型的支持从 preview 转为稳定放弃对某个已 EOL 的 Python 版本的支持Linter 侧规则从 preview 提升为稳定稳定规则的行为发生变化包括稳定规则的适用范围显著扩大、规则意图变化但不包括遵循原意图的 bug 修复稳定规则被加入或移出默认规则集某条规则的 safe fix 被提升为稳定规则被弃用Formatter 侧稳定格式风格stable style发生变化Language server 侧已有能力被移除、已弃用的 server 设置被移除。对照来看以下情况只会出现在patch 版本中不会造成上面的破坏bug 修复包括修复 bug 带来的行为变化、向后兼容的新配置项、新增 Python 版本支持、新文件类型进入 preview、选项或功能被弃用注意弃用本身是 patch移除是 minor、preview 规则的增删改、preview 样式变化以及 language server 新增能力或设置。一个容易踩坑的细节修复的适用级别fix applicability只有三级——Display仅展示不应用、Unsafe需显式 opt-in 才应用、Safe自动应用。降低某个修复的适用级别不算破坏性变更所以你在 minor 或 patch 版本里都可能遇到某条修复不再自动应用的情况这在版本规则上是被允许的。preview 规则与稳定化节奏为什么变化集中在 minor 版本docs/versioning.md 的 Rule stabilization 一节解释了变更节奏新规则一律先进 preview 模式新规则至少在 preview 中停留一个 minor 发布后才可能被提升为稳定文档举例如果某规则在 patch 版本0.6.1中加入则到0.8.0之前不具备稳定资格注意这里跨过了0.7.0稳定规则的行为不会在 patch 版本中发生重大变化规则提升为稳定可能会被刻意攒到同一个 minor 版本里批量发布也不是所有 preview 规则都会在同一个 minor 版本中被提升。因此规则被提升为稳定这一类破坏性变更只会落在 minor 版本上且往往一次集中出现。preview 模式本身的边界也要清楚见 docs/preview.mdRuff 保留对任何 preview 门禁行为做修改的权利包括直接移除 preview 功能或规则。preview 模式可以通过--preview标志或配置文件中preview true开启且 lint 和 format 可以分别配置例如[tool.ruff.lint] preview true开启 preview 后若希望逐条显式选择 preview 规则而不是按前缀整类启用可以加上explicit-preview-rules true。另外在 preview 模式下被弃用的规则会被禁用若你在配置中显式选择了某个已弃用规则会直接报错——这是升级后配置可能失效的一个具体信号。真实例子最近几个 minor 版本改了什么仓库根目录的 BREAKING_CHANGES.md 按版本记录了每次 minor 版本的不兼容变更。挑选几个有代表性的条目帮助你对号入座0.16.0默认规则集大幅扩大默认启用的规则从 59 条增加到 413 条同时移除了其中 18 条争议较大的E/F规则E401、E402、E701、E702、E703、E711、E712、E713、E714、E721、E731、E741、E742、E743、F403、F405、F406、F722Markdown 文件中的 Python 代码块默认参与格式化check和format --check的输出中开始展示修复 diffformat --check支持与 linter 相同的输出格式如github、gitlabJSON 输出中的filename、location等字段可能为null而不是空字符串——如果你的 CI 在解析 JSON 输出这是要重点核对的一条。0.15.0formatter 改为按 2026 style guide 输出linter 支持块级抑制注释# ruff: disable[N803]/# ruff: enable[N803]ppc6464 位大端 PowerPC二进制不再随发布包提供。0.14.0未显式配置 Python 版本时默认目标版本从 3.9 变为 3.10未配置 Python 版本时做语法错误检查默认使用最新受支持版本3.14而应用 lint 规则时仍按最低受支持版本处理。0.13.0first-party import 判定改为校验完整模块路径在磁盘上存在已弃用规则必须用精确规则代码选择不再能通过分组名或前缀激活macOS 上~/Library/Application Support/ruff/ruff.toml的用户级配置回退路径被移除该回退自 v0.5 起弃用XDG 路径~/.config/ruff/ruff.toml继续有效规则PD901和UP038被移除。更早的版本还有类似模式0.9.0 采用 2025 style guide文档示例0.8.0 默认 Python 从 3.8 改为 3.9、standalone 安装脚本改为安装到 XDG 目录$XDG_BIN_HOME、$XDG_DATA_HOME/../bin或~/.local/bin按此顺序0.7.0 移除了lint.allow-unused-imports设置改用lint.pyflakes.allow-unused-imports。这些条目覆盖了默认值变化、配置项移除、规则移除、安装行为变化四类最常见的破坏点升级时按同类思路排查即可。升级时如何核对版本与验证结果以下是文档中实际出现的检查方式可以组成一条连续的验证路径确认当前版本。ruff --version等价于-VCLI 帮助中列为Print version打印当前版本。docs/integrations.md 的 GitLab CI 配置就是把ruff --version放在before_script中作为流水线的第一步ruff --version对照变更清单。打开 BREAKING_CHANGES.md定位你即将升到的那个 minor 版本如## 0.16.0的条目逐条判断是否命中你的项目是否用了默认规则集、是否依赖 JSON 输出的固定字段、是否配置了目标 Python 版本、是否解析format --check的退出码等。跑一遍检查与格式核对。format --check只报告不修改文件适合在升级前建立基线ruff format --check .0.16.0 起该命令会直接展示修复 diff文档示例实际内容以你的项目为准❯ ruff format --check . unformatted: File would be reformatted -- try.md:1:1 | 1 | python - import math 2 import math 3 | | 1 file would be reformatted需要只格式化而不改代码时ruff format --diffdocs/integrations.md 中的 CI 示例用法同样适合做只读对比。验证配置没有被破坏。若你的pyproject.toml或ruff.toml中引用了被移除的选项如 0.1.0 移除的format输出格式设置、0.7.0 移除的lint.allow-unused-imports或在 preview 下显式选择了已弃用规则运行ruff check时会直接报错而不是静默忽略。报错信息指出的配置项就是需要清理的位置。两个版本相关的边界从源码编译时的 MSRV编译 Ruff 所需的最低 Rust 版本写在 Cargo.toml 的[workspace.package]段的rust-version键中当前为1.96。该值可能在任意发布minor 或 patch中变化但文档承诺它永远不会比最新稳定版 Rust 新超过 N-2 个版本例如最新稳定版是 1.85 时最低支持版本至多 1.83。这仅影响从源码构建的用户通过 Python 包索引安装通常拿到的是预编译二进制不需要 Rust 工具链。VS Code 扩展的版本号由于 VS Code 不支持扩展的 pre-release 标签Ruff 扩展用 minor 位的奇偶区分发布通道偶数为稳定版2024.30.0、2024.32.0、2024.34.0奇数为 preview 版2024.31.0、2024.33.0、2024.35.0。如果你通过扩展间接使用 Ruff扩展版本的奇偶决定了你拿到的是稳定还是 preview 行为。综合来看处理 Ruff 版本兼容性的操作路径是固定的用ruff --version确认当前版本到 BREAKING_CHANGES.md 查目标 minor 版本的条目评估每条变更是否命中你的配置、默认规则集用法或输出解析逻辑再用ruff format --check ./ruff check做只读验证。patch 版本升级不需要这套流程但要注意修复 bug 带来的行为变化也属于 patch 版本范畴这一条当某次 patch 升级后结果变化时先查 CHANGELOG.md 对应版本条目。【免费下载链接】ruffAn extremely fast Python linter and code formatter, written in Rust.项目地址: https://gitcode.com/GitHub_Trending/ru/ruff创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考