diff --git a/zed/src/worktree.rs b/zed/src/worktree.rs index 8bbf7b4e41..66c71c4e17 100644 --- a/zed/src/worktree.rs +++ b/zed/src/worktree.rs @@ -2641,6 +2641,55 @@ mod tests { ); } + #[gpui::test] + async fn test_search_worktree_without_files(cx: gpui::TestAppContext) { + let dir = temp_tree(json!({ + "root": { + "dir1": {}, + "dir2": { + "dir3": {} + } + } + })); + let tree = Worktree::open_local( + dir.path(), + Default::default(), + Arc::new(RealFs), + &mut cx.to_async(), + ) + .await + .unwrap(); + + cx.read(|cx| tree.read(cx).as_local().unwrap().scan_complete()) + .await; + let snapshot = cx.read(|cx| { + let tree = tree.read(cx); + assert_eq!(tree.file_count(), 0); + tree.snapshot() + }); + let results = cx + .read(|cx| { + match_paths( + Some(&snapshot).into_iter(), + "dir", + false, + false, + false, + 10, + Default::default(), + cx.background().clone(), + ) + }) + .await; + assert_eq!( + results + .into_iter() + .map(|result| result.path) + .collect::>>(), + vec![] + ); + } + #[gpui::test] async fn test_save_file(mut cx: gpui::TestAppContext) { let app_state = cx.read(build_app_state); diff --git a/zed/src/worktree/fuzzy.rs b/zed/src/worktree/fuzzy.rs index 776fd2177d..0fb406fc98 100644 --- a/zed/src/worktree/fuzzy.rs +++ b/zed/src/worktree/fuzzy.rs @@ -64,6 +64,15 @@ pub async fn match_paths<'a, T>( where T: Clone + Send + Iterator + 'a, { + let path_count: usize = if include_ignored { + snapshots.clone().map(Snapshot::file_count).sum() + } else { + snapshots.clone().map(Snapshot::visible_file_count).sum() + }; + if path_count == 0 { + return Vec::new(); + } + let lowercase_query = query.to_lowercase().chars().collect::>(); let query = query.chars().collect::>(); @@ -71,12 +80,6 @@ where let query = &query; let query_chars = CharBag::from(&lowercase_query[..]); - let path_count: usize = if include_ignored { - snapshots.clone().map(Snapshot::file_count).sum() - } else { - snapshots.clone().map(Snapshot::visible_file_count).sum() - }; - let num_cpus = background.num_cpus().min(path_count); let segment_size = (path_count + num_cpus - 1) / num_cpus; let mut segment_results = (0..num_cpus)