diagprint 0.8.1

A Rust diagnostics lifecycle framework for structured diagnostics, rendering, remediation, CI, editors, and telemetry.
Documentation
use codespan_reporting::{
    diagnostic::{Diagnostic, Label, Severity},
    files::SimpleFiles,
};
use diagprint::{CodespanDiagnosticExt, Reporter};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let source = "fn main() {\n    let answer = 41;\n    println!(\"{answer}\");\n}\n";

    let mut files = SimpleFiles::new();

    let file_id = files.add("src/main.rs", source);

    let offset = source.find("41").expect("demo value exists");

    let diagnostic = Diagnostic {
        severity: Severity::Warning,

        code: Some("demo::answer".into()),

        message: "the answer is suspicious".into(),

        labels: vec![
            Label::primary(file_id, offset..offset + 2).with_message("expected 42"),
            Label::secondary(file_id, 0..2).with_message("inside this function"),
        ],

        notes: vec!["imported directly from codespan-reporting".into()],
    };

    let reporter = Reporter::builder().application("codespan-demo").build()?;

    let converted = diagnostic.to_diagprint(&reporter, &files);

    reporter.emit(&converted)?;

    Ok(())
}