diff --git a/crates/editor/src/multi_buffer.rs b/crates/editor/src/multi_buffer.rs index 0868a8799fc41aa08cb1bf080d0a6558e4a8e52b..57c7b380676068769bdaebbe0ecd1199f04eeb06 100644 --- a/crates/editor/src/multi_buffer.rs +++ b/crates/editor/src/multi_buffer.rs @@ -687,6 +687,11 @@ impl MultiBuffer { O: text::ToOffset, { assert_eq!(self.history.transaction_depth, 0); + let mut ranges = ranges.into_iter().peekable(); + if ranges.peek().is_none() { + return Default::default(); + } + self.sync(cx); let buffer_id = buffer.id(); @@ -715,7 +720,7 @@ impl MultiBuffer { let edit_start = new_excerpts.summary().text.bytes; new_excerpts.update_last( |excerpt| { - excerpt.has_trailing_newline = true; + excerpt.has_trailing_newline = ranges.peek().is_some(); prev_id = excerpt.id.clone(); }, &(), @@ -727,7 +732,6 @@ impl MultiBuffer { } let mut ids = Vec::new(); - let mut ranges = ranges.into_iter().peekable(); while let Some(range) = ranges.next() { let id = ExcerptId::between(&prev_id, &next_id); if let Err(ix) = buffer_state.excerpts.binary_search(&id) { @@ -1210,16 +1214,26 @@ impl MultiBuffer { }; let buffer = buffer_handle.read(cx); - let end_ix = buffer.clip_offset(rng.gen_range(0..=buffer.len()), Bias::Right); - let start_ix = buffer.clip_offset(rng.gen_range(0..=end_ix), Bias::Left); + let buffer_text = buffer.text(); + let ranges = (0..rng.gen_range(0..5)) + .map(|_| { + let end_ix = + buffer.clip_offset(rng.gen_range(0..=buffer.len()), Bias::Right); + let start_ix = buffer.clip_offset(rng.gen_range(0..=end_ix), Bias::Left); + start_ix..end_ix + }) + .collect::>(); log::info!( - "Inserting excerpt from buffer {} and range {:?}: {:?}", + "Inserting excerpts from buffer {} and ranges {:?}: {:?}", buffer_handle.id(), - start_ix..end_ix, - &buffer.text()[start_ix..end_ix] + ranges, + ranges + .iter() + .map(|range| &buffer_text[range.clone()]) + .collect::>() ); - let excerpt_id = self.push_excerpts(buffer_handle.clone(), [start_ix..end_ix], cx); + let excerpt_id = self.push_excerpts(buffer_handle.clone(), ranges, cx); log::info!("Inserted with id: {:?}", excerpt_id); } else { let remove_count = rng.gen_range(1..=excerpt_ids.len());