Shutdown copilot server when quitting zed

Max Brunsfeld created

Change summary

crates/copilot/src/copilot.rs | 15 +++++++++++++++
1 file changed, 15 insertions(+)

Detailed changes

crates/copilot/src/copilot.rs 🔗

@@ -24,6 +24,7 @@ use std::{
     mem,
     ops::Range,
     path::{Path, PathBuf},
+    pin::Pin,
     sync::Arc,
 };
 use util::{
@@ -271,6 +272,20 @@ pub struct Copilot {
 
 impl Entity for Copilot {
     type Event = ();
+
+    fn app_will_quit(
+        &mut self,
+        _: &mut AppContext,
+    ) -> Option<Pin<Box<dyn 'static + Future<Output = ()>>>> {
+        match mem::replace(&mut self.server, CopilotServer::Disabled) {
+            CopilotServer::Running(server) => Some(Box::pin(async move {
+                if let Some(shutdown) = server.lsp.shutdown() {
+                    shutdown.await;
+                }
+            })),
+            _ => None,
+        }
+    }
 }
 
 impl Copilot {