跳至主内容区

Prettier for Ruby 正式发布 v1.0 版本 🎉

· 1 分钟阅读
非官方测试版翻译

本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →

自 2018 年 7 月以来,历经 1500 次提交和 50 个版本迭代后,我们非常高兴地宣布 Prettier for Ruby 的 v1.0 版本正式发布。本篇博文将简要介绍该插件的工作原理、设计理念以及未来规划。

工作原理

Prettier for Ruby 通过 Prettier 的插件 API 实现功能。其 parse 函数通过生成 Ruby 进程并调用 Ruby 原生解析器(即 Ripper)来工作。在追踪所有节点类型、注释、位置信息及其他元数据后,它会将构建好的抽象语法树(AST)返回给 Prettier 进程。最后将该 AST 转换为 Prettier 的中间表示(称为 Doc),再由 Prettier 执行格式化输出。

设计理念

Ruby 插件力求兼容多种代码风格。例如,无论您选择带括号还是不带括号的方法调用方式,插件都会尊重您的选择。但在 Ruby 社区存在强烈分歧的领域,我们提供了以下配置选项:

  • rubyArrayLiteral - 默认将简单字符串/符号数组转换为字面量语法(分别对应 %w%i)。禁用此选项则保留原始格式。

  • rubyHashLabel - 为偏好 hash rocket 语法的开发者设计。默认会统一处理哈希键(即全部使用标签语法或全部使用 hash rocket)。禁用后所有哈希键将强制使用 hash rocket(=>)表示。

  • rubyModifier - 为不习惯 if/unless/while/until 修饰符语法的用户提供此选项。

  • rubySingleQuote - 默认在适用场景使用单引号,其余情况用双引号。此选项可反转该行为。

  • rubyToProc - 允许将 array.map { |elem| elem.to_s } 简化为 array.map(&:to_s)。默认禁用,因为这会改变代码块元数(arity),可能破坏反射逻辑。

该插件同时支持 Prettier 核心配置选项:

  • printWidth - 默认 80 字符,可按需增加行宽限制。

  • tabWidth - 默认缩进 2 字符。

  • trailingComma - 默认 "none",设为 "all" 可为跨多行的数组/哈希字面量和参数列表添加尾逗号。

整体风格遵循 Ruby 风格指南(即 Rubocop 默认配置)。使用 Prettier 时,建议关闭 Rubocop 的 Formatting/* 规则以提升 lint 速度。

后续规划

接下来我们将重点推进:

  • 支持 Ruby 3 新语法(包括右向赋值和增强的模式匹配)

  • 性能优化(参考 实验

  • 在 Prettier 在线演练场 支持 Ruby 语言

  • 作为另一个插件支持 HTML ERB 模板,如这个实验

现在,您可以通过遵循 README 中的说明 在命令行中试用此插件。如果发现任何错误,请务必报告,我们会努力确保问题出现后立即解决。如果您有兴趣,也欢迎通过贡献指南参与项目贡献。