Only show ssh logs when toggled (#43445)

Same as in collab projects.

Release Notes:

- N/A
This commit is contained in:
Kirill Bulatov
2025-11-25 08:25:49 +00:00
committed by GitHub
parent 303c23cf1e
commit e6fe95b4f2
2 changed files with 44 additions and 38 deletions
+24 -20
View File
@@ -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<Self>) {
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);
}
}
}
}
+20 -18
View File
@@ -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<Self>,
envelope: TypedEnvelope<proto::ToggleLspLogs>,
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::<GlobalLogStore>()
.map(|lsp_logs| lsp_logs.0.clone())
})?
.context("lsp logs store is missing")?;
cx.update(|cx| {
let log_store = cx
.try_global::<GlobalLogStore>()
.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(())
})??;
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);
}
})?;
Ok(())
}