跳到内容

版本控制

Ruff 使用自定义的版本控制方案,其中**次要**版本号用于表示重大更改,**补丁**版本号用于表示错误修复。 Ruff 尚未具有稳定的 API;一旦 Ruff 的 API 稳定,将使用**主要**版本号和语义版本控制。

版本变更

在以下情况下,**次要**版本将会增加

  • 已弃用的选项或功能被移除
  • 配置以向后不兼容的方式更改
    • 可能在次要版本更改中发生,直到 1.0.0,但是,通常应该避免这种情况。
  • 对新文件类型的支持升级为稳定
  • 对生命周期结束的 Python 版本的支持被删除
  • Linter
    • 规则升级为稳定
    • 稳定规则的行为已更改
      • 稳定规则的范围显着扩大
      • 规则的意图发生变化
      • 不包括遵循规则原始意图的错误修复
    • 稳定规则已添加到默认设置
    • 稳定规则从默认设置中删除
    • 规则的安全修复已升级为稳定
  • 格式化程序
    • 稳定的样式已更改
  • 语言服务器
    • 现有功能已删除
    • 已弃用的服务器设置已删除

在以下情况下,**补丁**版本将会增加

  • 错误已修复,包括修复错误的行为更改
  • 以向后兼容的方式添加了新的配置选项(没有格式更改或新的 lint 错误)
  • 添加了对新 Python 版本的支持
  • 在预览中添加了对新文件类型的支持
  • 某个选项或功能已弃用
  • Linter
    • 添加了规则的不安全修复
    • 在预览中添加了规则的安全修复
    • 规则的范围在预览中扩大
    • 修复的适用性已降低
    • 在预览中添加了规则
    • 预览规则的行为已更改
  • 格式化程序
    • 稳定的样式已更改,以防止无效语法、程序语义更改或注释删除
    • 预览样式已更改
  • 语言服务器
    • 添加了对新功能的支持
    • 添加了新的服务器设置
    • 服务器设置已弃用

最低支持的 Rust 版本

编译 Ruff 所需的最低支持的 Rust 版本在 Cargo.toml[workspace.package] 部分的 rust-version 键中列出。它可能会在任何版本(次要版本或补丁版本)中更改。它永远不会比 N-2 Rust 版本新,其中 N 是最新的稳定版本。例如,如果最新的稳定 Rust 版本是 1.85,则 Ruff 的最低支持的 Rust 版本最多为 1.83。

这仅与从源代码构建 Ruff 的用户有关。 从 Python 包索引安装 Ruff 通常会安装预构建的二进制文件,而无需 Rust 编译。

预览模式

预览模式可用于启用新的、不稳定的规则和功能,例如,支持新的文件类型。

预览模式旨在帮助我们收集社区反馈,并确信更改是净收益。

预览模式用于限制对未完成的工作或我们可能删除的功能的访问。 但是,**我们保留对该模式控制的任何行为进行更改的权利**,包括删除预览功能或规则。

规则稳定化

在修改或添加规则时,我们使用以下准则

  • 新规则应始终在预览模式下添加
  • 新规则将在预览模式下保留至少一个次要版本,然后才能升级为稳定
    • 如果在补丁版本中添加,即 0.6.1,则规则在 0.8.0 之前没有资格获得稳定性
  • 稳定规则的行为在补丁版本中不会发生重大变化
  • 规则升级为稳定可能会延迟,以便将它们“批量”到一个次要版本中
  • 并非预览中的所有规则都需要在给定的次要版本中升级

修复稳定化

修复具有三个适用性级别

  • **显示**: 永远不会应用,仅显示。
  • **不安全**: 可以通过显式选择加入来应用。
  • **安全**: 可以自动应用。

规则的修复可能会以较低的适用性引入,然后升级为更高的适用性。 降低修复的适用性不是重大更改。 启用预览模式后,给定修复的适用性可能会发生变化。

Visual Studio Code 扩展

Visual Studio Code 不支持扩展的预发布标记。 因此,Ruff 使用以下方案来区分稳定版本和预览版本

稳定版本在次要版本组件中使用偶数: 2024.30.0, 2024.32.0, 2024.34.0, … 预览版本在次要版本组件中使用奇数: 2024.31.0, 2024.33.0, 2024.35.0, …