diff --git a/tasks/ast_tools/src/codegen.rs b/tasks/ast_tools/src/codegen.rs index 3d8c465a9..5bf7ad298 100644 --- a/tasks/ast_tools/src/codegen.rs +++ b/tasks/ast_tools/src/codegen.rs @@ -61,7 +61,7 @@ impl From for SideEffect { fn from(output: GeneratorOutput) -> Self { match output { GeneratorOutput::Rust { path, tokens } => Self::from((path, tokens)), - GeneratorOutput::Text { path, content } => Self { path, content: content.into() }, + GeneratorOutput::Javascript { path, code } => Self { path, content: code.into() }, } } } @@ -244,7 +244,7 @@ pub trait CodegenBase { } /// Creates a generated file warning + required information for a generated file. -pub fn generate_header(file_path: &str) -> TokenStream { +pub fn generate_rust_header(file_path: &str) -> TokenStream { let file_path = file_path.replace('\\', "/"); // TODO: Add generation date, AST source hash, etc here. @@ -255,3 +255,14 @@ pub fn generate_header(file_path: &str) -> TokenStream { //!@@line_break } } + +/// Creates a generated file warning + required information for a generated file. +pub fn generate_javascript_header(file_path: &str) -> String { + let file_path = file_path.replace('\\', "/"); + + // TODO: Add generation date, AST source hash, etc here. + format!( + "// Auto-generated code, DO NOT EDIT DIRECTLY!\n\ + // To edit this generated file you have to edit `{file_path}`\n\n" + ) +} diff --git a/tasks/ast_tools/src/derives/mod.rs b/tasks/ast_tools/src/derives/mod.rs index b2c258add..1986ef825 100644 --- a/tasks/ast_tools/src/derives/mod.rs +++ b/tasks/ast_tools/src/derives/mod.rs @@ -6,7 +6,7 @@ use proc_macro2::TokenStream; use rustc_hash::{FxHashMap, FxHashSet}; use crate::{ - codegen::{generate_header, CodegenBase, LateCtx}, + codegen::{generate_rust_header, CodegenBase, LateCtx}, schema::TypeDef, Result, }; @@ -44,7 +44,7 @@ pub trait Derive: CodegenBase { // Standard methods fn template(module_paths: Vec<&str>, impls: TokenStream) -> TokenStream { - let header = generate_header(Self::file_path()); + let header = generate_rust_header(Self::file_path()); let prelude = Self::prelude(); // from `x::y::z` to `crate::y::z::*` diff --git a/tasks/ast_tools/src/generators/mod.rs b/tasks/ast_tools/src/generators/mod.rs index 6159a42f9..8667af08c 100644 --- a/tasks/ast_tools/src/generators/mod.rs +++ b/tasks/ast_tools/src/generators/mod.rs @@ -4,7 +4,7 @@ use proc_macro2::TokenStream; use quote::quote; use crate::{ - codegen::{generate_header, CodegenBase, LateCtx}, + codegen::{generate_javascript_header, generate_rust_header, CodegenBase, LateCtx}, Result, }; @@ -23,7 +23,7 @@ pub use visit::{VisitGenerator, VisitMutGenerator}; #[derive(Debug, Clone)] pub enum GeneratorOutput { Rust { path: PathBuf, tokens: TokenStream }, - Text { path: PathBuf, content: String }, + Javascript { path: PathBuf, code: String }, } pub trait Generator: CodegenBase { @@ -36,12 +36,18 @@ pub trait Generator: CodegenBase { fn output(&mut self, ctx: &LateCtx) -> Result { let mut output = self.generate(ctx); - if let GeneratorOutput::Rust { tokens, .. } = &mut output { - let header = generate_header(Self::file_path()); - *tokens = quote! { - #header - #tokens - }; + match &mut output { + GeneratorOutput::Rust { tokens, .. } => { + let header = generate_rust_header(Self::file_path()); + *tokens = quote! { + #header + #tokens + }; + } + GeneratorOutput::Javascript { code: content, .. } => { + let header = generate_javascript_header(Self::file_path()); + *content = format!("{header}{content}"); + } } Ok(output) diff --git a/tasks/ast_tools/src/generators/typescript.rs b/tasks/ast_tools/src/generators/typescript.rs index d48338876..56b5cf9ec 100644 --- a/tasks/ast_tools/src/generators/typescript.rs +++ b/tasks/ast_tools/src/generators/typescript.rs @@ -24,14 +24,7 @@ define_generator!(TypescriptGenerator); impl Generator for TypescriptGenerator { fn generate(&mut self, ctx: &LateCtx) -> GeneratorOutput { - let file = file!().replace('\\', "/"); - let mut content = format!( - "\ - // Auto-generated code, DO NOT EDIT DIRECTLY!\n\ - // To edit this generated file you have to edit `{file}`\n\n\ - {CUSTOM_TYPESCRIPT}\n\ - " - ); + let mut code = format!("{CUSTOM_TYPESCRIPT}\n"); for def in ctx.schema() { if !def.generates_derive("ESTree") { @@ -43,12 +36,13 @@ impl Generator for TypescriptGenerator { }; let Some(ts_type_def) = ts_type_def else { continue }; - content.push_str(&ts_type_def); - content.push_str("\n\n"); + code.push_str(&ts_type_def); + code.push_str("\n\n"); } - GeneratorOutput::Text { + + GeneratorOutput::Javascript { path: output(crate::TYPESCRIPT_PACKAGE, "types.d.ts"), - content: format_typescript(&content), + code: format_typescript(&code), } } }