zigsyn 0.1.0

A pure Rust Zig syntax scanner and parser.
Documentation
use std::path::Path;

#[test]
fn parses_zig_stdlib_when_configured() {
    let Ok(src_dir) = std::env::var("ZIG_SRC_DIR") else {
        return;
    };

    let std_dir = Path::new(&src_dir).join("lib/std");
    if !std_dir.exists() {
        return;
    }

    let mut stack = vec![std_dir];
    while let Some(dir) = stack.pop() {
        for entry in std::fs::read_dir(&dir).unwrap() {
            let entry = entry.unwrap();
            let path = entry.path();
            if path.is_dir() {
                let name = path.file_name().and_then(|name| name.to_str());
                if matches!(name, Some("zig-cache" | "zig-out")) {
                    continue;
                }
                stack.push(path);
            } else if path.extension().and_then(|ext| ext.to_str()) == Some("zig") {
                zigsyn::parse_file(&path).unwrap_or_else(|err| {
                    panic!("failed to parse {}: {err}", path.display());
                });
            }
        }
    }
}