這個工具能做什麼
Ruby 格式化工具會以一致的縮排和間距改寫 Ruby 程式碼。貼上一段指令碼、Rails model 或 Rakefile,就會得到兩個空格的縮排、每行一個陳述式、運算子前後和大括號內側加上空格,而且過長的方法鏈會依照每行寬度換行。
它使用 Syntax Tree,執行在編譯成 WebAssembly 的真正 Ruby 直譯器上。由於剖析器就是 Ruby 自己的,無結尾方法(endless method)、模式比對和關鍵字參數等現代語法,都會以和 Ruby 完全相同的方式理解。
使用方式
- 貼上 Ruby 程式碼,或開啟
.rb檔案。 - 等待第一次結果。直譯器只會在背景下載一次。
- 選擇 每行寬度。超過這個長度的行,會在方法呼叫、參數或 hash 項目處斷行。
- 複製或下載格式化後的程式碼。
如果程式碼無法剖析,工具會顯示 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` 那樣更改引號風格或改寫程式碼。
› 我的程式碼會被上傳嗎?
不會。所有處理都在你的瀏覽器中執行,不會傳送任何內容到伺服器。