From 915c710f94284413bbd94370a996dff24cb40ea3 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Wed, 21 Jul 2021 18:04:58 +0200 Subject: [PATCH] Ensure that we use the `WrapMap` where appropriate in `DisplayMap` Co-Authored-By: Nathan Sobo --- zed/src/editor/display_map.rs | 8 +++++--- zed/src/editor/display_map/wrap_map.rs | 17 +++++++++++++++++ 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/zed/src/editor/display_map.rs b/zed/src/editor/display_map.rs index 77b4935127016422f0ed3adbec6454fba3e0df10..af9e3a529b01ba0e55fd9746504e793748e26764 100644 --- a/zed/src/editor/display_map.rs +++ b/zed/src/editor/display_map.rs @@ -156,7 +156,9 @@ impl DisplayMapSnapshot { } pub fn is_line_folded(&self, display_row: u32) -> bool { - self.folds_snapshot.is_line_folded(display_row) + let wrap_point = DisplayPoint::new(display_row, 0).0; + let row = self.wraps_snapshot.to_input_point(wrap_point).row(); + self.folds_snapshot.is_line_folded(row) } pub fn text(&self) -> String { @@ -191,11 +193,11 @@ impl DisplayMapSnapshot { } pub fn line_len(&self, row: u32) -> u32 { - self.tabs_snapshot.line_len(row) + self.wraps_snapshot.line_len(row) } pub fn longest_row(&self) -> u32 { - self.tabs_snapshot.longest_row() + self.wraps_snapshot.longest_row() } pub fn anchor_before(&self, point: DisplayPoint, bias: Bias) -> Anchor { diff --git a/zed/src/editor/display_map/wrap_map.rs b/zed/src/editor/display_map/wrap_map.rs index fa345b40c956efc57a52a81c10b91f1168a5e2be..a6098de47e6c008dff59706ff3d9b4fdef425f09 100644 --- a/zed/src/editor/display_map/wrap_map.rs +++ b/zed/src/editor/display_map/wrap_map.rs @@ -164,6 +164,23 @@ impl Snapshot { self.to_output_point(self.input.max_point()) } + pub fn line_len(&self, row: u32) -> u32 { + let mut len = 0; + for chunk in self.chunks_at(OutputPoint::new(row, 0)) { + if let Some(newline_ix) = chunk.find('\n') { + len += newline_ix; + break; + } else { + len += chunk.len(); + } + } + len as u32 + } + + pub fn longest_row(&self) -> u32 { + self.transforms.summary().output.longest_row + } + pub fn buffer_rows(&self, start_row: u32) -> BufferRows { let mut transforms = self.transforms.cursor::(); transforms.seek(&OutputPoint::new(start_row, 0), Bias::Right, &());