From 368b4447ff3caa9b13ea3e15097c4722cb71ac0b Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Wed, 15 Dec 2021 15:41:38 -0800 Subject: [PATCH] Clip buffer points in DisplayMap::{prev,next}_row_boundary --- crates/editor/src/display_map.rs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/crates/editor/src/display_map.rs b/crates/editor/src/display_map.rs index 9e00719728..c9a139ceda 100644 --- a/crates/editor/src/display_map.rs +++ b/crates/editor/src/display_map.rs @@ -208,11 +208,18 @@ impl DisplaySnapshot { loop { *display_point.column_mut() = 0; let mut point = display_point.to_point(self); + point = self.buffer_snapshot.clip_point(point, Bias::Left); point.column = 0; let next_display_point = self.point_to_display_point(point, Bias::Left); if next_display_point == display_point { return (display_point, point); } + debug_assert!( + next_display_point < display_point, + "{:?} > {:?}", + next_display_point, + display_point + ); display_point = next_display_point; } } @@ -220,12 +227,19 @@ impl DisplaySnapshot { pub fn next_row_boundary(&self, mut display_point: DisplayPoint) -> (DisplayPoint, Point) { loop { *display_point.column_mut() = self.line_len(display_point.row()); - let mut point = display_point.to_point(self); + let mut point = self.display_point_to_point(display_point, Bias::Right); + point = self.buffer_snapshot.clip_point(point, Bias::Right); point.column = self.buffer_snapshot.line_len(point.row); let next_display_point = self.point_to_display_point(point, Bias::Right); if next_display_point == display_point { return (display_point, point); } + debug_assert!( + next_display_point > display_point, + "{:?} < {:?}", + next_display_point, + display_point + ); display_point = next_display_point; } }