use clap::Parser as ClapParser;
use log::error;
use owl_ms_language_server::{debugging::init_logging, web::UreqClient, 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}");
}));
let http_client = Box::new(UreqClient::default());
let (service, socket) = LspService::new(|client| Backend::new(client, http_client));
init_logging(&service);
let stdin = tokio::io::stdin();
let stdout = tokio::io::stdout();
Server::new(stdin, stdout, socket).serve(service).await;
}