Add a fast path for when the search query is empty

This commit is contained in:
Antonio Scandurra 2022-02-25 10:58:45 +01:00
parent a077210873
commit 6a0cca7178

View File

@ -55,6 +55,10 @@ impl SearchQuery {
}
pub fn detect<T: Read>(&self, stream: T) -> Result<bool> {
if self.as_str().is_empty() {
return Ok(false);
}
match self {
SearchQuery::Text { search, .. } => {
let mat = search.stream_find_iter(stream).next();
@ -89,6 +93,10 @@ impl SearchQuery {
pub async fn search(&self, rope: &Rope) -> Vec<Range<usize>> {
const YIELD_INTERVAL: usize = 20000;
if self.as_str().is_empty() {
return Default::default();
}
let mut matches = Vec::new();
match self {
SearchQuery::Text {
@ -152,4 +160,11 @@ impl SearchQuery {
}
matches
}
fn as_str(&self) -> &str {
match self {
SearchQuery::Text { query, .. } => query.as_str(),
SearchQuery::Regex { regex, .. } => regex.as_str(),
}
}
}