use crate::core::document::Document;
use regex::{Match, Regex};
use streaming_iterator::StreamingIterator;
pub fn find_all_with_regex<'a>(
query: &tree_sitter::Query,
document: &'a Document,
regex: &Regex,
) -> Vec<(Match<'a>, usize)> {
let root_node = document.tree.root_node();
let source = document.as_str();
let mut query_cursor = tree_sitter::QueryCursor::new();
let mut captures = query_cursor.captures(query, root_node, source.as_bytes());
let mut results = vec![];
while let Some((m, capture_index)) = captures.next() {
let capture = m.captures[*capture_index];
let range = capture.node.range();
let start_line = range.start_point.row;
let end_line = range.end_point.row;
let comment_lines = start_line..=end_line;
for line in comment_lines {
let text = document.texter.get_row(line).unwrap();
for m in regex.find_iter(text) {
results.push((m, line));
}
}
}
results
}