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