AST ツール
AST ツール タスクは、すべての生成ファイルを管理する私たちの秘策です。
これらのツールには、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 関連コード においてこのテーマについて議論し、以下の要件とユーザー像に合意しました。
要件
- ユーザーに
build.rsを公開しない。 - すべての生成コードは Git にチェックインする。
nightlyを使用しない。- Rust コードをソースオブトラゥスとする。
#[ast]とマークされた型を解析する必要がある。 - コンパイル時のプロシージャルマクロを使用しないようにできるだけ避ける。
ワークフロー
- ユーザーがリポジトリ内のコードを変更する。
- 変更を監視するツールがその変更を検出する。
#[ast]とマークされたすべての型を解析する。- すべての AST 型の詳細をスキーマに記録する。
- スキーマからコードを生成し、ファイルに保存する。
インフラストラクチャ
詳細は後ほど追加予定です。
