From 51e9cf22e1571feaaf59bc2a2a9250f5557813e2 Mon Sep 17 00:00:00 2001 From: Thomas Heartman Date: Tue, 21 Oct 2025 18:29:57 +0200 Subject: [PATCH] fix issue with not rendering correctly when wrapped relative: false --- crates/editor/src/display_map/wrap_map.rs | 4 ++-- crates/editor/src/element.rs | 8 ++++---- crates/multi_buffer/src/multi_buffer.rs | 8 ++++---- crates/multi_buffer/src/multi_buffer_tests.rs | 3 +++ 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/crates/editor/src/display_map/wrap_map.rs b/crates/editor/src/display_map/wrap_map.rs index 26ab8931e78bba83aaee2f756052c4f2f6c719f2..0495343815acc528f380a65d00996dc4df15b29e 100644 --- a/crates/editor/src/display_map/wrap_map.rs +++ b/crates/editor/src/display_map/wrap_map.rs @@ -1020,11 +1020,11 @@ impl Iterator for WrapRows<'_> { Some(if soft_wrapped { RowInfo { buffer_id: None, - buffer_row: buffer_row.buffer_row, + buffer_row: None, multibuffer_row: None, diff_status, expand_info: None, - wrapped: true, + wrapped: buffer_row.buffer_row, } } else { buffer_row diff --git a/crates/editor/src/element.rs b/crates/editor/src/element.rs index 26002a02ff26bd16182454fab2d8f38491440db6..18d0491204a4d3e80a38c2afb60a88ad0634dcdf 100644 --- a/crates/editor/src/element.rs +++ b/crates/editor/src/element.rs @@ -3170,9 +3170,9 @@ impl EditorElement { let mut i = head_idx + 1; let should_count_line = |row_info: &RowInfo| { if use_display_offset { - row_info.buffer_row.is_some() + row_info.buffer_row.is_some() || row_info.wrapped.is_some() } else { - row_info.buffer_row.is_some() && !row_info.wrapped + row_info.buffer_row.is_some() } }; while i < buffer_rows.len() as u32 { @@ -3266,8 +3266,8 @@ impl EditorElement { let segments = buffer_rows.iter().enumerate().flat_map(|(ix, row_info)| { let display_row = DisplayRow(rows.start.0 + ix as u32); line_number.clear(); - let non_relative_number = if !use_relative_for_wrapped_lines && row_info.wrapped { - return None; + let non_relative_number = if use_relative_for_wrapped_lines { + row_info.buffer_row.or(row_info.wrapped)? + 1 } else { row_info.buffer_row? + 1 }; diff --git a/crates/multi_buffer/src/multi_buffer.rs b/crates/multi_buffer/src/multi_buffer.rs index a6180c674acc9a9b1931aacd5d7564c991322126..c94c43308b20b08105f7e02d6a1d5ce61f66cd7c 100644 --- a/crates/multi_buffer/src/multi_buffer.rs +++ b/crates/multi_buffer/src/multi_buffer.rs @@ -395,7 +395,7 @@ pub struct RowInfo { pub multibuffer_row: Option, pub diff_status: Option, pub expand_info: Option, - pub wrapped: bool, + pub wrapped: Option, } /// A slice into a [`Buffer`] that is being edited in a [`MultiBuffer`]. @@ -7498,7 +7498,7 @@ impl Iterator for MultiBufferRows<'_> { multibuffer_row: Some(MultiBufferRow(0)), diff_status: None, expand_info: None, - wrapped: false, + wrapped: None, }); } @@ -7556,7 +7556,7 @@ impl Iterator for MultiBufferRows<'_> { buffer_row: Some(last_row), multibuffer_row: Some(multibuffer_row), diff_status: None, - wrapped: false, + wrapped: None, expand_info, }); } else { @@ -7601,7 +7601,7 @@ impl Iterator for MultiBufferRows<'_> { .diff_hunk_status .filter(|_| self.point < region.range.end), expand_info, - wrapped: false, + wrapped: None, }); self.point += Point::new(1, 0); result diff --git a/crates/multi_buffer/src/multi_buffer_tests.rs b/crates/multi_buffer/src/multi_buffer_tests.rs index 49db1fc2e264583f90f1a96195c560f0e52e8205..02622478ed42e26e4f93f6b9616a430292388cda 100644 --- a/crates/multi_buffer/src/multi_buffer_tests.rs +++ b/crates/multi_buffer/src/multi_buffer_tests.rs @@ -31,6 +31,7 @@ fn test_empty_singleton(cx: &mut App) { multibuffer_row: Some(MultiBufferRow(0)), diff_status: None, expand_info: None, + wrapped: None, }] ); } @@ -2431,6 +2432,8 @@ impl ReferenceMultibuffer { buffer_id: region.buffer_id, diff_status: region.status, buffer_row, + wrapped: None, + multibuffer_row: Some(MultiBufferRow( text[..ix].matches('\n').count() as u32 )),