Split language server initialization from construction
This gives clients a chance to register to notifications.
This commit is contained in:
parent
ef1ec88523
commit
7546ede288
4 changed files with 277 additions and 287 deletions
|
@ -245,7 +245,7 @@ impl LanguageRegistry {
|
|||
root_path: Arc<Path>,
|
||||
http_client: Arc<dyn HttpClient>,
|
||||
cx: &mut MutableAppContext,
|
||||
) -> Option<Task<Result<Arc<lsp::LanguageServer>>>> {
|
||||
) -> Option<Task<Result<lsp::LanguageServer>>> {
|
||||
#[cfg(any(test, feature = "test-support"))]
|
||||
if language
|
||||
.config
|
||||
|
@ -264,23 +264,26 @@ impl LanguageRegistry {
|
|||
.fake_config
|
||||
.as_ref()
|
||||
.unwrap();
|
||||
let (server, mut fake_server) = cx
|
||||
.update(|cx| {
|
||||
lsp::LanguageServer::fake_with_capabilities(
|
||||
fake_config.capabilities.clone(),
|
||||
cx,
|
||||
)
|
||||
})
|
||||
.await;
|
||||
if let Some(initalizer) = &fake_config.initializer {
|
||||
initalizer(&mut fake_server);
|
||||
let (server, mut fake_server) = cx.update(|cx| {
|
||||
lsp::LanguageServer::fake_with_capabilities(
|
||||
fake_config.capabilities.clone(),
|
||||
cx,
|
||||
)
|
||||
});
|
||||
if let Some(initializer) = &fake_config.initializer {
|
||||
initializer(&mut fake_server);
|
||||
}
|
||||
fake_config
|
||||
.servers_tx
|
||||
.clone()
|
||||
.unbounded_send(fake_server)
|
||||
.ok();
|
||||
Ok(server.clone())
|
||||
|
||||
let servers_tx = fake_config.servers_tx.clone();
|
||||
cx.background()
|
||||
.spawn(async move {
|
||||
fake_server
|
||||
.receive_notification::<lsp::notification::Initialized>()
|
||||
.await;
|
||||
servers_tx.unbounded_send(fake_server).ok();
|
||||
})
|
||||
.detach();
|
||||
Ok(server)
|
||||
}));
|
||||
}
|
||||
|
||||
|
@ -316,15 +319,13 @@ impl LanguageRegistry {
|
|||
|
||||
let server_binary_path = server_binary_path.await?;
|
||||
let server_args = adapter.server_args();
|
||||
let server = lsp::LanguageServer::new(
|
||||
lsp::LanguageServer::new(
|
||||
&server_binary_path,
|
||||
server_args,
|
||||
adapter.initialization_options(),
|
||||
&root_path,
|
||||
adapter.initialization_options(),
|
||||
background,
|
||||
)
|
||||
.await?;
|
||||
Ok(server)
|
||||
}))
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue