use clap::Parser as ClapParser;
use log::error;
use owl_ms_language_server::{
debugging::{init_deadlock_detection, init_logging},
Backend,
};
use std::backtrace::Backtrace;
use tower_lsp::{LspService, Server};
#[derive(ClapParser, Debug)]
#[command(version, about, long_about = None)]
struct Args {
#[arg(long, default_value_t = true)]
stdio: bool,
}
#[tokio::main]
async fn main() {
let _ = Args::parse();
std::panic::set_hook(Box::new(|info| {
let backtrace = Backtrace::force_capture();
error!("paniced with backtrace:\n{backtrace}\n{info}");
}));
init_deadlock_detection();
let (service, socket) = LspService::new(Backend::new);
init_logging(&service);
let stdin = tokio::io::stdin();
let stdout = tokio::io::stdout();
Server::new(stdin, stdout, socket).serve(service).await;
}