版本控制

RuboCop 在主要版本之间保持稳定,包括 API 和 cop 配置。我们的目标是简化 RuboCop 扩展的维护(通过保持 API 稳定)以及 RuboCop 版本之间的升级(通过不启用新的 cop 以及不更改现有 cop 的配置)。所有重大(破坏性)更改都保留在主要版本中。

发布策略

我们遵循 语义版本控制。主要版本之间的 API 兼容性是一个重大问题,因为许多 RuboCop 扩展可能会受到破坏性 API 更改的影响。

放弃对特定 Ruby 版本的运行时支持不被视为破坏性更改,因为它不会以任何方式影响客户端。它们只是被限制在支持其 Ruby 运行时的最后一个 RuboCop 版本。在实践中,这意味着放弃对 Ruby 版本的运行时支持可以在任何次要版本中发生。

下一个次要(功能)版本的开发周期在之前版本发布后立即开始。错误修复(点)版本(如果有)只解决严重错误,从不包含新功能。

以下是一些示例

  • 1.1.0 - 功能版本

  • 1.1.1 - 错误修复版本

  • 1.1.2 - 错误修复版本

  • 1.2.0 - 功能版本

在 RuboCop 1.0 之前,次要(第二)版本号的提升被视为主要版本,并且始终包含新功能和/或对现有功能的更改。

待处理的 Cops

在 RuboCop 的早期版本中,一个常见的挫折来源是新的 cop 被添加到几乎每个版本中,并且由于它们默认情况下是启用的,因此每次升级都会导致 CI 构建中断,并试图找出到底发生了什么变化。在考虑了许多解决此问题的方案后,我们最终选择了一种方法,将此类更改限制在主要 RuboCop 版本中。

现在,在主要版本之间引入的新 cop 被设置为特殊的待处理状态,并且默认情况下不会启用。如果在用户配置中没有明确启用或禁用此类 cop,则会发出警告。以下是一个这样的消息

The following cops were added to RuboCop, but are not configured. Please
set Enabled to either `true` or `false` in your `.rubocop.yml` file:
 - Style/HashEachMethods (0.80)
 - Style/HashTransformKeys (0.80)
 - Style/HashTransformValues (0.80)
For more information: https://rubocop-docs.ruby-lang.org.cn/rubocop/versioning.html

您可以看到在 RuboCop 0.80 中添加了 3 个新的 cop,由您决定是否要启用或禁用它们。

偶尔,一些新的代码风格检查器会默认被设置为禁用。通常,这意味着我们认为该检查器有用,但并不适合所有人。典型的案例可能是强制执行在实际应用中不太常见的编程风格,或者产生太多误报的检查器(因此您会偶尔手动运行它们,而不是一直运行它们)。

批量启用/禁用待定检查器

要抑制此消息,请在您的 .rubocop.yml 文件中将 NewCops 设置为 enabledisable。您可以使用以下配置或 --enable-pending-cops 命令行选项,批量启用所有待定检查器

AllCops:
  NewCops: enable

或者,您可以使用以下配置或 --disable-pending-cops 命令行选项,批量禁用所有待定检查器

AllCops:
  NewCops: disable
命令行选项优先于 .rubocop.yml 文件。

启用/禁用单个待定检查器

最后,您可以通过在您的 .rubocop.yml 文件中将它们的 Enabled 配置设置为 truefalse 来启用/禁用单个待定检查器

Style/ANewCop 是一个新添加的待定检查器的示例

Style/ANewCop:
  Enabled: true

Style/ANewCop:
  Enabled: false
在 RuboCop 主要版本更新(例如 1.0 → 2.0)时,所有待定检查器都会被批量启用。