Do not resubscribe for Copilot logs events
Copilot sends multiple events about its LSP server readiness, not necessarily recreating the server from scratch (e.g. due to re-sign in action). Avoid re-adding same log subscriptions on the same LSP server, which causes panics.
This commit is contained in:
parent
a5e055f8a5
commit
d61565d227
2 changed files with 11 additions and 0 deletions
|
@ -181,6 +181,13 @@ impl LogStore {
|
||||||
});
|
});
|
||||||
|
|
||||||
let server = project.read(cx).language_server_for_id(id);
|
let server = project.read(cx).language_server_for_id(id);
|
||||||
|
if let Some(server) = server.as_deref() {
|
||||||
|
if server.has_notification_handler::<lsp::notification::LogMessage>() {
|
||||||
|
// Another event wants to re-add the server that was already added and subscribed to, avoid doing it again.
|
||||||
|
return Some(server_state.log_buffer.clone());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let weak_project = project.downgrade();
|
let weak_project = project.downgrade();
|
||||||
let io_tx = self.io_tx.clone();
|
let io_tx = self.io_tx.clone();
|
||||||
server_state._io_logs_subscription = server.as_ref().map(|server| {
|
server_state._io_logs_subscription = server.as_ref().map(|server| {
|
||||||
|
|
|
@ -605,6 +605,10 @@ impl LanguageServer {
|
||||||
self.notification_handlers.lock().remove(T::METHOD);
|
self.notification_handlers.lock().remove(T::METHOD);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn has_notification_handler<T: notification::Notification>(&self) -> bool {
|
||||||
|
self.notification_handlers.lock().contains_key(T::METHOD)
|
||||||
|
}
|
||||||
|
|
||||||
#[must_use]
|
#[must_use]
|
||||||
pub fn on_custom_notification<Params, F>(&self, method: &'static str, mut f: F) -> Subscription
|
pub fn on_custom_notification<Params, F>(&self, method: &'static str, mut f: F) -> Subscription
|
||||||
where
|
where
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue