use regex::Regex;
use super::FunctionSpan;
pub(super) fn detect_brace_functions(lines: &[&str], pattern: &Regex) -> Vec<FunctionSpan> {
let mut spans = Vec::new();
let mut i = 0;
while i < lines.len() {
if pattern.is_match(lines[i]) {
let start = i;
if let Some(end) = find_brace_end(lines, i) {
spans.push(FunctionSpan {
start_line: start,
end_line: end,
});
i = end + 1;
} else {
i += 1;
}
} else {
i += 1;
}
}
spans
}
pub(super) fn find_brace_end(lines: &[&str], start_line: usize) -> Option<usize> {
let mut brace_count: usize = 0;
let mut found_open = false;
for (i, line) in lines.iter().enumerate().skip(start_line) {
for ch in line.chars() {
if ch == '{' {
brace_count += 1;
found_open = true;
} else if ch == '}' {
brace_count = brace_count.saturating_sub(1);
if found_open && brace_count == 0 {
return Some(i);
}
}
}
}
None
}