StandardRB 入门:零配置的 Ruby 代码风格终结者
StandardRB 是"零配置"的 Ruby 代码格式化工具,基于 RuboCop 固化一套无争议规则。本文讲解其安装、自动修正、编辑器与 CI 集成,以及老项目的接入策略。
StandardRB(standard gem)是 RuboCop 的零配置封装:规则固定、不可争论,standardrb --fix 自动修正全部风格问题。它终结了"团队风格指南怎么定"的无尽讨论——不接受定制就是最大的特性,换来全社区一致的代码面貌。
为什么零配置是卖点
RuboCop 有几千种配置组合,团队为了"字符串用单引号还是双引号"能开一个下午的会。StandardRB 的洞察是:风格的价值在于统一,而不在于选哪个。它固化了社区最佳实践(双引号、两空格缩进、尾逗号等),配置选项刻意为零——从采用那天起,风格讨论永久关闭。
安装与使用
gem install standard
standardrb # 检查全项目
standardrb --fix # 自动修正
standardrb app/models # 指定目录
输出即 RuboCop 风格:文件、位置、规则名一目了然。--fix 安全地自动修正几乎所有问题,剩下的(如 Metrics 复杂度警告)需要人工重构。
融入工作流
- 编辑器:VS Code 的 Ruby LSP 插件原生支持 Standard(设置
"rubyLsp.formatter": "standard"),保存时自动格式化; - Git 钩子:pre-commit 运行
standardrb --fix于变更文件; - CI:
standardrb无修复运行,违规即失败。
与 RuboCop 的关系与有限定制
StandardRB 底层就是 RuboCop + 一套固定配置,rubocop 生态的扩展(standard-rails 等)可以叠加。它支持极少量"逃生通道":.standard.yml 里可以 ignore 特定文件/规则(供老项目过渡)、指定 Ruby 版本——但不能改规则本身,这是不可触碰的设计红线。
老项目接入策略
standardrb --fix # 一次性全库修正(独立 PR,不夹业务改动)
standardrb --generate-todo # 对无法自动修正的存量生成豁免清单
提交 todo 文件后 CI 即刻转绿:存量冻结、新增必须合规。把格式化大提交加入 .git-blame-ignore-revs,保住 git blame 的可用性。
常见问题(FAQ)
Q:StandardRB 和 RuboCop 怎么选?
团队没有强烈的风格传统、认可"统一优于个性"选 StandardRB;已有成文风格指南、或历史代码风格与新规则冲突太大无法一次性修正选 RuboCop 自定义。两者都是好答案,坏答案是"什么都不用"。
Q:规则更新了会不会突然报新错?
会。StandardRB 版本升级可能引入新规则导致 CI 失败——用 Gemfile.lock 锁定版本,升级时作为一个独立变更处理(跑 --fix 或更新 todo 文件),不要让它混进业务 PR。
Q:团队有人就是不喜欢某条规则怎么办?
这是 StandardRB 的设计前提:个人偏好让位于集体一致性。实践中两周后没人再记得争论过什么——正如 gofmt 在 Go 社区证明的那样,"没得选"最终会让所有人轻松。
参考文档
本文依据公开文档整理,示例需按项目依赖版本验证;不将文档中的性能描述视为本项目实测结果。