工具简介
Ruby 代码格式化工具会把 Ruby 代码整理成统一的缩进和空格风格。粘贴一段脚本、一个 Rails 模型或者 Rakefile,得到的结果是两个空格缩进、每行一条语句、运算符两边和大括号内侧加空格,过长的方法链按每行宽度自动换行。
工具使用运行在真正 Ruby 解释器上的 Syntax Tree,解释器编译成了 WebAssembly。因为用的是 Ruby 自己的解析器,像无括号的单行方法定义、模式匹配和关键字参数这些现代语法,都会按照 Ruby 的理解来处理。
使用方法
- 粘贴 Ruby 代码,或打开一个
.rb文件。 - 等待第一次结果出来,解释器会在后台下载,只需下载一次。
- 选择 每行宽度,超过宽度的行会在方法调用、参数或哈希元素处换行。
- 复制或下载格式化后的代码。
如果代码无法解析,工具会显示 Ruby 的语法错误,例如 syntax error, unexpected 'end',方便你找到缺失的部分。
示例
示例是一个完全没注意排版的购物车模块:类的内容没有缩进,initialize 用分号写在一行里,哈希没有空格,三元表达式的 > 两边也没有空格。格式化之后,模块和类正确缩进,initialize 里的每条语句各占一行,哈希字面量变成 { name: name, price: price, qty: qty },三元表达式变成 cart.total > 10 ? "big order" : "small order"。
不会改动的内容
格式化只调整排版。它不会重命名变量,不会把 => 写法的哈希改成新语法,也不会在单引号和双引号之间切换。注释都会保留。如果需要这些风格修正,可以在格式化之后在项目里运行 RuboCop 的自动修正。
小技巧
- 把每行宽度设成和项目
.rubocop.yml里Layout/LineLength一样的值,格式化后的代码就能通过代码检查。 - 格式化也是查找缺失
end的快捷方法:Ruby 会报告它停下的位置,通常就在没闭合的代码块之后。
常见问题
› 用的是什么格式化程序?
Syntax Tree,也就是官方 Prettier Ruby 插件背后的 Ruby 格式化程序。它运行在编译成 WebAssembly 的 CRuby(标准 Ruby 解释器)上,所以解析代码的方式和 Ruby 本身完全一致。
› 为什么第一次运行比较慢?
第一次格式化时,页面要下载 Ruby 解释器和格式化程序(约 13 MB),并在后台 Worker 里启动,页面在此期间不会卡住。之后每次格式化都只需要不到一秒。
› 符合 RuboCop 的风格吗?
基本符合。Syntax Tree 输出两个空格缩进、哈希大括号内侧和运算符两边的空格,以及方法之间空一行,这些都与 RuboCop 默认的排版规则一致。但它不会像 `rubocop -a` 那样修改引号风格或改写代码。
› 我的代码会被上传吗?
不会。所有处理都在浏览器里完成,不会向服务器发送任何内容。