Skip to content

AST ツール

AST Tools タスクは、生成ファイルを管理するための「秘蔵兵器」です。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 related codes で議論し、次の要件とユーザストーリーに合意しました。

要件

  • ユーザーに build.rs を公開しない
  • 生成コードはすべて git 管理する
  • nightly に依存しない
  • Rust コードが真実の源。#[ast] 付き型をパースする
  • コンパイル時手続きマクロは可能な限り避ける

ワークフロー

  • ユーザーがリポジトリ内のコードを変更する
  • ウォッチが検知する
  • #[ast] 付きの型をすべてパースする
  • すべての AST 型の詳細をスキーマに記録する
  • スキーマからコードを生成しファイルに保存する

インフラ

詳細は追って追記予定です。