piapia123
zh

Ruby 代码格式化

格式化

所有处理都在浏览器本地完成,数据不上传服务器

输入
把文件拖到这里可直接载入
输出

Ruby 代码的缩进重排。不是数括号 —— 用真正的语法分析器(tree-sitter)把代码解析成语法树,按语法结构决定每一行该缩进几层。 为什么这件事值得用解析器?「数括号」那种做法分不清 `}` 是在代码里还是在字符串或注释里。一份含 `"}"` 的代码就能让它后面的缩进全乱,而它自己也看不出哪里错了。有了语法树,缩进块的边界由解析器给出。 ⚠️ 只改每行开头的空白,行内一个字符都不动。 这是刻意的约束:格式化器最坏的失败不是「排得不好看」,而是改坏了用户的代码 —— 那比不做更糟。只动行首空白意味着字符串、注释、模板里的任何内容都不可能被碰到;语法再怪也只是缩进不对,代码本身照跑。所以这里不做行内空格规整、不重排、不换行、不删行。 语法不完整时照样输出,不报错 —— 边写边格式化就是这么用的。

功能

  • 用 tree-sitter 真的解析语法,缩进按语法结构算
  • 字符串、注释里的括号与关键字不参与结构判断
  • 只改行首空白,行内一个字符都不动
  • 缩进可选 2 空格 / 4 空格 / 制表符
  • 语法不完整时照样输出,不报错
  • 支持代码高亮显示
  • 全部在本机完成,代码不上传

使用方法

  1. 把代码粘贴到左侧
  2. 选择缩进宽度
  3. 按 Ctrl/⌘ + Enter 或点「运行」
  4. 点「复制」取走结果

常见问题

和那些「在线格式化」网站有什么不同?
多数在线格式化工具做的是文本层面的缩进整理 —— 逐字符扫描,看到 `{` 就缩进、看到 `}` 就退回。它们分不清这个括号是在代码里还是在字符串里。这里用的是真正的解析器:代码先被解析成语法树,每一行的层级由它所属的语法结构决定。 代价是每种语言要下载一份语法文件(几百 KB 到几 MB),而且只在你打开这个工具页时才下载。换来的是结构判断不会出错。
为什么我的代码排完之后没变化?
那通常说明它本来就是对的,而这正是最好的结果。格式化器最坏的失败不是「排得不好看」,而是把本来正确的代码改动了 —— 那种改动会进 diff、进 code review,而且很难说清是谁改的。所以这里的策略是只在确实需要时动手。 如果代码确实乱了,输出会变。
它会动我的代码内容吗?
不会。这里只改每行开头的空白 —— 行内的一个字符都不动,不重排、不换行、不删行、不动字符串与注释。所以即使遇到格式再怪异的代码,最坏的结果也只是缩进不合你的意,代码本身照跑。 顺带一提,这也意味着它不能替你补上缺失的语法(漏掉的括号、少写的分号)。它是缩进工具,不是代码修复工具。

相关工具