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)]));
}
sender.send(None);
}
});
service.run();