127 releases (74 breaking)
Uses new Rust 2024
new 0.74.0 | Jun 23, 2025 |
---|---|
0.72.3 | Jun 6, 2025 |
0.61.2 | Mar 23, 2025 |
0.44.0 | Dec 25, 2024 |
0.0.1 | Mar 30, 2023 |
#13 in #typescript-parser
113,837 downloads per month
Used in 71 crates
(9 directly)
31KB
412 lines
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();
Feature gating napi in other crates will lead to symbol not found when compiling, use this crate for common napi interfaces.
Dependencies
~2.5MB
~42K SLoC