use ariadne::{sources, ColorGenerator, Fmt, Label, Report, ReportKind};
fn main() {
let mut colors = ColorGenerator::new();
let a = colors.next();
let b = colors.next();
let c = colors.next();
Report::build(ReportKind::Error, ("b.tao", 10..14))
.with_code(3)
.with_message("Cannot add types Nat and Str".to_string())
.with_label(
Label::new(("b.tao", 10..14))
.with_message(format!("This is of type {}", "Nat".fg(a)))
.with_color(a),
)
.with_label(
Label::new(("b.tao", 17..20))
.with_message(format!("This is of type {}", "Str".fg(b)))
.with_color(b),
)
.with_label(
Label::new(("b.tao", 15..16))
.with_message(format!(
" {} and {} undergo addition here",
"Nat".fg(a),
"Str".fg(b)
))
.with_color(c)
.with_order(10),
)
.with_label(
Label::new(("a.tao", 4..8))
.with_message(format!("Original definition of {} is here", "five".fg(a)))
.with_color(a),
)
.with_note(format!(
"{} is a number and can only be added to other numbers",
"Nat".fg(a)
))
.with_note("Multiple notes are possible".to_string())
.with_note("Multiline notes\ncan be also used when the note is humongous.")
.finish()
.print(sources(vec![
("a.tao", include_str!("a.tao")),
("b.tao", include_str!("b.tao")),
]))
.unwrap();
}