erbfmt

ERB formatter and linter

erbfmt

RailsのERBとHTML+ERB向けの高速な、Prettier/BiomeのようなFormatter/Linterです。

-<div><% if user.admin? %><span>Admin</span><% end %></div>
+<div>
+  <% if user.admin? %>
+    <span>Admin</span>
+  <% end %>
+</div>

ひとつの構造

HTMLのnestingとERB制御構文を別々のtextではなく、ひとつのtemplateとして整形します。

安全を優先

安全に認識して書き換えられないRuby式は、積極的に変更せず保持します。

Formatter + Linter

local、CI、first-party VS Code extensionから同じRust CLIを利用できます。

インストール

Rails projectでは、Bundlerでerbfmtを追加して全員とCIで同じversionを使う方法を推奨します。

bundle add erbfmt --group development --require false
bundle exec erbfmt --version

手元でglobal commandとして使いたい場合は、RubyGemを直接installします。

gem install erbfmt -v 0.1.5
erbfmt --version

projectではformatter versionを固定できるBundlerを優先してください。standalone binaryはv0.1.5 releaseからも入手できます。

クイックスタート

Rails projectに erbfmt.jsonを作り、templateをformatまたはlintします。

cd your-rails-project
erbfmt init
erbfmt --write app/views/users/show.html.erb
erbfmt --check app/views/users/show.html.erb
erbfmt --lint app/views/users/show.html.erb

--write--check--lintは同時に指定できません。checkはformatによる変更が必要な場合、lintはerror levelの診断が見つかった場合に失敗します。

<%--%><%%<%==などのstandalone ERB trim、escaped、raw-output markerは現在errorになります。semanticを変更する代わりに、fileを書き込まず終了します。

indent、line width、lint severityの変更は設定リファレンスを参照してください。

設計方針

HTMLとERBを一緒に扱う

erbfmtはHTML elementと、ifcasedo、branch、endなどのERB control-flow markerを認識します。長いHTML tagと、安全に認識できるstandalone ERB callは設定したline widthに合わせて折り返します。

曖昧なRubyは保持する

完全なRuby ASTの構築やRails applicationのsemantic analysisは行いません。複雑な式は積極的に書き換えず、そのまま保持します。

どこでも同じCLI

VS Code extensionはterminalやCIと同じCLIを呼び出す薄いwrapperです。formatとdiagnosticsの結果を揃えられます。