Don't cancel match updates when picker query changes

Max Brunsfeld created

The file finder often cancels an in-progress match task when
the project updates. But it still needs to take the matches
that it did find and add them to its results. So we should
not cancel the entire task, as this will cause the
partial results to be discarded.

Change summary

crates/picker/src/picker.rs | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)

Detailed changes

crates/picker/src/picker.rs 🔗

@@ -18,7 +18,6 @@ pub struct Picker<D: PickerDelegate> {
     delegate: WeakViewHandle<D>,
     query_editor: ViewHandle<Editor>,
     list_state: UniformListState,
-    update_task: Option<Task<()>>,
     max_size: Vector2F,
     confirmed: bool,
 }
@@ -136,7 +135,6 @@ impl<D: PickerDelegate> Picker<D> {
         let this = Self {
             query_editor,
             list_state: Default::default(),
-            update_task: None,
             delegate,
             max_size: vec2f(500., 420.),
             confirmed: false,
@@ -178,7 +176,7 @@ impl<D: PickerDelegate> Picker<D> {
             let query = self.query(cx);
             let update = delegate.update(cx, |d, cx| d.update_matches(query, cx));
             cx.notify();
-            self.update_task = Some(cx.spawn(|this, mut cx| async move {
+            cx.spawn(|this, mut cx| async move {
                 update.await;
                 this.update(&mut cx, |this, cx| {
                     if let Some(delegate) = this.delegate.upgrade(cx) {
@@ -191,10 +189,10 @@ impl<D: PickerDelegate> Picker<D> {
                         };
                         this.list_state.scroll_to(target);
                         cx.notify();
-                        this.update_task.take();
                     }
                 });
-            }));
+            })
+            .detach()
         }
     }