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と、if、case、do、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の結果を揃えられます。