Return prettier entry back to LSP logs (#11563)

Fixes prettier entries disappeared after
https://github.com/zed-industries/zed/pull/10788

Release Notes:

- N/A
This commit is contained in:
Kirill Bulatov 2024-05-08 18:21:43 +03:00 committed by GitHub
parent 5c2ec1705d
commit ffa2d90dc3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -35,14 +35,27 @@ struct ProjectState {
} }
struct LanguageServerState { struct LanguageServerState {
name: LanguageServerName, kind: LanguageServerKind,
log_messages: VecDeque<String>, log_messages: VecDeque<String>,
rpc_state: Option<LanguageServerRpcState>, rpc_state: Option<LanguageServerRpcState>,
project: Option<WeakModel<Project>>,
_io_logs_subscription: Option<lsp::Subscription>, _io_logs_subscription: Option<lsp::Subscription>,
_lsp_logs_subscription: Option<lsp::Subscription>, _lsp_logs_subscription: Option<lsp::Subscription>,
} }
enum LanguageServerKind {
Local { project: WeakModel<Project> },
Global { name: LanguageServerName },
}
impl LanguageServerKind {
fn project(&self) -> Option<&WeakModel<Project>> {
match self {
Self::Local { project } => Some(project),
Self::Global { .. } => None,
}
}
}
struct LanguageServerRpcState { struct LanguageServerRpcState {
rpc_messages: VecDeque<String>, rpc_messages: VecDeque<String>,
last_message_kind: Option<MessageKind>, last_message_kind: Option<MessageKind>,
@ -138,8 +151,9 @@ impl LogStore {
}, },
)); ));
this.add_language_server( this.add_language_server(
None, LanguageServerKind::Global {
LanguageServerName(Arc::from("copilot")), name: LanguageServerName(Arc::from("copilot")),
},
server.clone(), server.clone(),
cx, cx,
); );
@ -180,18 +194,16 @@ impl LogStore {
cx.observe_release(project, move |this, _, _| { cx.observe_release(project, move |this, _, _| {
this.projects.remove(&weak_project); this.projects.remove(&weak_project);
this.language_servers this.language_servers
.retain(|_, state| state.project.as_ref() != Some(&weak_project)); .retain(|_, state| state.kind.project() != Some(&weak_project));
}), }),
cx.subscribe(project, |this, project, event, cx| match event { cx.subscribe(project, |this, project, event, cx| match event {
project::Event::LanguageServerAdded(id) => { project::Event::LanguageServerAdded(id) => {
let read_project = project.read(cx); let read_project = project.read(cx);
if let Some((server, adapter)) = read_project if let Some(server) = read_project.language_server_for_id(*id) {
.language_server_for_id(*id)
.zip(read_project.language_server_adapter_for_id(*id))
{
this.add_language_server( this.add_language_server(
Some(&project.downgrade()), LanguageServerKind::Local {
adapter.name.clone(), project: project.downgrade(),
},
server, server,
cx, cx,
); );
@ -219,8 +231,7 @@ impl LogStore {
fn add_language_server( fn add_language_server(
&mut self, &mut self,
project: Option<&WeakModel<Project>>, kind: LanguageServerKind,
name: LanguageServerName,
server: Arc<LanguageServer>, server: Arc<LanguageServer>,
cx: &mut ModelContext<Self>, cx: &mut ModelContext<Self>,
) -> Option<&mut LanguageServerState> { ) -> Option<&mut LanguageServerState> {
@ -230,9 +241,8 @@ impl LogStore {
.or_insert_with(|| { .or_insert_with(|| {
cx.notify(); cx.notify();
LanguageServerState { LanguageServerState {
name, kind,
rpc_state: None, rpc_state: None,
project: project.cloned(),
log_messages: VecDeque::with_capacity(MAX_STORED_LOG_ENTRIES), log_messages: VecDeque::with_capacity(MAX_STORED_LOG_ENTRIES),
_io_logs_subscription: None, _io_logs_subscription: None,
_lsp_logs_subscription: None, _lsp_logs_subscription: None,
@ -300,23 +310,20 @@ impl LogStore {
fn server_ids_for_project<'a>( fn server_ids_for_project<'a>(
&'a self, &'a self,
project: &'a WeakModel<Project>, lookup_project: &'a WeakModel<Project>,
) -> impl Iterator<Item = LanguageServerId> + 'a { ) -> impl Iterator<Item = LanguageServerId> + 'a {
[].into_iter() self.language_servers
.chain(self.language_servers.iter().filter_map(|(id, state)| { .iter()
if state.project.as_ref() == Some(project) { .filter_map(move |(id, state)| match &state.kind {
return Some(*id); LanguageServerKind::Local { project } => {
} else { if project == lookup_project {
None Some(*id)
} else {
None
}
} }
})) LanguageServerKind::Global { .. } => Some(*id),
.chain(self.language_servers.iter().filter_map(|(id, state)| { })
if state.project.is_none() {
return Some(*id);
} else {
None
}
}))
} }
fn enable_rpc_trace_for_language_server( fn enable_rpc_trace_for_language_server(
@ -408,7 +415,7 @@ impl LspLogView {
.read(cx) .read(cx)
.language_servers .language_servers
.iter() .iter()
.find(|(_, server)| server.project == Some(project.downgrade())) .find(|(_, server)| server.kind.project() == Some(&project.downgrade()))
.map(|(id, _)| *id); .map(|(id, _)| *id);
let weak_project = project.downgrade(); let weak_project = project.downgrade();
@ -562,21 +569,18 @@ impl LspLogView {
log_store log_store
.language_servers .language_servers
.iter() .iter()
.filter_map(|(server_id, state)| { .filter_map(|(server_id, state)| match &state.kind {
if state.project.is_none() { LanguageServerKind::Global { name } => Some(LogMenuItem {
Some(LogMenuItem { server_id: *server_id,
server_id: *server_id, server_name: name.clone(),
server_name: state.name.clone(), worktree_root_name: "supplementary".to_string(),
worktree_root_name: "supplementary".to_string(), rpc_trace_enabled: state.rpc_state.is_some(),
rpc_trace_enabled: state.rpc_state.is_some(), rpc_trace_selected: self.is_showing_rpc_trace
rpc_trace_selected: self.is_showing_rpc_trace && self.current_server_id == Some(*server_id),
&& self.current_server_id == Some(*server_id), logs_selected: !self.is_showing_rpc_trace
logs_selected: !self.is_showing_rpc_trace && self.current_server_id == Some(*server_id),
&& self.current_server_id == Some(*server_id), }),
}) _ => None,
} else {
None
}
}), }),
) )
.collect::<Vec<_>>(); .collect::<Vec<_>>();