use std::env;
use std::fs;
use std::path::Path;
#[allow(unused_imports)]
use leekscript_rs::{analyze, analyze_with_signatures, parse, parse_signatures};
fn main() {
let source = if let Some(path) = env::args().nth(1) {
let p = Path::new(&path);
fs::read_to_string(p).unwrap_or_else(|e| {
eprintln!("read {}: {}", p.display(), e);
std::process::exit(1);
})
} else {
r#"
function add(integer a, integer b) -> integer { return a + b; }
integer x = add(1, 2);
return x;
"#
.to_string()
};
let root = match parse(&source) {
Ok(Some(r)) => r,
Ok(None) => {
eprintln!("Parse returned None (empty or no root)");
std::process::exit(1);
}
Err(e) => {
eprintln!("Parse error: {}", e);
std::process::exit(1);
}
};
let result = analyze(&root);
if result.is_valid() {
println!("Validation OK (no errors)");
if !result.diagnostics.is_empty() {
for d in &result.diagnostics {
println!(" [{:?}] {}", d.severity, d.message);
}
}
} else {
println!(
"Validation failed ({} diagnostic(s)):",
result.diagnostics.len()
);
for d in &result.diagnostics {
println!(
" [{:?}] {} (span {}..{})",
d.severity, d.message, d.span.start, d.span.end
);
}
std::process::exit(1);
}
}