Use new char_kind (parameterized by language)

This commit is contained in:
Piotr Osiewicz
2023-08-21 17:39:38 +02:00
parent 3e8522b5f2
commit ab5bd0ac5a
9 changed files with 93 additions and 47 deletions
+1 -1
View File
@@ -5170,7 +5170,7 @@ impl Project {
snapshot.file().map(|file| file.path().as_ref()),
) {
query
.search(snapshot.as_rope())
.search(&snapshot, None)
.await
.iter()
.map(|range| {
+13 -3
View File
@@ -3,7 +3,7 @@ use anyhow::{Context, Result};
use client::proto;
use globset::{Glob, GlobMatcher};
use itertools::Itertools;
use language::{char_kind, Rope};
use language::{char_kind, BufferSnapshot};
use regex::{Regex, RegexBuilder};
use smol::future::yield_now;
use std::{
@@ -215,13 +215,23 @@ impl SearchQuery {
}
}
pub async fn search(&self, rope: &Rope) -> Vec<Range<usize>> {
pub async fn search(
&self,
buffer: &BufferSnapshot,
subrange: Option<Range<usize>>,
) -> Vec<Range<usize>> {
const YIELD_INTERVAL: usize = 20000;
if self.as_str().is_empty() {
return Default::default();
}
let language = rope.language(cx);
let language = buffer.language_at(0);
let rope = if let Some(range) = subrange {
buffer.as_rope().slice(range)
} else {
buffer.as_rope().clone()
};
let kind = |c| char_kind(language, c);
let mut matches = Vec::new();