41 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
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(())
 | 
						|
}
 |