Rufo 入门:零配置的 Ruby 代码格式化工具
Rufo 是快速、低配置的 Ruby 代码格式化工具,自动统一缩进、空格与折行。本文讲解 Rufo 的安装、命令行选项、编辑器集成与团队工作流落地。
Rufo 是 Ruby 的"纯格式化器":输入任何合法 Ruby 代码,输出风格统一的排版结果,不评判代码质量、几乎无需配置。安装后 rufo . 一键格式化整个项目,配合编辑器保存时自动运行,格式争议从此消失。
Rufo 的设计哲学:少即是多
与 RuboCop 这类"全能裁判"不同,Rufo 只做一件事:把代码排版统一。它不检查方法长度、不管命名、不评价你的写法——只保证缩进、空格、空行、折行符合固定规范。这种克制带来两个好处:配置项极少(团队不用为规则吵架)和速度极快(大代码库秒级完成)。
安装与基本用法
gem install rufo
rufo app/models/user.rb # 格式化单文件(就地修改)
rufo app/ # 格式化目录
rufo -x . # 只检查不修改(CI 用)
rufo --check . # 发现未格式化文件返回非零退出码
格式化前后对比:
# 之前
def greet( name )
puts "你好,#{name}"
end
# 之后
def greet(name)
puts "你好,#{name}"
end
方法定义括号、缩进、操作符间距全部归一——代码语义完全不变,变的只是"长相"。
命令行选项与配置
常用选项:
-x/--check:检查模式,不写入文件;--simple-exit:退出码只区分"是否需要格式化";stdin输入:编辑器集成的标准方式。
.rufo 配置文件支持少量选项(每行一个 key value):引号风格、缩进宽度、链式调用折行策略等。Rufo 刻意保持选项最少——想要精细定制规则就换 RuboCop,Rufo 服务的是"别再讨论格式"的团队。
融入工作流
- 编辑器:VS Code 装 rufo 插件后保存时自动格式化;RubyMine 配置外部工具同理;
- Git 钩子:pre-commit 中对暂存的 .rb 文件跑 rufo,杜绝未格式化代码入库;
- CI:
rufo --check .作为流水线的一步,未格式化即失败; - 存量代码:一次性全库格式化后,把该提交加入
.git-blame-ignore-revs,保住 git blame 的可用性。
Rufo 与 RuboCop/Standard 的关系
三者都在"Ruby 格式化"话题下出现,分工是:Rufo 只格式化;RuboCop 格式化 + 风格 + 缺陷检查;Standard 是 RuboCop 的零配置封装。选一个作为项目的唯一格式权威即可混用易冲突。Rufo 适合的场合:只想要排版统一、不想引入规则强制的项目,或给遗留代码快速"洗澡"。
常见问题(FAQ)
Q:Rufo 会改变代码行为吗?
不会。Rufo 只做排版层面的重排(空白、缩进、折行),不增删任何语法元素。格式化前后跑一遍测试套即可放心,这也是格式化工具与"自动修正"类工具的本质区别。
Q:老项目接入 Rufo 的最佳时机?
选择功能迭代相对空闲的窗口,一个独立 PR 完成全库格式化(不要夹杂业务改动),review 只看 CI 测试结果。之后立即启用编辑器保存时格式化,避免新旧风格混杂。
Q:Rufo 对某些语法格式化结果不满意能局部跳过吗?
Rufo 不支持局部禁用注释(这是刻意的设计:格式化权威必须唯一)。实在有手工排版需求的代码块(如对齐的表格数据),改用 RuboCop(支持 # rubocop:disable)是更灵活的选择。
参考文档
本文依据公开文档整理,示例需按项目依赖版本验证;不将文档中的性能描述视为本项目实测结果。