probe_code/language/
block_handling.rs

1/// Function to merge overlapping code blocks
2#[cfg(test)]
3pub fn merge_code_blocks(
4    code_blocks: Vec<crate::models::CodeBlock>,
5) -> Vec<crate::models::CodeBlock> {
6    let mut merged_blocks: Vec<crate::models::CodeBlock> = Vec::new();
7    let debug_mode = std::env::var("DEBUG").unwrap_or_default() == "1";
8
9    for block in code_blocks {
10        if let Some(last) = merged_blocks.last_mut() {
11            // Use a consistent threshold of 10 lines for all block types
12            let threshold = 10;
13
14            if block.start_row <= last.end_row + threshold {
15                if debug_mode {
16                    println!(
17                        "DEBUG: Merging blocks: {} ({}-{}) with {} ({}-{})",
18                        last.node_type,
19                        last.start_row + 1,
20                        last.end_row + 1,
21                        block.node_type,
22                        block.start_row + 1,
23                        block.end_row + 1
24                    );
25                }
26                last.end_row = last.end_row.max(block.end_row);
27                last.end_byte = last.end_byte.max(block.end_byte);
28                last.start_row = last.start_row.min(block.start_row);
29                last.start_byte = last.start_byte.min(block.start_byte);
30                continue;
31            }
32        }
33        merged_blocks.push(block);
34    }
35
36    if debug_mode {
37        println!(
38            "DEBUG: After merging: {len} blocks",
39            len = merged_blocks.len()
40        );
41        for (i, block) in merged_blocks.iter().enumerate() {
42            println!(
43                "DEBUG:   Block {}: type={}, lines={}-{}",
44                i + 1,
45                block.node_type,
46                block.start_row + 1,
47                block.end_row + 1
48            );
49        }
50    }
51    merged_blocks
52}