Capture language server stderr during startup/init and log if failure
This commit is contained in:
parent
1936ba5e30
commit
170ebd8221
8 changed files with 68 additions and 38 deletions
|
@ -52,6 +52,7 @@ use lsp::{
|
|||
};
|
||||
use lsp_command::*;
|
||||
use node_runtime::NodeRuntime;
|
||||
use parking_lot::Mutex;
|
||||
use postage::watch;
|
||||
use prettier::{LocateStart, Prettier};
|
||||
use project_settings::{LspSettings, ProjectSettings};
|
||||
|
@ -2726,7 +2727,9 @@ impl Project {
|
|||
return;
|
||||
}
|
||||
|
||||
let stderr_capture = Arc::new(Mutex::new(Some(String::new())));
|
||||
let pending_server = match self.languages.create_pending_language_server(
|
||||
stderr_capture.clone(),
|
||||
language.clone(),
|
||||
adapter.clone(),
|
||||
worktree_path,
|
||||
|
@ -2763,10 +2766,14 @@ impl Project {
|
|||
.await;
|
||||
|
||||
match result {
|
||||
Ok(server) => server,
|
||||
Ok(server) => {
|
||||
stderr_capture.lock().take();
|
||||
Some(server)
|
||||
}
|
||||
|
||||
Err(err) => {
|
||||
log::error!("failed to start language server {:?}: {}", server_name, err);
|
||||
log::error!("server stderr: {:?}", stderr_capture.lock().take());
|
||||
|
||||
if let Some(this) = this.upgrade(&cx) {
|
||||
if let Some(container_dir) = container_dir {
|
||||
|
@ -2862,20 +2869,17 @@ impl Project {
|
|||
server_id: LanguageServerId,
|
||||
key: (WorktreeId, LanguageServerName),
|
||||
cx: &mut AsyncAppContext,
|
||||
) -> Result<Option<Arc<LanguageServer>>> {
|
||||
let setup = Self::setup_pending_language_server(
|
||||
) -> Result<Arc<LanguageServer>> {
|
||||
let language_server = Self::setup_pending_language_server(
|
||||
this,
|
||||
override_initialization_options,
|
||||
pending_server,
|
||||
adapter.clone(),
|
||||
server_id,
|
||||
cx,
|
||||
);
|
||||
)
|
||||
.await?;
|
||||
|
||||
let language_server = match setup.await? {
|
||||
Some(language_server) => language_server,
|
||||
None => return Ok(None),
|
||||
};
|
||||
let this = match this.upgrade(cx) {
|
||||
Some(this) => this,
|
||||
None => return Err(anyhow!("failed to upgrade project handle")),
|
||||
|
@ -2892,7 +2896,7 @@ impl Project {
|
|||
)
|
||||
})?;
|
||||
|
||||
Ok(Some(language_server))
|
||||
Ok(language_server)
|
||||
}
|
||||
|
||||
async fn setup_pending_language_server(
|
||||
|
@ -2902,12 +2906,9 @@ impl Project {
|
|||
adapter: Arc<CachedLspAdapter>,
|
||||
server_id: LanguageServerId,
|
||||
cx: &mut AsyncAppContext,
|
||||
) -> Result<Option<Arc<LanguageServer>>> {
|
||||
) -> Result<Arc<LanguageServer>> {
|
||||
let workspace_config = cx.update(|cx| adapter.workspace_configuration(cx)).await;
|
||||
let language_server = match pending_server.task.await? {
|
||||
Some(server) => server,
|
||||
None => return Ok(None),
|
||||
};
|
||||
let language_server = pending_server.task.await?;
|
||||
|
||||
language_server
|
||||
.on_notification::<lsp::notification::PublishDiagnostics, _>({
|
||||
|
@ -2978,6 +2979,7 @@ impl Project {
|
|||
},
|
||||
)
|
||||
.detach();
|
||||
|
||||
language_server
|
||||
.on_request::<lsp::request::RegisterCapability, _, _>({
|
||||
move |params, mut cx| async move {
|
||||
|
@ -3043,6 +3045,7 @@ impl Project {
|
|||
}
|
||||
})
|
||||
.detach();
|
||||
|
||||
let mut initialization_options = adapter.adapter.initialization_options().await;
|
||||
match (&mut initialization_options, override_options) {
|
||||
(Some(initialization_options), Some(override_options)) => {
|
||||
|
@ -3062,7 +3065,7 @@ impl Project {
|
|||
)
|
||||
.ok();
|
||||
|
||||
Ok(Some(language_server))
|
||||
Ok(language_server)
|
||||
}
|
||||
|
||||
fn insert_newly_running_language_server(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue