mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-01 11:31:15 +00:00

The issue was windows specific -- cancellation caused collection of bracktraces at some point, and that was slow on windows. The proper fix here is to make sure that we don't collect bracktraces unnecessary (which we currently do due to failure), but, as a temporary fix, let's just not force their collection in the first place!
62 lines
2.1 KiB
Rust
62 lines
2.1 KiB
Rust
use serde::Deserialize;
|
|
use flexi_logger::{Duplicate, Logger};
|
|
use gen_lsp_server::{run_server, stdio_transport};
|
|
|
|
use ra_lsp_server::{Result, InitializationOptions};
|
|
use ra_prof;
|
|
|
|
fn main() -> Result<()> {
|
|
// re-enable and verify on windows after #1400
|
|
// std::env::set_var("RUST_BACKTRACE", "short");
|
|
let logger = Logger::with_env_or_str("error").duplicate_to_stderr(Duplicate::All);
|
|
match std::env::var("RA_LOG_DIR") {
|
|
Ok(ref v) if v == "1" => logger.log_to_file().directory("log").start()?,
|
|
_ => logger.start()?,
|
|
};
|
|
ra_prof::set_filter(match std::env::var("RA_PROFILE") {
|
|
Ok(spec) => ra_prof::Filter::from_spec(&spec),
|
|
Err(_) => ra_prof::Filter::disabled(),
|
|
});
|
|
log::info!("lifecycle: server started");
|
|
match ::std::panic::catch_unwind(main_inner) {
|
|
Ok(res) => {
|
|
log::info!("lifecycle: terminating process with {:?}", res);
|
|
res
|
|
}
|
|
Err(_) => {
|
|
log::error!("server panicked");
|
|
failure::bail!("server panicked")
|
|
}
|
|
}
|
|
}
|
|
|
|
fn main_inner() -> Result<()> {
|
|
let (receiver, sender, threads) = stdio_transport();
|
|
let cwd = std::env::current_dir()?;
|
|
run_server(ra_lsp_server::server_capabilities(), receiver, sender, |params, r, s| {
|
|
let root = params.root_uri.and_then(|it| it.to_file_path().ok()).unwrap_or(cwd);
|
|
|
|
let workspace_roots = params
|
|
.workspace_folders
|
|
.map(|workspaces| {
|
|
workspaces
|
|
.into_iter()
|
|
.filter_map(|it| it.uri.to_file_path().ok())
|
|
.collect::<Vec<_>>()
|
|
})
|
|
.filter(|workspaces| !workspaces.is_empty())
|
|
.unwrap_or_else(|| vec![root]);
|
|
|
|
let opts = params
|
|
.initialization_options
|
|
.and_then(|v| InitializationOptions::deserialize(v).ok())
|
|
.unwrap_or_default();
|
|
|
|
ra_lsp_server::main_loop(workspace_roots, opts, r, s)
|
|
})?;
|
|
log::info!("shutting down IO...");
|
|
threads.join()?;
|
|
log::info!("... IO is down");
|
|
Ok(())
|
|
}
|