DevToolPal
繁

Ruby 程式碼格式化

使用 Syntax Tree 格式化 Ruby 程式碼,底層是編譯成 WebAssembly 的真正 Ruby 直譯器。

本機處理,不會上傳

選項

第一次格式化需要下載 Ruby 直譯器(約 13 MB),可能要等幾秒鐘,之後就會很快。

輸入

0 字元 · 0 B

輸出

0 字元 · 0 B

這個工具能做什麼

Ruby 格式化工具會以一致的縮排和間距改寫 Ruby 程式碼。貼上一段指令碼、Rails model 或 Rakefile,就會得到兩個空格的縮排、每行一個陳述式、運算子前後和大括號內側加上空格,而且過長的方法鏈會依照每行寬度換行。

它使用 Syntax Tree,執行在編譯成 WebAssembly 的真正 Ruby 直譯器上。由於剖析器就是 Ruby 自己的,無結尾方法(endless method)、模式比對和關鍵字參數等現代語法,都會以和 Ruby 完全相同的方式理解。

使用方式

  1. 貼上 Ruby 程式碼,或開啟 .rb 檔案。
  2. 等待第一次結果。直譯器只會在背景下載一次。
  3. 選擇 每行寬度。超過這個長度的行,會在方法呼叫、參數或 hash 項目處斷行。
  4. 複製或下載格式化後的程式碼。

如果程式碼無法剖析,工具會顯示 Ruby 的語法錯誤,例如 syntax error, unexpected 'end',方便你找出缺少的部分。

範例

範例是一個完全沒在意排版的小型購物車模組:類別內容沒有縮排、initialize 用分號寫成一行、hash 沒有空格,還有一個 > 前後沒有空格的三元運算式。格式化之後,模組和類別都會縮排,initialize 中的每個陳述式各佔一行,hash 字面值變成 { name: name, price: price, qty: qty },三元運算式則變成 cart.total > 10 ? "big order" : "small order"。

不會改變的部分

格式化工具只改變排版。它不會重新命名變數、把 hash rocket 轉成新語法,也不會在單引號和雙引號之間切換。註解會保留下來。如果需要這些風格修正,請在格式化後於專案中執行 RuboCop 的自動修正。

小提示

  • 使用和專案 .rubocop.yml(Layout/LineLength)相同的每行寬度,讓格式化後的程式碼通過 linter 檢查。
  • 格式化也是找出漏掉 end 的快速方法:Ruby 會回報它放棄解析的位置,通常就在沒有關閉的區塊之後。

常見問題

› 這裡使用哪一個格式化工具?

Syntax Tree,也就是官方 Prettier Ruby 外掛背後的 Ruby 格式化工具。它執行在編譯成 WebAssembly 的 CRuby(標準 Ruby 直譯器)上,所以剖析程式碼的方式和 Ruby 完全相同。

› 為什麼第一次執行很慢?

第一次格式化時,頁面會下載 Ruby 直譯器和格式化工具(約 13 MB),並在背景 worker 中啟動,讓頁面保持回應。之後每次格式化都只需要不到一秒。

› 它遵循 RuboCop 的風格嗎?

大致上是。Syntax Tree 會產生兩個空格的縮排、hash 大括號內側和運算子前後的空格,以及方法之間的一個空行,符合 RuboCop 預設的排版規則。它不會像 `rubocop -a` 那樣更改引號風格或改寫程式碼。

› 我的程式碼會被上傳嗎?

不會。所有處理都在你的瀏覽器中執行,不會傳送任何內容到伺服器。