Update old usages of `ctx.spawn` to detach the associated task

Antonio Scandurra created

This lets us open buffers and renders tabs and editors correctly, modulo
a small bug when rendering the gutter that I am going to fix next.

Change summary

zed/src/watch.rs                    | 10 ++++++----
zed/src/workspace/workspace.rs      | 15 +++++++++------
zed/src/workspace/workspace_view.rs |  5 +++--
3 files changed, 18 insertions(+), 12 deletions(-)

Detailed changes

zed/src/watch.rs 🔗

@@ -38,16 +38,18 @@ impl<T> Receiver<T> {
 impl<T: 'static + Clone> Receiver<T> {
     pub fn notify_model_on_change<M: 'static + Entity>(&self, ctx: &mut ModelContext<M>) {
         let watch = self.clone();
-        let _ = ctx.spawn(async move { watch.updated().await }, |_, _, ctx| {
+        ctx.spawn(async move { watch.updated().await }, |_, _, ctx| {
             ctx.notify()
-        });
+        })
+        .detach();
     }
 
     pub fn notify_view_on_change<V: 'static + View>(&self, ctx: &mut ViewContext<V>) {
         let watch = self.clone();
-        let _ = ctx.spawn(async move { watch.updated().await }, |_, _, ctx| {
+        ctx.spawn(async move { watch.updated().await }, |_, _, ctx| {
             ctx.notify()
-        });
+        })
+        .detach();
     }
 }
 

zed/src/workspace/workspace.rs 🔗

@@ -161,29 +161,32 @@ impl Workspace {
 
         let (mut tx, rx) = watch::channel(None);
         self.items.insert(entry, OpenedItem::Loading(rx));
-        let _ = ctx.spawn(
+        ctx.spawn(
             buffer,
             move |me, buffer: anyhow::Result<Buffer>, ctx| match buffer {
                 Ok(buffer) => {
                     let handle = Box::new(ctx.add_model(|_| buffer)) as Box<dyn ItemHandle>;
                     me.items.insert(entry, OpenedItem::Loaded(handle.clone()));
-                    let _ = ctx.spawn(
+                    ctx.spawn(
                         async move {
                             tx.update(|value| *value = Some(Ok(handle))).await;
                         },
                         |_, _, _| {},
-                    );
+                    )
+                    .detach();
                 }
                 Err(error) => {
-                    let _ = ctx.spawn(
+                    ctx.spawn(
                         async move {
                             tx.update(|value| *value = Some(Err(Arc::new(error)))).await;
                         },
                         |_, _, _| {},
-                    );
+                    )
+                    .detach();
                 }
             },
-        );
+        )
+        .detach();
 
         self.open_entry(entry, ctx)
     }

zed/src/workspace/workspace_view.rs 🔗

@@ -176,7 +176,7 @@ impl WorkspaceView {
             Err(error) => error!("{}", error),
             Ok(item) => {
                 let settings = self.settings.clone();
-                let _ = ctx.spawn(item, move |me, item, ctx| {
+                ctx.spawn(item, move |me, item, ctx| {
                     me.loading_entries.remove(&entry);
                     match item {
                         Ok(item) => {
@@ -187,7 +187,8 @@ impl WorkspaceView {
                             error!("{}", error);
                         }
                     }
-                });
+                })
+                .detach();
             }
         }
     }