Add Copilot server to LSP logs panel

This commit is contained in:
Kirill Bulatov 2023-09-19 16:25:07 +03:00
parent 5b0b2fe50b
commit 9eadfc80ba
2 changed files with 28 additions and 0 deletions

View file

@ -572,6 +572,14 @@ impl Copilot {
cx.foreground().spawn(start_task)
}
pub fn language_server(&self) -> Option<&Arc<LanguageServer>> {
if let CopilotServer::Running(server) = &self.server {
Some(&server.lsp)
} else {
None
}
}
pub fn register_buffer(&mut self, buffer: &ModelHandle<Buffer>, cx: &mut ModelContext<Self>) {
let weak_buffer = buffer.downgrade();
self.buffers.insert(weak_buffer.clone());

View file

@ -108,6 +108,7 @@ pub struct Project {
active_entry: Option<ProjectEntryId>,
buffer_ordered_messages_tx: mpsc::UnboundedSender<BufferOrderedMessage>,
languages: Arc<LanguageRegistry>,
supplementary_language_servers: HashMap<LanguageServerId, Arc<LanguageServer>>,
language_servers: HashMap<LanguageServerId, LanguageServerState>,
language_server_ids: HashMap<(WorktreeId, LanguageServerName), LanguageServerId>,
language_server_statuses: BTreeMap<LanguageServerId, LanguageServerStatus>,
@ -647,6 +648,7 @@ impl Project {
fs,
next_entry_id: Default::default(),
next_diagnostic_group_id: Default::default(),
supplementary_language_servers: HashMap::default(),
language_servers: Default::default(),
language_server_ids: Default::default(),
language_server_statuses: Default::default(),
@ -723,6 +725,7 @@ impl Project {
remote_id,
replica_id,
}),
supplementary_language_servers: HashMap::default(),
language_servers: Default::default(),
language_server_ids: Default::default(),
language_server_statuses: response
@ -1915,6 +1918,7 @@ impl Project {
self.detect_language_for_buffer(buffer, cx);
self.register_buffer_with_language_servers(buffer, cx);
self.register_buffer_with_copilot(buffer, cx);
self.register_copilot_language_server(cx);
cx.observe_release(buffer, |this, buffer, cx| {
if let Some(file) = File::from_dyn(buffer.file()) {
if file.is_local() {
@ -2067,6 +2071,20 @@ impl Project {
}
}
fn register_copilot_language_server(&mut self, cx: &mut ModelContext<Self>) {
if let Some(copilot_language_server) =
Copilot::global(cx).and_then(|copilot| copilot.read(cx).language_server())
{
let new_server_id = copilot_language_server.server_id();
if let hash_map::Entry::Vacant(v) =
self.supplementary_language_servers.entry(new_server_id)
{
v.insert(Arc::clone(copilot_language_server));
cx.emit(Event::LanguageServerAdded(new_server_id))
}
}
}
async fn send_buffer_ordered_messages(
this: WeakModelHandle<Self>,
rx: UnboundedReceiver<BufferOrderedMessage>,
@ -7945,6 +7963,8 @@ impl Project {
pub fn language_server_for_id(&self, id: LanguageServerId) -> Option<Arc<LanguageServer>> {
if let LanguageServerState::Running { server, .. } = self.language_servers.get(&id)? {
Some(server.clone())
} else if let Some(server) = self.supplementary_language_servers.get(&id) {
Some(Arc::clone(server))
} else {
None
}