dictator-rust 0.25.1

Rust language decree for Dictator structural linter
Documentation
use super::*;
use dictator_decree_abi::Diagnostics;

#[test]
fn detects_unnecessary_mod_rs() {
    use std::fs;
    use std::io::Write;

    let temp_dir = std::env::temp_dir().join("dictator_test_mod_rs_solo");
    let _ = fs::remove_dir_all(&temp_dir);
    fs::create_dir_all(&temp_dir).unwrap();

    let mod_rs_path = temp_dir.join("mod.rs");
    let mut file = fs::File::create(&mod_rs_path).unwrap();
    writeln!(file, "// Solo mod.rs").unwrap();

    let mut diags = Diagnostics::new();
    check_mod_rs_structure(mod_rs_path.to_str().unwrap(), &mut diags);

    assert!(
        diags.iter().any(|d| d.rule == "rust/unnecessary-mod-rs"),
        "Should detect mod.rs with no siblings"
    );

    fs::remove_dir_all(&temp_dir).unwrap();
}

#[test]
fn accepts_mod_rs_with_siblings() {
    use std::fs;
    use std::io::Write;

    let temp_dir = std::env::temp_dir().join("dictator_test_mod_rs_with_siblings");
    let _ = fs::remove_dir_all(&temp_dir);
    fs::create_dir_all(&temp_dir).unwrap();

    let mod_rs_path = temp_dir.join("mod.rs");
    let mut file = fs::File::create(&mod_rs_path).unwrap();
    writeln!(file, "// mod.rs with siblings").unwrap();

    let sibling_path = temp_dir.join("submodule.rs");
    let mut sibling = fs::File::create(&sibling_path).unwrap();
    writeln!(sibling, "// Sibling module").unwrap();

    let mut diags = Diagnostics::new();
    check_mod_rs_structure(mod_rs_path.to_str().unwrap(), &mut diags);

    assert!(
        !diags.iter().any(|d| d.rule == "rust/unnecessary-mod-rs"),
        "Should accept mod.rs with sibling modules"
    );

    fs::remove_dir_all(&temp_dir).unwrap();
}

#[test]
fn ignores_non_mod_rs_files() {
    use std::fs;
    use std::io::Write;

    let temp_dir = std::env::temp_dir().join("dictator_test_regular_rs");
    let _ = fs::remove_dir_all(&temp_dir);
    fs::create_dir_all(&temp_dir).unwrap();

    let lib_rs_path = temp_dir.join("lib.rs");
    let mut file = fs::File::create(&lib_rs_path).unwrap();
    writeln!(file, "// Regular file").unwrap();

    let mut diags = Diagnostics::new();
    check_mod_rs_structure(lib_rs_path.to_str().unwrap(), &mut diags);

    assert!(diags.is_empty(), "Should not check non-mod.rs files");

    fs::remove_dir_all(&temp_dir).unwrap();
}