このツールでできること
Ruby フォーマッターは、Ruby コードのインデントとスペースを統一して書き直します。スクリプト、Rails のモデル、Rakefile を貼り付けると、スペース 2 つのインデント、1 行に 1 文、演算子の前後と波括弧の内側のスペース、行の幅に収まるよう折り返された長いメソッドチェーンで返ってきます。
WebAssembly にコンパイルされた本物の Ruby インタープリター上で Syntax Tree を動かしています。パーサーが Ruby 自身のものなので、エンドレスメソッド、パターンマッチ、キーワード引数などのモダンな構文も、Ruby の解釈どおりに理解されます。
使い方
- Ruby コードを貼り付けるか、
.rbファイルを開きます。 - 最初の結果を待ちます。インタープリターはバックグラウンドで一度だけダウンロードされます。
- 行の幅 を選びます。これより長い行は、メソッド呼び出し、引数、ハッシュの要素の位置で改行されます。
- 整形されたコードをコピーまたはダウンロードします。
コードを解析できない場合は、syntax error, unexpected 'end' のような Ruby の構文エラーが表示されるので、足りない部分を見つけられます。
例
サンプルは、レイアウトに無頓着に書かれた小さなショッピングカートのモジュールです。インデントされていないクラス本体、セミコロンで 1 行に書かれた initialize、スペースのないハッシュ、> の前後にスペースのない三項演算子が含まれています。整形すると、モジュールとクラスがインデントされ、initialize の各文がそれぞれ独立した行になり、ハッシュリテラルは { name: name, price: price, qty: qty } に、三項演算子は cart.total > 10 ? "big order" : "small order" になります。
変更しないもの
フォーマッターが変えるのはレイアウトだけです。変数名の変更、ハッシュロケットから新しい構文への変換、シングルクォートとダブルクォートの切り替えは行いません。コメントは保持されます。そうしたスタイルの修正が必要なら、整形後にプロジェクトで RuboCop の自動修正を実行してください。
ヒント
- プロジェクトの
.rubocop.yml(Layout/LineLength)と同じ行の幅を使えば、整形したコードがリンターを通ります。 - 整形は足りない
endを見つける手軽な方法でもあります。Ruby は解析をあきらめた位置を報告し、それはたいてい閉じられていないブロックの直後です。
よくある質問
› どのフォーマッターを使っていますか?
公式の Prettier Ruby プラグインの中核でもある Ruby フォーマッター Syntax Tree です。標準の Ruby インタープリター CRuby を WebAssembly にコンパイルしたもの上で動くため、Ruby とまったく同じ方法でコードを解析します。
› 初回の実行が遅いのはなぜですか?
初めて整形するときに、Ruby インタープリターとフォーマッター(約 13 MB)をダウンロードし、ページの応答性を保つためバックグラウンドのワーカーで起動するからです。2 回目以降の整形は一瞬で終わります。
› RuboCop のスタイルに従いますか?
おおむね従います。Syntax Tree はスペース 2 つのインデント、ハッシュの波括弧の内側と演算子の前後のスペース、メソッド間の 1 行の空行を出力し、これは RuboCop の既定のレイアウトルールと一致します。ただし、`rubocop -a` のように引用符のスタイルを変えたりコードを書き換えたりはしません。
› コードはアップロードされますか?
いいえ。すべてブラウザ内で動作し、サーバーには何も送信されません。