///|
fn print_usage() -> Unit {
println("Usage: moon run cmd/check ")
println(
"Exit codes: 0 valid, 1 diagnostics found, 2 usage or directory error",
)
}
///|
fn print_diagnostic(problem : @pc.Diagnostic) -> Unit {
println(
"\{problem.code} \{problem.location.source}:\{problem.location.line}:\{problem.location.column} \{problem.message}",
)
}
///|
fn main {
let args = @env.args()
if args.length() == 2 && (args[1] == "--help" || args[1] == "-h") {
print_usage()
return
}
if args.length() != 2 || args[1].has_prefix("-") {
print_usage()
@sys.exit(2)
}
let directory = args[1]
try {
let loaded = @loader.load_directory(directory)
let diagnostics = loaded.diagnostics.copy()
for
problem in loaded.packages.check_all(
unavailable=loaded.diagnostics_by_package,
) {
if !diagnostics.any(existing => existing == problem) {
diagnostics.push(problem)
}
}
for problem in diagnostics {
print_diagnostic(problem)
}
println(
"Checked \{loaded.package_ids.length()} packages from \{loaded.file_count} .pc files; \{diagnostics.length()} diagnostics.",
)
if !diagnostics.is_empty() {
@sys.exit(1)
}
} catch {
@fs.IOError(message) => {
println("Could not check \{directory}: \{message}")
@sys.exit(2)
}
}
}