mirror of
https://github.com/helix-editor/helix.git
synced 2024-11-22 09:26:19 +04:00
fix: panic which occured if ranges overlapped
This commit is contained in:
parent
3633c8cd0f
commit
7f9e7611b6
@ -615,7 +615,6 @@ pub fn change<I>(doc: &Rope, changes: I) -> Self
|
|||||||
let mut last = 0;
|
let mut last = 0;
|
||||||
for (from, to, tendril) in changes {
|
for (from, to, tendril) in changes {
|
||||||
// Verify ranges are ordered and not overlapping
|
// Verify ranges are ordered and not overlapping
|
||||||
dbg!(last, from);
|
|
||||||
debug_assert!(last <= from);
|
debug_assert!(last <= from);
|
||||||
// Verify ranges are correct
|
// Verify ranges are correct
|
||||||
debug_assert!(
|
debug_assert!(
|
||||||
|
@ -5865,6 +5865,24 @@ fn surround_delete(cx: &mut Context) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
let mut ranges: SmallVec<[Range; 1]> = change_pos
|
||||||
|
.iter()
|
||||||
|
.flat_map(|&((opening_tag_range, closing_tag_range), _)| {
|
||||||
|
vec![opening_tag_range, closing_tag_range]
|
||||||
|
})
|
||||||
|
.collect();
|
||||||
|
|
||||||
|
ranges.sort_by(|a, b| a.from().cmp(&b.from()));
|
||||||
|
|
||||||
|
let has_overlaps = ranges
|
||||||
|
.windows(2)
|
||||||
|
.any(|window| window[0].to() > window[1].from());
|
||||||
|
|
||||||
|
if has_overlaps {
|
||||||
|
cx.editor
|
||||||
|
.set_error("Cursors overlap for a single surround pair range");
|
||||||
|
return;
|
||||||
|
}
|
||||||
let transaction = Transaction::change(
|
let transaction = Transaction::change(
|
||||||
doc.text(),
|
doc.text(),
|
||||||
change_pos.iter().flat_map(|(pos, _)| {
|
change_pos.iter().flat_map(|(pos, _)| {
|
||||||
|
Loading…
Reference in New Issue
Block a user