Fix off-by-1 error when removing at end (#61)

This commit is contained in:
Markus Hennerbichler 2024-01-28 22:25:14 +00:00 committed by GitHub
parent c2fbac20ee
commit 16606e5371
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -237,18 +237,19 @@ impl Document {
}, },
) )
} else { } 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 self.text
.try_remove(start_idx..old_end_idx) .try_remove(start_idx..removal_idx)
.map_err(internal_error)?; .map_err(internal_error)?;
self.text.insert(start_idx, text); self.text.insert(start_idx, text);
let rope = Rope::from_str(text); let rope = Rope::from_str(text);
let text_len = rope.len_chars(); let text_len = rope.len_chars();
let character_difference = text_len as isize - slice_size as isize; let character_difference = text_len as isize - slice_size as isize;
let new_end_idx = if character_difference.is_negative() { 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 { } else {
old_end_idx + character_difference as usize removal_idx + character_difference as usize
}; };
let row = self let row = self
.text .text