diff --git a/src/core/indexer.rs b/src/core/indexer.rs index 469c120..af24c98 100644 --- a/src/core/indexer.rs +++ b/src/core/indexer.rs @@ -352,7 +352,19 @@ impl Indexer { }); let overlap_start = if line_idx > 0 { - line_idx.saturating_sub(self.chunk_overlap / 40) + // Calculate how many lines we need to include to achieve + // the desired character overlap + let mut overlap_chars = 0; + let mut overlap_lines = 0; + for i in (0..line_idx).rev() { + let line_char_len = lines[i].len() + 1; // +1 for newline + if overlap_chars + line_char_len > self.chunk_overlap { + break; + } + overlap_chars += line_char_len; + overlap_lines += 1; + } + line_idx.saturating_sub(overlap_lines.max(1)) } else { 0 }; @@ -728,7 +740,19 @@ impl ServerIndexer { }); let overlap_start = if line_idx > 0 { - line_idx.saturating_sub(self.chunk_overlap / 40) + // Calculate how many lines we need to include to achieve + // the desired character overlap + let mut overlap_chars = 0; + let mut overlap_lines = 0; + for i in (0..line_idx).rev() { + let line_char_len = lines[i].len() + 1; // +1 for newline + if overlap_chars + line_char_len > self.chunk_overlap { + break; + } + overlap_chars += line_char_len; + overlap_lines += 1; + } + line_idx.saturating_sub(overlap_lines.max(1)) } else { 0 }; diff --git a/src/watcher.rs b/src/watcher.rs index 816219f..e420edb 100644 --- a/src/watcher.rs +++ b/src/watcher.rs @@ -416,7 +416,19 @@ impl FileWatcher { }); let overlap_start = if line_idx > 0 { - line_idx.saturating_sub(self.config.chunk_overlap / 40) + // Calculate how many lines we need to include to achieve + // the desired character overlap + let mut overlap_chars = 0; + let mut overlap_lines = 0; + for i in (0..line_idx).rev() { + let line_char_len = lines[i].len() + 1; // +1 for newline + if overlap_chars + line_char_len > self.config.chunk_overlap { + break; + } + overlap_chars += line_char_len; + overlap_lines += 1; + } + line_idx.saturating_sub(overlap_lines.max(1)) } else { 0 };