diff --git a/crates/project/src/lsp_store/log_store.rs b/crates/project/src/lsp_store/log_store.rs index 00098712bf0092a6795de2ed48c7ccf15925c555..92f8fecadd0236e899ef16781e55405dfe05f282 100644 --- a/crates/project/src/lsp_store/log_store.rs +++ b/crates/project/src/lsp_store/log_store.rs @@ -344,22 +344,7 @@ impl LogStore { enabled, toggled_log_kind, } => { - if let Some(server_state) = - log_store.get_language_server_state(*server_id) - { - if *enabled { - server_state.toggled_log_kind = Some(*toggled_log_kind); - } else { - server_state.toggled_log_kind = None; - } - } - if LogKind::Rpc == *toggled_log_kind { - if *enabled { - log_store.enable_rpc_trace_for_language_server(*server_id); - } else { - log_store.disable_rpc_trace_for_language_server(*server_id); - } - } + log_store.toggle_lsp_logs(*server_id, *enabled, *toggled_log_kind); } _ => {} } @@ -676,7 +661,6 @@ impl LogStore { } fn emit_event(&mut self, e: Event, cx: &mut Context) { - let on_headless_host = self.on_headless_host; match &e { Event::NewServerLogEntry { id, kind, text } => { if let Some(state) = self.get_language_server_state(*id) { @@ -690,9 +674,7 @@ impl LogStore { } .and_then(|lsp_store| lsp_store.read(cx).downstream_client()); if let Some((client, project_id)) = downstream_client { - if on_headless_host - || Some(LogKind::from_server_log_type(kind)) == state.toggled_log_kind - { + if Some(LogKind::from_server_log_type(kind)) == state.toggled_log_kind { client .send(proto::LanguageServerLog { project_id, @@ -709,4 +691,26 @@ impl LogStore { cx.emit(e); } + + pub fn toggle_lsp_logs( + &mut self, + server_id: LanguageServerId, + enabled: bool, + toggled_log_kind: LogKind, + ) { + if let Some(server_state) = self.get_language_server_state(server_id) { + if enabled { + server_state.toggled_log_kind = Some(toggled_log_kind); + } else { + server_state.toggled_log_kind = None; + } + } + if LogKind::Rpc == toggled_log_kind { + if enabled { + self.enable_rpc_trace_for_language_server(server_id); + } else { + self.disable_rpc_trace_for_language_server(server_id); + } + } + } } diff --git a/crates/remote_server/src/headless_project.rs b/crates/remote_server/src/headless_project.rs index 6d64202a038145fc32dc5e5896484e23f03dacef..f5cce907f956d7127aeb272cfef27ecb5f6375a7 100644 --- a/crates/remote_server/src/headless_project.rs +++ b/crates/remote_server/src/headless_project.rs @@ -17,7 +17,7 @@ use project::{ debugger::{breakpoint_store::BreakpointStore, dap_store::DapStore}, git_store::GitStore, image_store::ImageId, - lsp_store::log_store::{self, GlobalLogStore, LanguageServerKind}, + lsp_store::log_store::{self, GlobalLogStore, LanguageServerKind, LogKind}, project_settings::SettingsObserver, search::SearchQuery, task_store::TaskStore, @@ -623,26 +623,28 @@ impl HeadlessProject { async fn handle_toggle_lsp_logs( _: Entity, envelope: TypedEnvelope, - mut cx: AsyncApp, + cx: AsyncApp, ) -> Result<()> { let server_id = LanguageServerId::from_proto(envelope.payload.server_id); - let lsp_logs = cx - .update(|cx| { - cx.try_global::() - .map(|lsp_logs| lsp_logs.0.clone()) - })? - .context("lsp logs store is missing")?; - - lsp_logs.update(&mut cx, |lsp_logs, _| { - // RPC logs are very noisy and we need to toggle it on the headless server too. - // The rest of the logs for the ssh project are very important to have toggled always, - // to e.g. send language server error logs to the client before anything is toggled. - if envelope.payload.enabled { - lsp_logs.enable_rpc_trace_for_language_server(server_id); - } else { - lsp_logs.disable_rpc_trace_for_language_server(server_id); - } - })?; + cx.update(|cx| { + let log_store = cx + .try_global::() + .map(|global_log_store| global_log_store.0.clone()) + .context("lsp logs store is missing")?; + let toggled_log_kind = + match proto::toggle_lsp_logs::LogType::from_i32(envelope.payload.log_type) + .context("invalid log type")? + { + proto::toggle_lsp_logs::LogType::Log => LogKind::Logs, + proto::toggle_lsp_logs::LogType::Trace => LogKind::Trace, + proto::toggle_lsp_logs::LogType::Rpc => LogKind::Rpc, + }; + log_store.update(cx, |log_store, _| { + log_store.toggle_lsp_logs(server_id, envelope.payload.enabled, toggled_log_kind); + }); + anyhow::Ok(()) + })??; + Ok(()) }