Skip to content

AST ツール

AST ツール タスクは、すべての生成ファイルを管理する私たちの秘策です。
これらのツールには、AST ビルダー、ビジタ、ContentEqContentHash などのトレイト、および TypeScript の型が含まれており、これらすべてが機械的に生成されています。

たとえば、次のファイルは自動的に生成されます:

  • crates/oxc_ast/src/generated/ast_builder.rs
  • crates/oxc_ast/src/generated/visit.rs
  • crates/oxc_ast/src/generated/visit_mut.rs
  • crates/oxc_ast/src/generated/derive_content_eq.rs
  • crates/oxc_ast/src/generated/derive_content_hash.rs
  • npm/oxc-types/src/generated/types.d.ts

背景

Rust のコンパイル時間は著しく遅く、このような大量のコードをプロシージャルマクロで生成すると問題はさらに悪化します。

ビルド時にコード生成の完了を待つ必要があると、下流プロジェクトの開発体験に大きな障害が生じます。

冷スタートおよびインクリメンタルビルド時間は 大幅に遅延する可能性があります

RFC

チームは RFC: codegen AST 関連コード においてこのテーマについて議論し、以下の要件とユーザー像に合意しました。

要件

  • ユーザーに build.rs を公開しない。
  • すべての生成コードは Git にチェックインする。
  • nightly を使用しない。
  • Rust コードをソースオブトラゥスとする。#[ast] とマークされた型を解析する必要がある。
  • コンパイル時のプロシージャルマクロを使用しないようにできるだけ避ける。

ワークフロー

  • ユーザーがリポジトリ内のコードを変更する。
  • 変更を監視するツールがその変更を検出する。
  • #[ast] とマークされたすべての型を解析する。
  • すべての AST 型の詳細をスキーマに記録する。
  • スキーマからコードを生成し、ファイルに保存する。

インフラストラクチャ

詳細は後ほど追加予定です。