use ast_generator::{get_build_specs, generate_files}; use cst_test_generator::generate_test_files; use std::env; use std::fs; use std::io; use std::path::Path; fn generate_parser_tests(out_dir: &Path) -> io::Result<()> { let parser_tests_dir = out_dir.join("src").join("parser").join("tests"); fs::create_dir_all(&parser_tests_dir)?; let test_suites_file = generate_test_files(Path::new("src/parser/tests"))?; let file_path = parser_tests_dir.join(&test_suites_file.file_name); fs::write(file_path, &test_suites_file.contents)?; Ok(()) } fn generate_ast_files(out_dir: &Path) -> io::Result<()> { let gen_ast_dir = out_dir.join("src").join("ast"); fs::create_dir_all(&gen_ast_dir)?; let ast_yaml = include_str!("src/parser/ast.yaml"); let build_specs = get_build_specs(ast_yaml); let generated_files = generate_files(&build_specs); for generated_file in &generated_files { let path = gen_ast_dir.join(&generated_file.name); fs::write(path, &generated_file.contents)?; } Ok(()) } fn main() -> io::Result<()> { println!("cargo:rerun-if-changed=src/parser/tests"); println!("cargo:rerun-if-changed=src/parser/ast.yaml"); println!("cargo:rerun-if-changed=src/parser/deimos.pest"); let out_dir = env::var_os("OUT_DIR").unwrap(); let out_dir_path = Path::new(&out_dir); generate_parser_tests(out_dir_path)?; generate_ast_files(out_dir_path)?; Ok(()) }