Merge 17a687a2c4
into a102b08743
This commit is contained in:
commit
6b157c520f
7 changed files with 50 additions and 12 deletions
|
@ -174,7 +174,17 @@ impl Tool for GrepTool {
|
||||||
let mut matches_found = 0;
|
let mut matches_found = 0;
|
||||||
let mut has_more_matches = false;
|
let mut has_more_matches = false;
|
||||||
|
|
||||||
'outer: while let Some(SearchResult::Buffer { buffer, ranges }) = results.next().await {
|
let mut any_file_matched_pattern = false;
|
||||||
|
'outer: while let Some(result) = results.next().await {
|
||||||
|
let (buffer, ranges) = match result {
|
||||||
|
SearchResult::Buffer { buffer, ranges } => {
|
||||||
|
(buffer,ranges)
|
||||||
|
}
|
||||||
|
SearchResult::Finished { any_file_matched_pattern: matched, .. } => {
|
||||||
|
any_file_matched_pattern = matched;
|
||||||
|
break 'outer;
|
||||||
|
}
|
||||||
|
};
|
||||||
if ranges.is_empty() {
|
if ranges.is_empty() {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -293,7 +303,10 @@ impl Tool for GrepTool {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if matches_found == 0 {
|
if !any_file_matched_pattern && input.include_pattern.is_some() {
|
||||||
|
assert_eq!(matches_found, 0, "no matches must be found if any file didn't match");
|
||||||
|
Ok("No files found matching the include pattern".to_string().into())
|
||||||
|
} else if matches_found == 0 {
|
||||||
Ok("No matches found".to_string().into())
|
Ok("No matches found".to_string().into())
|
||||||
} else if has_more_matches {
|
} else if has_more_matches {
|
||||||
Ok(format!(
|
Ok(format!(
|
||||||
|
|
|
@ -5188,10 +5188,15 @@ async fn test_project_search(
|
||||||
SearchResult::Buffer { buffer, ranges } => {
|
SearchResult::Buffer { buffer, ranges } => {
|
||||||
results.entry(buffer).or_insert(ranges);
|
results.entry(buffer).or_insert(ranges);
|
||||||
}
|
}
|
||||||
SearchResult::LimitReached => {
|
SearchResult::Finished {
|
||||||
panic!(
|
limit_reached,
|
||||||
|
any_file_matched_pattern,
|
||||||
|
} => {
|
||||||
|
assert!(
|
||||||
|
!limit_reached,
|
||||||
"Unexpectedly reached search limit in tests. If you do want to assert limit-reached, change this panic call."
|
"Unexpectedly reached search limit in tests. If you do want to assert limit-reached, change this panic call."
|
||||||
)
|
);
|
||||||
|
assert!(any_file_matched_pattern);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -3826,6 +3826,7 @@ impl Project {
|
||||||
let mut range_count = 0;
|
let mut range_count = 0;
|
||||||
let mut buffer_count = 0;
|
let mut buffer_count = 0;
|
||||||
let mut limit_reached = false;
|
let mut limit_reached = false;
|
||||||
|
let mut any_file_matched_pattern = false;
|
||||||
let query = Arc::new(query);
|
let query = Arc::new(query);
|
||||||
let chunks = matching_buffers_rx.ready_chunks(64);
|
let chunks = matching_buffers_rx.ready_chunks(64);
|
||||||
|
|
||||||
|
@ -3835,6 +3836,9 @@ impl Project {
|
||||||
// ranges in the buffer matched by the query.
|
// ranges in the buffer matched by the query.
|
||||||
let mut chunks = pin!(chunks);
|
let mut chunks = pin!(chunks);
|
||||||
'outer: while let Some(matching_buffer_chunk) = chunks.next().await {
|
'outer: while let Some(matching_buffer_chunk) = chunks.next().await {
|
||||||
|
if !matching_buffer_chunk.is_empty() {
|
||||||
|
any_file_matched_pattern = true;
|
||||||
|
}
|
||||||
let mut chunk_results = Vec::with_capacity(matching_buffer_chunk.len());
|
let mut chunk_results = Vec::with_capacity(matching_buffer_chunk.len());
|
||||||
for buffer in matching_buffer_chunk {
|
for buffer in matching_buffer_chunk {
|
||||||
let query = query.clone();
|
let query = query.clone();
|
||||||
|
@ -3871,9 +3875,12 @@ impl Project {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if limit_reached {
|
result_tx
|
||||||
result_tx.send(SearchResult::LimitReached).await?;
|
.send(SearchResult::Finished {
|
||||||
}
|
limit_reached,
|
||||||
|
any_file_matched_pattern,
|
||||||
|
})
|
||||||
|
.await?;
|
||||||
|
|
||||||
anyhow::Ok(())
|
anyhow::Ok(())
|
||||||
})
|
})
|
||||||
|
|
|
@ -9104,7 +9104,7 @@ async fn search(
|
||||||
SearchResult::Buffer { buffer, ranges } => {
|
SearchResult::Buffer { buffer, ranges } => {
|
||||||
results.entry(buffer).or_insert(ranges);
|
results.entry(buffer).or_insert(ranges);
|
||||||
}
|
}
|
||||||
SearchResult::LimitReached => {}
|
SearchResult::Finished { .. } => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(results
|
Ok(results
|
||||||
|
|
|
@ -21,7 +21,10 @@ pub enum SearchResult {
|
||||||
buffer: Entity<Buffer>,
|
buffer: Entity<Buffer>,
|
||||||
ranges: Vec<Range<Anchor>>,
|
ranges: Vec<Range<Anchor>>,
|
||||||
},
|
},
|
||||||
LimitReached,
|
Finished {
|
||||||
|
limit_reached: bool,
|
||||||
|
any_file_matched_pattern: bool,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Copy, PartialEq)]
|
#[derive(Clone, Copy, PartialEq)]
|
||||||
|
|
|
@ -222,6 +222,13 @@ async fn test_remote_project_search(cx: &mut TestAppContext, server_cx: &mut Tes
|
||||||
)
|
)
|
||||||
});
|
});
|
||||||
|
|
||||||
|
let SearchResult::Finished {
|
||||||
|
limit_reached: false,
|
||||||
|
any_file_matched_pattern: true,
|
||||||
|
} = receiver.recv().await.unwrap()
|
||||||
|
else {
|
||||||
|
panic!("invalid finisher");
|
||||||
|
};
|
||||||
assert!(receiver.recv().await.is_err());
|
assert!(receiver.recv().await.is_err());
|
||||||
buffer
|
buffer
|
||||||
}
|
}
|
||||||
|
|
|
@ -330,8 +330,11 @@ impl ProjectSearch {
|
||||||
project::search::SearchResult::Buffer { buffer, ranges } => {
|
project::search::SearchResult::Buffer { buffer, ranges } => {
|
||||||
buffers_with_ranges.push((buffer, ranges));
|
buffers_with_ranges.push((buffer, ranges));
|
||||||
}
|
}
|
||||||
project::search::SearchResult::LimitReached => {
|
project::search::SearchResult::Finished {
|
||||||
limit_reached = true;
|
limit_reached: reached,
|
||||||
|
..
|
||||||
|
} => {
|
||||||
|
limit_reached = reached;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue