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:
parent
5c2ec1705d
commit
ffa2d90dc3
1 changed files with 50 additions and 46 deletions
|
@ -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<_>>();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue