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;
|
||||
for (from, to, tendril) in changes {
|
||||
// Verify ranges are ordered and not overlapping
|
||||
dbg!(last, from);
|
||||
debug_assert!(last <= from);
|
||||
// Verify ranges are correct
|
||||
debug_assert!(
|
||||
|
@ -5865,6 +5865,24 @@ fn surround_delete(cx: &mut Context) {
|
||||
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(
|
||||
doc.text(),
|
||||
change_pos.iter().flat_map(|(pos, _)| {
|
||||
|
Loading…
Reference in New Issue
Block a user