rust-fmt v0.1.8〜v0.1.10 - マクロフォーマッタの安全性パイプライン
注:
rust-fmtv0.1.8 は 2026年8月22日 に、v0.1.9 と v0.1.10 は 2026年8月23日 にリリースされました。
これは rust-fmt の3つの連続リリースのまとめです。中心は v0.1.8 のネイティブマクロフォーマッタ刷新です。
ざっくりまとめ
- v0.1.8 でマクロ整形がトークン検証つきの安全なパイプラインになりました。
- 整形結果が明示的になり、損失を伴う変換は元のマクロを保持して SKIPPED を報告します(フェイルクローズ)。
- 対応プラットフォームが 4 から 6 に拡大しました。
- v0.1.9 で同一ファイル内マクロのバッチ整形により高速化しました。
- v0.1.10 で CRLF 改行コードの整形失敗を修正しました。
rust-fmt v0.1.8
このリリースの主な変更点:
- マクロごとの明示的な整形結果:
FORMATTED/UNCHANGED/ 理由とソース範囲付きのSKIPPED。診断は stderr に出力され、stdout は有効な整形済み Rust のまま。 - 安全性オラクール: 重要トークンの完全保存、ファイル全体の構文検証、二次パスでのバイト一致を検証。
macro_rules!検出をra-ap-rustc_lexerベースに置き換え。文字列・コメント内の誤検出や UTF-8 破壊を修正。- 非対応・損失を伴う変換は元のマクロを保持して
SKIPPEDを報告。最大8パスで固定点に収束し、非収束入力は不安定な出力を返さない。 - VS Code 拡張は元ドキュメントをネイティブフォーマッタへ直接送信し、失敗時は TypeScript の書き換えなしで素の
rustfmtにフォールバック。 macro_rules!を含まない通常の Rust ファイルも同一の検証済みパイプラインで整形。- linux-arm64 / win32-arm64 バイナリを追加し、バンドル対応が 4 から 6 プラットフォームに拡大。
- 意図しない
max_width=80上書きを削除し、未設定のrustfmt(cargo fmt相当)と完全に同じ出力に。
要するに、「それっぽく書き換える」から「検証してから返す」へ。整形結果が常に構文的に有効で、トークンが保存されていることが保証されます。
rust-fmt v0.1.9
- 同一ファイル内のマクロ定義を収束パスごとに1回の統合
rustfmt呼び出しにバッチ化。バッチがトークン保存チェックに失敗した場合のみ従来の個別呼び出しにフォールバックします。 - 21マクロのフィクスチャで、
rustfmtサブプロセス起動が 47 → 27 回、実行時間は約1.0秒 → 約0.62秒に短縮。
rust-fmt v0.1.10
- CRLF 改行かつ
//コメントを含むファイルの整形がSKIPPEDやエラーになる問題を修正。 - CRLF 入力を検出して内部パスでは LF に正規化し、最終出力で CRLF を復元(報告されるマクロ span も remap)。LF のみの入力には影響しません。
リンク
- rust-fmt repository: https://github.com/shikoucore/rust-fmt
- VS Code Marketplace: https://marketplace.visualstudio.com/items?itemName=vremyavnikuda.rust-fmt