#[tokio::main]
async fn main() {
use clap::Parser;
use xidlc::cli::Cli;
use xidlc::diagnostic::TreeSitterMietteHighlighter;
use xidlc::error::{DiagnosticListError, IdlcError};
miette::set_hook(Box::new(|_| {
Box::new(
miette::MietteHandlerOpts::new()
.with_syntax_highlighting(TreeSitterMietteHighlighter::new_idl())
.build(),
)
}))
.expect("failed to install miette hook");
tracing_subscriber::fmt()
.with_env_filter(tracing_subscriber::EnvFilter::from_default_env())
.with_writer(std::io::stderr)
.init();
if let Err(err) = Cli::parse().run().await {
match err {
IdlcError::Diagnostics(DiagnosticListError { diagnostics }) => {
for (index, diagnostic) in diagnostics.into_iter().enumerate() {
if index > 0 {
eprintln!();
}
let report: miette::Report = diagnostic.into();
eprintln!("{:?}", report);
}
}
other => {
tracing::error!("idlc: {other}");
}
}
std::process::exit(1);
}
}