harper-core 1.5.1

The language checker for developers.
Documentation
use std::{env, fs, path::PathBuf};

fn main() {
    let manifest_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap());
    let weir_rule_dir = manifest_dir.join("./src/linting/weir_rules");
    let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap());
    let dest = out_dir.join("weir_rules_generated_list.rs");

    let mut files: Vec<PathBuf> = fs::read_dir(&weir_rule_dir)
        .unwrap()
        .filter_map(Result::ok)
        .filter(|e| e.file_type().unwrap().is_file())
        .map(|e| e.path().to_path_buf())
        .collect();

    files.sort();

    let mut code = String::new();

    code.push_str("generate_boilerplate!{[");

    for file in files {
        if file
            .file_name()
            .unwrap()
            .to_string_lossy()
            .ends_with(".weir")
        {
            code.push_str(&format!(
                "{},\n",
                file.file_stem().unwrap().to_str().unwrap()
            ));
        }
    }

    code.push_str("]}");

    fs::write(&dest, code).unwrap();

    println!("cargo:rerun-if-changed={}", weir_rule_dir.display());
    println!("cargo:rerun-if-changed=build.rs");
    println!("cargo:rustc-env=WEIR_RULE_DIR={}", weir_rule_dir.display());
    println!("cargo:rustc-env=WEIR_RULE_LIST={}", dest.display());
}