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

배경

러스트의 컴파일 시간은 유명하게 느립니다. 또한 이렇게 많은 코드를 프로시저 매크로를 사용해 생성하면 문제는 더욱 악화됩니다.

빌드 시에 코드 생성이 완료될 때까지 사용자가 기다려야 한다면, 하류 프로젝트의 개발 경험에 큰 지장을 초래할 것입니다.

냉장 및 증분 빌드 시간 모두 매우 크게 저하될 수 있습니다.

RFC

팀은 RFC: AST 관련 코드 생성에서 이 주제를 논의하고 다음과 같은 요구 사항과 사용자 스토리를 합의했습니다:

요구 사항

  • 사용자에게 build.rs를 공개하지 않음.
  • 모든 생성된 코드는 깃에 커밋됨.
  • 나이트리 버전 사용 금지.
  • 러스트 코드가 진실의 근원이며, #[ast]로 표시된 타입을 파싱해야 함.
  • 가능한 한 컴파일 시간 프로시저 매크로를 피함.

워크플로우

  • 사용자가 저장소 내 코드를 변경.
  • 변경 감지 도구가 이를 감지.
  • #[ast]로 표시된 모든 타입을 파싱.
  • 모든 AST 타입의 세부 정보를 스키마에 기록.
  • 스키마에서 코드를 생성하고 파일에 저장.

인프라

추가 세부 정보는 곧 제공될 예정입니다.