rope: Assert utf8 boundary of start of `Chunks::new` range (#40253)

Lukas Wirth created

We seem to run into panics in related code, so better assert early

Release Notes:

- N/A *or* Added/Fixed/Improved ...

Change summary

crates/rope/src/rope.rs | 6 ++++++
1 file changed, 6 insertions(+)

Detailed changes

crates/rope/src/rope.rs 🔗

@@ -673,6 +673,12 @@ impl<'a> Chunks<'a> {
             chunks.seek(&range.start, Bias::Right);
             range.start
         };
+        let chunk_offset = offset - chunks.start();
+        if let Some(chunk) = chunks.item()
+            && !chunk.text.is_char_boundary(chunk_offset)
+        {
+            panic!("byte index {} is not a char boundary", offset);
+        }
         Self {
             chunks,
             range,