Start feeding buffers back even before we have all of them

Piotr Osiewicz created

Change summary

crates/project/src/project_search.rs | 11 +++++------
1 file changed, 5 insertions(+), 6 deletions(-)

Detailed changes

crates/project/src/project_search.rs 🔗

@@ -11,7 +11,7 @@ use std::{
 use anyhow::Context;
 use collections::HashSet;
 use fs::Fs;
-use futures::{SinkExt, StreamExt, select_biased};
+use futures::{SinkExt, StreamExt, select_biased, stream::FuturesOrdered};
 use gpui::{App, AsyncApp, Entity, Task};
 use language::{Buffer, BufferSnapshot};
 use postage::oneshot;
@@ -254,16 +254,15 @@ impl Search {
         let mut rx = pin!(rx.ready_chunks(64));
         _ = maybe!(async move {
             while let Some(requested_paths) = rx.next().await {
-                let buffers = self.buffer_store.update(&mut cx, |this, cx| {
+                let mut buffers = self.buffer_store.update(&mut cx, |this, cx| {
                     requested_paths
                         .into_iter()
                         .map(|path| this.open_buffer(path, cx))
-                        .collect::<Vec<_>>()
+                        .collect::<FuturesOrdered<_>>()
                 })?;
-                let buffers = futures::future::join_all(buffers).await;
 
-                for b in buffers {
-                    if let Some(buffer) = b.log_err() {
+                while let Some(buffer) = buffers.next().await {
+                    if let Some(buffer) = buffer.log_err() {
                         find_all_matches_tx.send(buffer).await?;
                     }
                 }