From 47a475681f43718d750b484af9c3cc189c1ac58e Mon Sep 17 00:00:00 2001 From: Michael Sloan Date: Fri, 5 Sep 2025 22:22:55 -0600 Subject: [PATCH] Optimize Chunks::seek when offset is in current chunk (#37659) Release Notes: - N/A --- crates/rope/src/rope.rs | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/crates/rope/src/rope.rs b/crates/rope/src/rope.rs index 33886854220862c60153dc3ea1f02180c62212a3..9185b5baa300af93ec7ceb3e951ae6ba71772721 100644 --- a/crates/rope/src/rope.rs +++ b/crates/rope/src/rope.rs @@ -639,18 +639,20 @@ impl<'a> Chunks<'a> { pub fn seek(&mut self, mut offset: usize) { offset = offset.clamp(self.range.start, self.range.end); - let bias = if self.reversed { - Bias::Left + if self.reversed { + if offset > self.chunks.end() { + self.chunks.seek_forward(&offset, Bias::Left); + } else if offset <= *self.chunks.start() { + self.chunks.seek(&offset, Bias::Left); + } } else { - Bias::Right + if offset >= self.chunks.end() { + self.chunks.seek_forward(&offset, Bias::Right); + } else if offset < *self.chunks.start() { + self.chunks.seek(&offset, Bias::Right); + } }; - if offset >= self.chunks.end() { - self.chunks.seek_forward(&offset, bias); - } else { - self.chunks.seek(&offset, bias); - } - self.offset = offset; }