AST ツール
AST Tools タスクは、生成ファイルを管理するための「秘蔵兵器」です。AST ビルダ、ビジター、ContentEq や ContentHash のようなトレイト、TypeScript 型などはすべて機械生成です。
自動生成されるファイルの例:
crates/oxc_ast/src/generated/ast_builder.rscrates/oxc_ast/src/generated/visit.rscrates/oxc_ast/src/generated/visit_mut.rscrates/oxc_ast/src/generated/derive_content_eq.rscrates/oxc_ast/src/generated/derive_content_hash.rsnpm/oxc-types/src/generated/types.d.ts
背景
Rust のコンパイルは遅く知られており、手続きマクロでこれだけのコードを生成するとさらに悪化します。
ビルド時にコード生成の完了を待たせるのは、下流プロジェクトの開発体験を大きく損ないます。
コールド・増分ビルドの時間は著しく悪化し得ます。
RFC
チームは RFC: codegen AST related codes で議論し、次の要件とユーザストーリーに合意しました。
要件
- ユーザーに
build.rsを公開しない - 生成コードはすべて git 管理する
- nightly に依存しない
- Rust コードが真実の源。
#[ast]付き型をパースする - コンパイル時手続きマクロは可能な限り避ける
ワークフロー
- ユーザーがリポジトリ内のコードを変更する
- ウォッチが検知する
#[ast]付きの型をすべてパースする- すべての AST 型の詳細をスキーマに記録する
- スキーマからコードを生成しファイルに保存する
インフラ
詳細は追って追記予定です。