aboutsummaryrefslogtreecommitdiff
path: root/helix-lsp/src/lib.rs
diff options
context:
space:
mode:
authorBlaž Hrastnik2021-08-31 07:48:59 +0000
committerBlaž Hrastnik2021-09-06 06:25:46 +0000
commit5a558e0d8e20eb5b5d474e0f27fd51f4c633dd80 (patch)
treefd1ee5d0debba71fdf31694b8f31ad4bd22e9b5d /helix-lsp/src/lib.rs
parentc3a58cdadd8be85b79d773122e807862a3da3a2f (diff)
lsp: Delay requests & notifications until initialization is complete
Diffstat (limited to 'helix-lsp/src/lib.rs')
-rw-r--r--helix-lsp/src/lib.rs11
1 files changed, 5 insertions, 6 deletions
diff --git a/helix-lsp/src/lib.rs b/helix-lsp/src/lib.rs
index a118239f..3a761ad0 100644
--- a/helix-lsp/src/lib.rs
+++ b/helix-lsp/src/lib.rs
@@ -312,7 +312,7 @@ impl Registry {
Entry::Vacant(entry) => {
// initialize a new client
let id = self.counter.fetch_add(1, Ordering::Relaxed);
- let (client, incoming) = Client::start(
+ let (client, incoming, initialize_notify) = Client::start(
&config.command,
&config.args,
serde_json::from_str(language_config.config.as_deref().unwrap_or("")).ok(),
@@ -322,9 +322,9 @@ impl Registry {
let client = Arc::new(client);
let _client = client.clone();
- let initialize = tokio::spawn(async move {
+ // Initialize the client asynchronously
+ tokio::spawn(async move {
use futures_util::TryFutureExt;
-
let value = _client
.capabilities
.get_or_try_init(|| {
@@ -341,10 +341,9 @@ impl Registry {
.notify::<lsp::notification::Initialized>(lsp::InitializedParams {})
.await
.unwrap();
- });
- // TODO: remove this block
- futures_executor::block_on(initialize).map_err(|_| anyhow::anyhow!("bail"))?;
+ initialize_notify.notify_one();
+ });
entry.insert((id, client.clone()));
Ok(client)