Fix off-by-1 error when removing at end (#61)
This commit is contained in:
parent
c2fbac20ee
commit
16606e5371
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue