diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index 47fd6abb1370d0286d89de6d864ada9e693f15c4..cba09fb543dbb9d17d36ab173510cc368660b9ca 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -27663,7 +27663,6 @@ impl EditorSnapshot { ) -> HashMap { let initial_offset = self.relative_line_delta(current_selection_head, rows.start, count_wrapped_lines); - let current_selection_point = current_selection_head.as_display_point().to_point(self); self.row_infos(rows.start) .take(rows.len()) @@ -27674,23 +27673,19 @@ impl EditorSnapshot { || (count_wrapped_lines && row_info.wrapped_buffer_row.is_some()) }) .enumerate() - .filter(|(_, (row, row_info))| { - // We want to check here that - // - the row is not the current selection head to ensure the current - // line has absolute numbering - // - similarly, should the selection head live in a soft-wrapped line - // and we are not counting those, that the parent line keeps its - // absolute number - // - lastly, if we are in a deleted line, it is fine to number this + .filter_map(|(i, (row, row_info))| { + // We want to ensure here that the current line has absolute + // numbering, even if we are in a soft-wrapped line. With the + // exception that if we are in a deleted line, we should number this // relative with 0, as otherwise it would have no line number at all - (*row != current_selection_head - && (count_wrapped_lines - || row_info.buffer_row != Some(current_selection_point.row))) + let relative_line_number = (initial_offset + i as i64).unsigned_abs() as u32; + + (relative_line_number != 0 || row_info .diff_status - .is_some_and(|status| status.is_deleted()) + .is_some_and(|status| status.is_deleted())) + .then_some((row, relative_line_number)) }) - .map(|(i, (row, _))| (row, (initial_offset + i as i64).unsigned_abs() as u32)) .collect() } } diff --git a/crates/editor/src/editor_tests.rs b/crates/editor/src/editor_tests.rs index 562b08d516095e086ea40cf60281da1367345999..18a29b2befc84a61d2345de8384c7ebe595df774 100644 --- a/crates/editor/src/editor_tests.rs +++ b/crates/editor/src/editor_tests.rs @@ -29627,6 +29627,7 @@ fn test_relative_line_numbers(cx: &mut TestAppContext) { .into_iter() .enumerate() .map(|(i, row)| (DisplayRow(row), i.abs_diff(base_row) as u32)) + .filter(|(_, relative_line_number)| *relative_line_number != 0) .collect_vec(); let actual_relative_numbers = snapshot .calculate_relative_line_numbers(