From bb0217c5ad85096dcf49046ceafb3e0dd28a0c26 Mon Sep 17 00:00:00 2001 From: Cole Miller Date: Tue, 9 Dec 2025 14:42:24 -0500 Subject: [PATCH] wip Co-authored-by: cameron --- crates/buffer_diff/src/buffer_diff.rs | 3 --- crates/editor/src/split.rs | 32 +++++++++++------------- crates/git_ui/src/project_diff.rs | 9 +------ crates/multi_buffer/src/multi_buffer.rs | 23 ++++++----------- crates/zeta/src/rate_prediction_modal.rs | 2 +- 5 files changed, 23 insertions(+), 46 deletions(-) diff --git a/crates/buffer_diff/src/buffer_diff.rs b/crates/buffer_diff/src/buffer_diff.rs index e0eb896abc040afcae65ae67a7f33a890da3e981..6060b9a6958a3a802945ab9dcfd59ec80262665c 100644 --- a/crates/buffer_diff/src/buffer_diff.rs +++ b/crates/buffer_diff/src/buffer_diff.rs @@ -1252,7 +1252,6 @@ impl BufferDiff { ) -> Option> { log::debug!("set snapshot with secondary {secondary_diff_change:?}"); - dbg!(base_text_changed); let old_snapshot = self.snapshot(cx); let state = &mut self.inner; let (mut changed_range, mut base_text_changed_range) = @@ -1296,7 +1295,6 @@ impl BufferDiff { }) } state.hunks = new_state.hunks; - dbg!(self.buffer_id, state.hunks.iter().collect::>()); if base_text_changed || clear_pending_hunks { if let Some((first, last)) = state.pending_hunks.first().zip(state.pending_hunks.last()) { @@ -1319,7 +1317,6 @@ impl BufferDiff { state.pending_hunks = SumTree::new(buffer); } - dbg!("EMIT"); cx.emit(BufferDiffEvent::DiffChanged { changed_range: changed_range.clone(), base_text_changed_range, diff --git a/crates/editor/src/split.rs b/crates/editor/src/split.rs index a2f5555dcc5fa53fc2d7452c78304e9b2937eac8..f0d442f328b131e459fb982ae483079664dc5e0c 100644 --- a/crates/editor/src/split.rs +++ b/crates/editor/src/split.rs @@ -140,9 +140,6 @@ impl SplittableEditor { }; let project = workspace.read(cx).project().clone(); - // FIXME - // - have to subscribe to the diffs to update the base text buffers (and handle language changed I think?) - let secondary_editor = cx.new(|cx| { let multibuffer = cx.new(|cx| { let mut multibuffer = MultiBuffer::new(Capability::ReadOnly); @@ -196,6 +193,13 @@ impl SplittableEditor { primary_multibuffer.set_show_deleted_hunks(false, cx); let paths = primary_multibuffer.paths().collect::>(); for path in paths { + let Some(excerpt_id) = primary_multibuffer.excerpts_for_path(&path).next() + else { + continue; + }; + let snapshot = primary_multibuffer.snapshot(cx); + let buffer = snapshot.buffer_for_excerpt(excerpt_id).unwrap(); + let diff = primary_multibuffer.diff_for(buffer.remote_id()).unwrap(); secondary.sync_path_excerpts(path, primary_multibuffer, diff, cx); } }) @@ -257,17 +261,8 @@ impl SplittableEditor { context_line_count, cx, ); - // - we just added some excerpts for a specific buffer to the primary (RHS) - // - but the diff for that buffer doesn't get attached to the primary multibuffer until slightly later - // - however, for sync_path_excerpts we require that we have a diff for the buffer - if let Some(secondary) = &mut self.secondary - && let Some(languages) = self - .workspace - .update(cx, |workspace, cx| { - workspace.project().read(cx).languages().clone() - }) - .ok() - { + primary_multibuffer.add_diff(diff.clone(), cx); + if let Some(secondary) = &mut self.secondary { secondary.sync_path_excerpts(path, primary_multibuffer, diff, cx); } (anchors, added_a_new_excerpt) @@ -329,17 +324,18 @@ impl SecondaryEditor { .buffer_for_excerpt(excerpt_id) .unwrap(); let base_text_buffer = diff.read(cx).base_text_buffer(); - let diff = diff.read(cx).snapshot(cx); + let diff_snapshot = diff.read(cx).snapshot(cx); let base_text_buffer_snapshot = base_text_buffer.read(cx).snapshot(); let new = primary_multibuffer .excerpts_for_buffer(main_buffer.remote_id(), cx) .into_iter() .map(|(_, excerpt_range)| { let point_range_to_base_text_point_range = |range: Range| { - let start_row = diff.row_to_base_text_row(range.start.row, main_buffer); + let start_row = + diff_snapshot.row_to_base_text_row(range.start.row, main_buffer); let start_column = 0; - let end_row = diff.row_to_base_text_row(range.end.row, main_buffer); - let end_column = diff.base_text().line_len(end_row); + let end_row = diff_snapshot.row_to_base_text_row(range.end.row, main_buffer); + let end_column = diff_snapshot.base_text().line_len(end_row); Point::new(start_row, start_column)..Point::new(end_row, end_column) }; let primary = excerpt_range.primary.to_point(main_buffer); diff --git a/crates/git_ui/src/project_diff.rs b/crates/git_ui/src/project_diff.rs index afe3a0c8853c265a46d83a95f7775eaaf37cad25..7643d88ef24e268aa25ef71735b233ce741b56a5 100644 --- a/crates/git_ui/src/project_diff.rs +++ b/crates/git_ui/src/project_diff.rs @@ -516,15 +516,7 @@ impl ProjectDiff { .map(|range| range.to_point(&snapshot)) .collect::>(); - // FIXME should have an add diff api for the splittable editor directly - // if self.branch_diff.read(cx).diff_base().is_merge_base() { - self.multibuffer.update(cx, |multibuffer, cx| { - multibuffer.add_diff(diff.clone(), cx); - }); - // } - let (was_empty, is_excerpt_newly_added) = self.editor.update(cx, |editor, cx| { - // FIXME should go through the splittable editor let was_empty = editor .primary_editor() .read(cx) @@ -536,6 +528,7 @@ impl ProjectDiff { buffer, excerpt_ranges, multibuffer_context_lines(cx), + diff, cx, ); (was_empty, is_newly_added) diff --git a/crates/multi_buffer/src/multi_buffer.rs b/crates/multi_buffer/src/multi_buffer.rs index 5e4b92f396a8ecc336a46ad9a535bb608e5c5824..6e3dc71054de1b7ea193039988f412b16185f6e2 100644 --- a/crates/multi_buffer/src/multi_buffer.rs +++ b/crates/multi_buffer/src/multi_buffer.rs @@ -2286,7 +2286,6 @@ impl MultiBuffer { diff: diff.snapshot(cx), main_buffer: None, }; - dbg!(); self.snapshot.get_mut().diffs.insert(buffer_id, diff); } @@ -2321,6 +2320,9 @@ impl MultiBuffer { let diff = diff.read(cx); let buffer_id = diff.buffer_id; + let Some(buffer_state) = self.buffers.get(&buffer_id) else { + return; + }; let new_diff = DiffStateSnapshot { diff: diff.snapshot(cx), main_buffer: None, @@ -2330,11 +2332,7 @@ impl MultiBuffer { .diffs .get(&buffer_id) .is_none_or(|old_diff| !new_diff.base_texts_eq(old_diff)); - snapshot.diffs.insert_or_replace(dbg!(buffer_id), new_diff); - - let Some(buffer_state) = self.buffers.get(&buffer_id) else { - return; - }; + snapshot.diffs.insert_or_replace(buffer_id, new_diff); self.buffer_changed_since_sync.replace(true); let buffer = buffer_state.buffer.read(cx); @@ -3069,7 +3067,7 @@ impl MultiBuffer { for (id, diff) in diffs.iter() { if buffer_diff.get(id).is_none() { - buffer_diff.insert(dbg!(*id), diff.snapshot(cx)); + buffer_diff.insert(*id, diff.snapshot(cx)); } } @@ -3283,8 +3281,6 @@ impl MultiBuffer { edit.new.start..edit.new.end ); - dbg!(&change_kind); - // Record which hunks were previously expanded. while let Some(item) = old_diff_transforms.item() { if let Some(hunk_info) = item.hunk_info() { @@ -3314,7 +3310,7 @@ impl MultiBuffer { while let Some(excerpt) = excerpts.item() { // Recompute the expanded hunks in the portion of the excerpt that // intersects the edit. - if let Some(diff) = snapshot.diffs.get(dbg!(&excerpt.buffer_id)) { + if let Some(diff) = snapshot.diffs.get(&excerpt.buffer_id) { let buffer = &excerpt.buffer; let excerpt_start = *excerpts.start(); let excerpt_end = excerpt_start + excerpt.text_summary.len; @@ -3358,9 +3354,6 @@ impl MultiBuffer { } } } else { - dbg!(buffer.remote_id()); - dbg!(diff.hunks(buffer).collect::>()); - let edit_anchor_range = buffer.anchor_before(edit_buffer_start) ..buffer.anchor_after(edit_buffer_end); for hunk in diff.hunks_intersecting_range(edit_anchor_range, buffer) { @@ -3421,13 +3414,11 @@ impl MultiBuffer { excerpt.id ); - dbg!(&hunk); if !hunk.diff_base_byte_range.is_empty() && hunk_buffer_range.start >= edit_buffer_start && hunk_buffer_range.start <= excerpt_buffer_end - && dbg!(snapshot.show_deleted_hunks) + && snapshot.show_deleted_hunks { - dbg!(); let base_text = diff.base_text(); let mut text_cursor = base_text.as_rope().cursor(hunk.diff_base_byte_range.start); diff --git a/crates/zeta/src/rate_prediction_modal.rs b/crates/zeta/src/rate_prediction_modal.rs index c5404c6e9ed694aed9cf1944bf9826f08bfae137..77464d9f2a62fc633ad1485c5bcb998bf2518366 100644 --- a/crates/zeta/src/rate_prediction_modal.rs +++ b/crates/zeta/src/rate_prediction_modal.rs @@ -1,5 +1,5 @@ use crate::{EditPrediction, EditPredictionRating, Zeta}; -use buffer_diff::{BufferDiff, BufferDiffSnapshot}; +use buffer_diff::{BufferDiff}; use cloud_zeta2_prompt::write_codeblock; use editor::{Editor, ExcerptRange, MultiBuffer}; use gpui::{