use masl_diagnostics::diagnostic::Diagnostic;
use masl_diagnostics::severity::Severity;
pub fn print_diagnostics(diags: &[Diagnostic], source: &str, filepath: &str) {
for diag in diags {
let severity_str = match diag.severity {
Severity::Error => "error",
Severity::Warning => "warning",
Severity::Note => "note",
Severity::Help => "help",
};
println!("{}[{}]: {}", severity_str, diag.code, diag.message);
println!(
" --> {}:{}:{}",
filepath, diag.primary.span.line, diag.primary.span.column
);
let lines: Vec<&str> = source.lines().collect();
if diag.primary.span.line > 0 && diag.primary.span.line <= lines.len() {
let line_idx = diag.primary.span.line - 1;
let line = lines[line_idx];
println!(" |");
println!("{:4} | {}", diag.primary.span.line, line);
println!(
" | {}{}",
" ".repeat(diag.primary.span.column - 1),
"^".repeat(
diag.primary
.span
.end
.saturating_sub(diag.primary.span.start)
.max(1)
)
);
}
if let Some(ref help) = diag.help {
println!(" = help: {}", help);
}
println!();
}
}