oxc_diagnostics 0.61.2

A collection of JavaScript tools written in Rust.
Documentation

Error data types and utilities for handling/reporting them.

The main type in this module is [OxcDiagnostic], which is used by all other oxc tools to report problems. It implements [miette]'s [Diagnostic] trait, making it compatible with other tooling you may be using.

use oxc_diagnostics::{OxcDiagnostic, Result};
fn my_tool() -> Result<()> {
    try_something().map_err(|e| OxcDiagnostic::error(e.to_string()))?;
    Ok(())
}

See the [miette] documentation for more information on how to interact with diagnostics.

Reporting

If you are writing your own tools that may produce their own errors, you can use [DiagnosticService] to format and render them to a string or a stream. It can receive [Error]s over a multi-producer, single consumer

use std::{sync::Arc, thread};
use oxc_diagnostics::{DiagnosticService, Error, OxcDiagnostic};

fn my_tool() -> Result<()> {
    try_something().map_err(|e| OxcDiagnostic::error(e.to_string()))?;
    Ok(())
}

let mut service = DiagnosticService::default();
let mut sender = service.sender().clone();

thread::spawn(move || {
    let file_path_being_processed = PathBuf::from("file.txt");
    let file_being_processed = Arc::new(NamedSource::new(file_path_being_processed.clone()));

    for _ in 0..10 {
        if let Err(diagnostic) = my_tool() {
            let report = diagnostic.with_source_code(Arc::clone(&file_being_processed));
            sender.send(Some(file_path_being_processed, vec![Error::new(e)]));
        }
        // send None to stop the service
        sender.send(None);
    }
});

service.run();