From 16606e5371a1b0582543f03fd8a2666f7bf2580a Mon Sep 17 00:00:00 2001 From: Markus Hennerbichler Date: Sun, 28 Jan 2024 22:25:14 +0000 Subject: [PATCH] Fix off-by-1 error when removing at end (#61) --- crates/llm-ls/src/document.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/crates/llm-ls/src/document.rs b/crates/llm-ls/src/document.rs index 4b1bdae..689e33b 100644 --- a/crates/llm-ls/src/document.rs +++ b/crates/llm-ls/src/document.rs @@ -237,18 +237,19 @@ impl Document { }, ) } else { - let slice_size = old_end_idx - start_idx; + let removal_idx = self.text.try_line_to_char(range.end.line as usize).map_err(internal_error)? + (range.end.character as usize); + let slice_size = removal_idx - start_idx; self.text - .try_remove(start_idx..old_end_idx) + .try_remove(start_idx..removal_idx) .map_err(internal_error)?; self.text.insert(start_idx, text); let rope = Rope::from_str(text); let text_len = rope.len_chars(); let character_difference = text_len as isize - slice_size as isize; let new_end_idx = if character_difference.is_negative() { - old_end_idx - character_difference.wrapping_abs() as usize + removal_idx - character_difference.wrapping_abs() as usize } else { - old_end_idx + character_difference as usize + removal_idx + character_difference as usize }; let row = self .text