use std::process::ExitCode;
fn main() -> ExitCode {
let args: Vec<String> = std::env::args().collect();
if args.iter().any(|a| a == "--version" || a == "-V") {
println!("rledger-lsp {}", rustledger_lsp::VERSION);
return ExitCode::SUCCESS;
}
if args.iter().any(|a| a == "--help" || a == "-h") {
println!("Beancount Language Server");
println!();
println!("Usage: rledger-lsp [OPTIONS]");
println!();
println!("Options:");
println!(" -h, --help Print help");
println!(" -V, --version Print version");
println!();
println!("The server communicates via stdio using the Language Server Protocol.");
println!();
println!("Environment variables:");
println!(" RUST_LOG Set log level (e.g., RUST_LOG=rledger_lsp=debug)");
return ExitCode::SUCCESS;
}
tracing_subscriber::fmt()
.with_env_filter(
tracing_subscriber::EnvFilter::from_default_env()
.add_directive("rledger_lsp=info".parse().unwrap()),
)
.with_writer(std::io::stderr)
.init();
match rustledger_lsp::start_stdio() {
Ok(0) => ExitCode::SUCCESS,
Ok(code) => {
#[allow(clippy::cast_sign_loss, clippy::cast_possible_truncation)]
ExitCode::from(code as u8)
}
Err(e) => {
tracing::error!("Server error: {}", e);
ExitCode::FAILURE
}
}
}