diff --git a/tasks/ast_tools/src/output/javascript.rs b/tasks/ast_tools/src/output/javascript.rs index 0a3411ba0457f..ab5e8e60314ef 100644 --- a/tasks/ast_tools/src/output/javascript.rs +++ b/tasks/ast_tools/src/output/javascript.rs @@ -3,22 +3,14 @@ use std::{ process::{Command, Stdio}, }; +use super::add_header; + /// Format Javascript/Typescript code, and add header. pub fn print_javascript(code: &str, generator_path: &str) -> String { - let header = generate_header(generator_path); - let code = format!("{header}{code}"); + let code = add_header(code, generator_path, "//"); format(&code) } -/// Creates a generated file warning + required information for a generated file. -fn generate_header(generator_path: &str) -> String { - // 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 `{generator_path}`\n\n" - ) -} - /// Format JS/TS code with dprint. fn format(source_text: &str) -> String { let mut dprint = Command::new("dprint") diff --git a/tasks/ast_tools/src/output/mod.rs b/tasks/ast_tools/src/output/mod.rs index d93f557d82f81..f61d2c70e81e3 100644 --- a/tasks/ast_tools/src/output/mod.rs +++ b/tasks/ast_tools/src/output/mod.rs @@ -21,6 +21,16 @@ pub fn output_path(krate: &str, path: &str) -> String { format!("{krate}/src/generated/{path}") } +/// Add a generated file warning to top of file. +fn add_header(code: &str, generator_path: &str, comment_start: &str) -> String { + // TODO: Add generation date, AST source hash, etc here. + format!( + "{comment_start} Auto-generated code, DO NOT EDIT DIRECTLY!\n\ + {comment_start} To edit this generated file you have to edit `{generator_path}`\n\n\ + {code}" + ) +} + /// An output from codegen. /// /// Can be Rust, Javascript, or other formats. diff --git a/tasks/ast_tools/src/output/rust.rs b/tasks/ast_tools/src/output/rust.rs index 8776e0d1c06a6..f862f13676dfd 100644 --- a/tasks/ast_tools/src/output/rust.rs +++ b/tasks/ast_tools/src/output/rust.rs @@ -5,32 +5,17 @@ use std::{ use lazy_static::lazy_static; use proc_macro2::TokenStream; -use quote::quote; use regex::{Captures, Regex, Replacer}; use syn::parse_file; +use super::add_header; + /// Format Rust code, and add header. pub fn print_rust(tokens: &TokenStream, generator_path: &str) -> String { - let header = generate_header(generator_path); - let tokens = quote! { - #header - #tokens - }; - - let result = prettyplease::unparse(&parse_file(tokens.to_string().as_str()).unwrap()); - let result = COMMENT_REGEX.replace_all(&result, CommentReplacer).to_string(); - rust_fmt(&result) -} - -/// Creates a generated file warning + required information for a generated file. -fn generate_header(generator_path: &str) -> TokenStream { - // TODO: Add generation date, AST source hash, etc here. - let edit_comment = format!("@ To edit this generated file you have to edit `{generator_path}`"); - quote! { - //!@ Auto-generated code, DO NOT EDIT DIRECTLY! - #![doc = #edit_comment] - //!@@line_break - } + let code = prettyplease::unparse(&parse_file(tokens.to_string().as_str()).unwrap()); + let code = COMMENT_REGEX.replace_all(&code, CommentReplacer).to_string(); + let code = add_header(&code, generator_path, "//"); + rust_fmt(&code) } fn rust_fmt(source_text: &str) -> String { diff --git a/tasks/ast_tools/src/output/yaml.rs b/tasks/ast_tools/src/output/yaml.rs index 529877b270d64..2518dc59774f8 100644 --- a/tasks/ast_tools/src/output/yaml.rs +++ b/tasks/ast_tools/src/output/yaml.rs @@ -1,14 +1,6 @@ +use super::add_header; + /// Add header to YAML. pub fn print_yaml(code: &str, generator_path: &str) -> String { - let header = generate_header(generator_path); - format!("{header}{code}") -} - -/// Creates a generated file warning + required information for a generated file. -fn generate_header(generator_path: &str) -> String { - // 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 `{generator_path}`\n\n" - ) + add_header(code, generator_path, "#") }