Revert "Remote LSP logs (#36709)" (#37051)

This reverts commit e2bf8e5d9c.

See
https://github.com/zed-industries/zed/pull/37050#issuecomment-3230017137
for the context: musl builds started to fail and the amount of `cfg!`s
to fix this is too large.

Instead, the lsp_log.rs has to be split and repurposed better for the
remote headless server.

Release Notes:

- N/A
This commit is contained in:
Kirill Bulatov
2025-08-27 23:24:19 +00:00
committed by GitHub
parent 9a97f9465b
commit b233df8343
29 changed files with 347 additions and 954 deletions
+2 -2
View File
@@ -1,5 +1,5 @@
mod key_context_view;
pub mod lsp_log;
mod lsp_log;
pub mod lsp_tool;
mod syntax_tree_view;
@@ -14,7 +14,7 @@ use ui::{Context, Window};
use workspace::{Item, ItemHandle, SplitDirection, Workspace};
pub fn init(cx: &mut App) {
lsp_log::init(true, cx);
lsp_log::init(cx);
syntax_tree_view::init(cx);
key_context_view::init(cx);
}
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -51,7 +51,7 @@ async fn test_lsp_logs(cx: &mut TestAppContext) {
},
);
let log_store = cx.new(|cx| LogStore::new(true, cx));
let log_store = cx.new(LogStore::new);
log_store.update(cx, |store, cx| store.add_project(&project, cx));
let _rust_buffer = project
+23 -64
View File
@@ -122,7 +122,8 @@ impl LanguageServerState {
let lsp_logs = cx
.try_global::<GlobalLogStore>()
.and_then(|lsp_logs| lsp_logs.0.upgrade());
let Some(lsp_logs) = lsp_logs else {
let lsp_store = self.lsp_store.upgrade();
let Some((lsp_logs, lsp_store)) = lsp_logs.zip(lsp_store) else {
return menu;
};
@@ -209,11 +210,10 @@ impl LanguageServerState {
};
let server_selector = server_info.server_selector();
let is_remote = self
.lsp_store
.update(cx, |lsp_store, _| lsp_store.as_remote().is_some())
.unwrap_or(false);
let has_logs = is_remote || lsp_logs.read(cx).has_server_logs(&server_selector);
// TODO currently, Zed remote does not work well with the LSP logs
// https://github.com/zed-industries/zed/issues/28557
let has_logs = lsp_store.read(cx).as_local().is_some()
&& lsp_logs.read(cx).has_server_logs(&server_selector);
let status_color = server_info
.binary_status
@@ -241,10 +241,10 @@ impl LanguageServerState {
.as_ref()
.or_else(|| server_info.binary_status.as_ref()?.message.as_ref())
.cloned();
let hover_label = if message.is_some() {
Some("View Message")
} else if has_logs {
let hover_label = if has_logs {
Some("View Logs")
} else if message.is_some() {
Some("View Message")
} else {
None
};
@@ -288,7 +288,16 @@ impl LanguageServerState {
let server_name = server_info.name.clone();
let workspace = self.workspace.clone();
move |window, cx| {
if let Some(message) = &message {
if has_logs {
lsp_logs.update(cx, |lsp_logs, cx| {
lsp_logs.open_server_trace(
workspace.clone(),
server_selector.clone(),
window,
cx,
);
});
} else if let Some(message) = &message {
let Some(create_buffer) = workspace
.update(cx, |workspace, cx| {
workspace
@@ -338,15 +347,6 @@ impl LanguageServerState {
anyhow::Ok(())
})
.detach();
} else if has_logs {
lsp_logs.update(cx, |lsp_logs, cx| {
lsp_logs.open_server_trace(
workspace.clone(),
server_selector.clone(),
window,
cx,
);
});
} else {
cx.propagate();
}
@@ -529,48 +529,26 @@ impl LspTool {
});
let lsp_store = workspace.project().read(cx).lsp_store();
let mut language_servers = LanguageServers::default();
for (_, status) in lsp_store.read(cx).language_server_statuses() {
language_servers.binary_statuses.insert(
status.name.clone(),
LanguageServerBinaryStatus {
status: BinaryStatus::None,
message: None,
},
);
}
let lsp_store_subscription =
cx.subscribe_in(&lsp_store, window, |lsp_tool, _, e, window, cx| {
lsp_tool.on_lsp_store_event(e, window, cx)
});
let server_state = cx.new(|_| LanguageServerState {
let state = cx.new(|_| LanguageServerState {
workspace: workspace.weak_handle(),
items: Vec::new(),
lsp_store: lsp_store.downgrade(),
active_editor: None,
language_servers,
language_servers: LanguageServers::default(),
});
let mut lsp_tool = Self {
server_state,
Self {
server_state: state,
popover_menu_handle,
lsp_menu: None,
lsp_menu_refresh: Task::ready(()),
_subscriptions: vec![settings_subscription, lsp_store_subscription],
};
if !lsp_tool
.server_state
.read(cx)
.language_servers
.binary_statuses
.is_empty()
{
lsp_tool.refresh_lsp_menu(true, window, cx);
}
lsp_tool
}
fn on_lsp_store_event(
@@ -730,25 +708,6 @@ impl LspTool {
}
}
}
state
.lsp_store
.update(cx, |lsp_store, cx| {
for (server_id, status) in lsp_store.language_server_statuses() {
if let Some(worktree) = status.worktree.and_then(|worktree_id| {
lsp_store
.worktree_store()
.read(cx)
.worktree_for_id(worktree_id, cx)
}) {
server_ids_to_worktrees.insert(server_id, worktree.clone());
server_names_to_worktrees
.entry(status.name.clone())
.or_default()
.insert((worktree, server_id));
}
}
})
.ok();
let mut servers_per_worktree = BTreeMap::<SharedString, Vec<ServerData>>::new();
let mut servers_without_worktree = Vec::<ServerData>::new();