tree-sitter-parsers 0.0.2

Preinstallation of tree-sitter parsers of multiple languages for Rust projects
Documentation
extern crate cc;

use std::path::PathBuf;
use std::fs;
use std::env::{var, set_var};

fn add_languages() {
    let host = var("HOST").unwrap();
    let paths = fs::read_dir("./").unwrap();
    for entry in paths {
        if let Ok(entry) = entry {
            let p = entry.path();
            let s = &p.to_string_lossy();
            if entry.file_type().unwrap().is_dir() && s.starts_with("./tree-sitter-") {
                let v: Vec<&str> = s.strip_prefix("./tree-sitter-").unwrap().split(|c: char| c.is_numeric()).collect();
                let mut lang: &str = v[0].strip_suffix("-").unwrap();
                if lang == "c-sharp" {
                    lang = "c_sharp";
                }
                let path: PathBuf = std::fs::canonicalize::<PathBuf>([s, "src"].iter().collect()).unwrap();
                set_var(format!("CFLAGS_{}", host), format!("-I{}", path.to_string_lossy()));
                cc::Build::new().file(path.join("parser.c")).compile(format!("tree-sitter-{}", lang).as_str());
                if path.join("scanner.cc").exists() {
                    set_var(format!("CXXFLAGS_{}", host), format!("-I{}", path.to_string_lossy()));
                    cc::Build::new().cpp(true).file(path.join("scanner.cc")).compile(format!("tree-sitter-{}-scanner", lang).as_str());
                }
                if path.join("scanner.c").exists() {
                    cc::Build::new().file(path.join("scanner.c")).compile(format!("tree-sitter-{}-scanner", lang).as_str());
                }
            }
        }
    }
}

fn main() {
    add_languages();
}