oxc_diagnostics 0.30.4

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();