rust-fmt v0.1.8〜v0.1.10 - マクロフォーマッタの安全性パイプライン

注: rust-fmt v0.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 上書きを削除し、未設定の rustfmtcargo 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 のみの入力には影響しません。

リンク