From 902a3d04955523363fde313cf9658de36968d9a2 Mon Sep 17 00:00:00 2001 From: overlookmotel <557937+overlookmotel@users.noreply.github.com> Date: Sun, 20 Oct 2024 21:28:59 +0000 Subject: [PATCH] feat(ast_tools): ability to generate text files (#6686) This was originally in #6404 but I pulled it out to reduce that PR's diff. Add ability (currently unused) to output arbitrary text files from `oxc_ast_tools` generators. --- tasks/ast_tools/src/codegen.rs | 5 ++++- tasks/ast_tools/src/generators/assert_layouts.rs | 2 +- tasks/ast_tools/src/generators/ast_builder.rs | 2 +- tasks/ast_tools/src/generators/ast_kind.rs | 2 +- tasks/ast_tools/src/generators/mod.rs | 13 ++++++++++--- tasks/ast_tools/src/generators/visit.rs | 4 ++-- 6 files changed, 19 insertions(+), 9 deletions(-) diff --git a/tasks/ast_tools/src/codegen.rs b/tasks/ast_tools/src/codegen.rs index 4bea7891e1655..dbddb0e219d2a 100644 --- a/tasks/ast_tools/src/codegen.rs +++ b/tasks/ast_tools/src/codegen.rs @@ -59,7 +59,10 @@ impl From<(PathBuf, TokenStream)> for SideEffect { impl From for SideEffect { fn from(output: GeneratorOutput) -> Self { - Self::from((output.path, output.tokens)) + match output { + GeneratorOutput::Rust { path, tokens } => Self::from((path, tokens)), + GeneratorOutput::Text { path, content } => Self { path, content: content.into() }, + } } } diff --git a/tasks/ast_tools/src/generators/assert_layouts.rs b/tasks/ast_tools/src/generators/assert_layouts.rs index 4eedfce06c862..153ce1a4a7042 100644 --- a/tasks/ast_tools/src/generators/assert_layouts.rs +++ b/tasks/ast_tools/src/generators/assert_layouts.rs @@ -28,7 +28,7 @@ impl Generator for AssertLayouts { let header = generated_header!(); - GeneratorOutput { + GeneratorOutput::Rust { path: output(crate::AST_CRATE, "assert_layouts.rs"), tokens: quote! { #header diff --git a/tasks/ast_tools/src/generators/ast_builder.rs b/tasks/ast_tools/src/generators/ast_builder.rs index 1b50d08a799d3..bed05974b80a7 100644 --- a/tasks/ast_tools/src/generators/ast_builder.rs +++ b/tasks/ast_tools/src/generators/ast_builder.rs @@ -34,7 +34,7 @@ impl Generator for AstBuilderGenerator { let header = generated_header!(); - GeneratorOutput { + GeneratorOutput::Rust { path: output(crate::AST_CRATE, "ast_builder.rs"), tokens: quote! { #header diff --git a/tasks/ast_tools/src/generators/ast_kind.rs b/tasks/ast_tools/src/generators/ast_kind.rs index 48f5cf0c33c6b..7498981783fa5 100644 --- a/tasks/ast_tools/src/generators/ast_kind.rs +++ b/tasks/ast_tools/src/generators/ast_kind.rs @@ -175,7 +175,7 @@ impl Generator for AstKindGenerator { let header = generated_header!(); - GeneratorOutput { + GeneratorOutput::Rust { path: output(crate::AST_CRATE, "ast_kind.rs"), tokens: quote! { #header diff --git a/tasks/ast_tools/src/generators/mod.rs b/tasks/ast_tools/src/generators/mod.rs index 870813abe2497..bd8df1f3e3d17 100644 --- a/tasks/ast_tools/src/generators/mod.rs +++ b/tasks/ast_tools/src/generators/mod.rs @@ -27,9 +27,16 @@ pub trait Generator { } #[derive(Debug, Clone)] -pub struct GeneratorOutput { - pub path: PathBuf, - pub tokens: TokenStream, +pub enum GeneratorOutput { + Rust { + path: PathBuf, + tokens: TokenStream, + }, + #[expect(dead_code)] + Text { + path: PathBuf, + content: String, + }, } macro_rules! define_generator { diff --git a/tasks/ast_tools/src/generators/visit.rs b/tasks/ast_tools/src/generators/visit.rs index fada8e5761b32..44f71d574fce7 100644 --- a/tasks/ast_tools/src/generators/visit.rs +++ b/tasks/ast_tools/src/generators/visit.rs @@ -28,7 +28,7 @@ define_generator! { impl Generator for VisitGenerator { fn generate(&mut self, ctx: &LateCtx) -> GeneratorOutput { - GeneratorOutput { + GeneratorOutput::Rust { path: output(crate::AST_CRATE, "visit.rs"), tokens: generate_visit::(ctx), } @@ -37,7 +37,7 @@ impl Generator for VisitGenerator { impl Generator for VisitMutGenerator { fn generate(&mut self, ctx: &LateCtx) -> GeneratorOutput { - GeneratorOutput { + GeneratorOutput::Rust { path: output(crate::AST_CRATE, "visit_mut.rs"), tokens: generate_visit::(ctx), }