Ad
DevToolXDevToolX

TOML 格式化

格式化、驗證和美化 TOML 資料

關於 TOML 格式化

TOML Formatter 根據 TOML 1.0 規格驗證並整理你的設定檔。TOML 的設計目標是消除歧義——每個值有明確的型別、縮排不影響結構、以表格為基礎的層次直接對應 hash map。這個工具讓你在推壞掉的 Cargo.toml 到 crates.io 或是因為日期格式打錯而讓 Hugo 建置中斷之前,先抓到語法錯誤。

常見使用情境

編輯 Rust Cargo.toml
Cargo 對 TOML 語法很嚴格,在 cargo build 之前先驗證 dependencies 和 workspace table,避免遇到難懂的解析錯誤。
維護 Python pyproject.toml
PEP 518 / PEP 621 用 TOML 存放 Python 專案 metadata,格式化後讓 [build-system]、[project] 和工具 section 保持整齊易讀。
設定 Hugo 靜態網站
Hugo 的 config.toml 支援 taxonomy 和輸出格式的巢狀 table,格式化後能在早期發現缺少結束括號或無效的日期字面值。
驗證 CI 與工具設定
mise(前身 rtx)和 Lefthook 等工具用 TOML 存設定,commit 前先美化確認 section 結構正確。

常見問題

為什麼選 TOML 而不是 YAML?

TOML 不靠縮排決定結構,所以不會有 tab/空格問題或縮排跑掉的情況。型別是明確的——加引號的字串永遠是字串,整數永遠是整數,日期永遠是日期。YAML 隱性型別轉換和縮排敏感讓大型設定檔容易出錯。TOML 更簡單,解析和推理都更直觀。

什麼是 array of tables(表格陣列)?

[[table]] 定義一個 table 值的陣列,等同於 JSON 的物件陣列。每個 [[dependencies]] block 會往陣列裡追加一筆資料。這就是 Cargo.toml 列多個 [[example]] 或 [[bench]],以及 Hugo front matter 列多個 [[params.menu]] 的方式。

什麼是 inline table(行內表格)?

Inline table——{key = "val", other = 1}——把整個 table 寫在一行。適合短小緊湊的值,且必須放在單行內,不能跨行。簡單的情況可以用 inline table,複雜的內容還是用一般 table。

TOML 怎麼處理日期與時間?

TOML 有四種原生時間型別:帶時區的 datetime(2024-01-15T09:00:00Z)、本地 datetime(無時區)、本地 date(2024-01-15)、本地 time(09:00:00),格式遵循 RFC 3339。沒有其他設定格式有第一級的 datetime 型別;JSON 和 YAML 都要用字串,然後靠消費端自己解析。

什麼時候 JSON 還是更好的選擇?

機器對機器的資料交換用 JSON 更合適:各語言普遍支援、規格更簡單、不需要特定的 TOML parser。TOML 的優勢——支援註解、表達力強的 table、原生日期型別——在人工維護的設定檔裡最有價值。如果檔案是由機器產生並消費,用 JSON 就好。

相關工具