Ruby コードを整形

書き換えるのは空白だけです。インデントを組み直し、長い行は折り返せますが、文字列・ヒアドキュメント・演算子は 1 バイトも変わりません。レイアウト専用のフォーマッターで、linter ではありません — 構文の検証や修復は行いません。

ブラウザ内でローカルに実行
コピー

ブラウザで Ruby コードを整形する方法

Ruby のスニペットを貼り付けると、インデントを組み直し、空行の方針と任意の行折り返しを適用した同じプログラムが返ります。書き換えるのはトークン間の空白だけです。文字列、ヒアドキュメント、% リテラル、正規表現、コメント、演算子は 1 バイトも変えずにコピーされるため、出力は入力と同じ構文木に解析されます。

フォーマッターはこのブラウザタブだけで動作し、入力は送信されません。レイアウト専用のフォーマッターであり、linter ではありません。Ruby の検証・実行・修復は行わず、エラーを報告することもないため、end が欠けたスニペットは整形されて返るだけで、直りはしません。

  1. 入力欄に Ruby コードを貼り付け、Ruby コードを整形 を押すか Ctrl/⌘+Enter を押します。実行のたびに前の結果は置き換わります。
  2. インデント (タブ、または 2・3・4・8 スペース)、残す空行の数、長い行を 80 文字か 120 文字で折り返すかを選びます。
  3. Copy で結果を取得し、Clear で次のスニペットのために両方の欄を空にします。
  4. かっこの外でセミコロンでつながれた文はそれぞれの行に分割されます。かっこの内側のセミコロンはそのまま残ります。

フォーマッターが変えるもの — 変わらないもの

書き換えるもの、コピーするもの

書き換えるのはトークン間の空白だけです。行頭のインデントは選択した単位に組み直し、行末の空白と余分な空行は削除し、長い行は折り返せます。それ以外は 1 バイトずつコピーします。シングルクォート・ダブルクォート・バッククォートの文字列、ヒアドキュメント (<<、<<-、<<~、<<-'end;' のような引用符付き終端)、% リテラル (%w、%W、%i、%I、%q、%Q、%r、%s、%x)、複数行にまたがる正規表現、シンボルとラベル、そして **、&.、&:、::、<<、->、=> などの演算子です。

結果を確かめる簡単な方法は、出力が入力と同じトークンを同じ順序で含み、空白だけが変わっていることです。エディタで RuboCop や rufo もかけている場合、このページはその工程を置き換えません。スニペットを読むためのもので、ビルド手順ではありません。

インデント・空行・折り返し

入力のインデントが 1 段深くなるごとに、選んだ幅の 1 単位へと組み直します。タブでも 2・3・4・8 スペースでも同じブロック構造になり、def、class、module、if、unless、while、until、case、begin、for、do … end の本体が従います。x if y のような修飾形はブロックとして扱わず、未完了の式が続く行はその文につながったままになります。

空行の設定は空行の連続を制限します。すべて削除、最大 1 行か 2 行を保持 (既定は 2 行)、またはすべて保持から選べます。折り返しは貪欲で、コンマの後、または値の後の二項演算子の後 — Ruby 自身が行を続ける位置 — でのみ切るため、トークンが分割されることはありません。そのような位置がない行は、切り詰められず長いまま残ります。

できないこと

linter でもスタイル修正ツールでもインタープリターでもありません。実行はせず、名前の変更、require の並べ替え、引用符の変換は行わず、end の欠落も報告しません。ヒアドキュメントの本文、=begin/=end ブロック、__END__ データセクションは、内部の空白も含めてそのままコピーします。

プログラムを解析しないため、入力が不正であることを伝えることはできません。有効かどうかを確認したいときは、結果を ruby -c やエディタのチェックにかけてください。

最近使ったツール: