AST 도구
AST Tools 작업은 생성된 파일 전체를 관리하는 비밀 병기 역할을 합니다. 여기에는 AST 빌더, 방문자(visitor), 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]표시 타입을 파싱해야 한다. - 빌드 시점 절차적 매크로는 가능한 피한다.
워크플로
- 사용자가 저장소 코드를 수정한다.
- 변경 감시(watch)가 이를 포착한다.
#[ast]표시 타입 전부를 파싱한다.- 모든 AST 타입 세부 정보를 스키마에 기록한다.
- 스키마로부터 코드를 생성해 파일에 저장한다.
인프라
추가 세부는 추후 보강 예정입니다.