From 54dc913a79b503baa078d897c043b0964bb67168 Mon Sep 17 00:00:00 2001 From: Cole Miller Date: Fri, 19 Dec 2025 10:48:20 -0500 Subject: [PATCH] wip --- crates/editor/src/editor.rs | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index 8560705802264dad55b87dbf21e1f9aa7625edf8..1c8e9daa38af47f0df385cdffa9a5b9968e34994 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -189,7 +189,7 @@ use std::{ time::{Duration, Instant}, }; use task::{ResolvedTask, RunnableTag, TaskTemplate, TaskVariables}; -use text::{BufferId, FromAnchor, OffsetUtf16, Rope, ToOffset as _}; +use text::{BufferId, FromAnchor, OffsetUtf16, Rope, ToOffset as _, ToPoint as _}; use theme::{ AccentColors, ActiveTheme, PlayerColor, StatusColors, SyntaxTheme, Theme, ThemeSettings, observe_buffer_font_size_adjustment, @@ -11413,12 +11413,25 @@ impl Editor { let diff = buffer.diff_for(hunk.buffer_id)?; let buffer = buffer.buffer(hunk.buffer_id)?; let buffer = buffer.read(cx); - let original_text = diff - .read(cx) - .base_text() - .as_rope() - .slice(hunk.diff_base_byte_range.start.0..hunk.diff_base_byte_range.end.0); + + let base_text = diff.read(cx).base_text(); + let mut base_text_start = hunk.diff_base_byte_range.start.0.to_point(base_text); let buffer_snapshot = buffer.snapshot(); + let mut buffer_start = hunk.buffer_range.start.to_point(&buffer_snapshot); + if base_text_start.row > 0 + && base_text_start.column == 0 + && buffer_start.row > 0 + && buffer_start.column == 0 + { + base_text_start.row -= 1; + base_text_start.column = base_text.line_len(base_text_start.row); + buffer_start.row -= 1; + buffer_start.column = buffer.line_len(buffer_start.row); + } + + let original_text = diff.read(cx).base_text().as_rope().slice( + text::ToOffset::to_offset(&base_text_start, base_text)..hunk.diff_base_byte_range.end.0, + ); let buffer_revert_changes = revert_changes.entry(buffer.remote_id()).or_default(); if let Err(i) = buffer_revert_changes.binary_search_by(|probe| { probe @@ -11427,7 +11440,13 @@ impl Editor { .cmp(&hunk.buffer_range.start, &buffer_snapshot) .then(probe.0.end.cmp(&hunk.buffer_range.end, &buffer_snapshot)) }) { - buffer_revert_changes.insert(i, (hunk.buffer_range.clone(), original_text)); + buffer_revert_changes.insert( + i, + ( + buffer_snapshot.anchor_before(buffer_start)..hunk.buffer_range.end, + original_text, + ), + ); Some(()) } else { None