Detailed changes
@@ -1085,6 +1085,8 @@ impl BufferDiff {
) -> Self {
let mut this = BufferDiff::new(&buffer, cx);
let executor = cx.background_executor().clone();
+ let mut base_text = base_text.to_owned();
+ text::LineEnding::normalize(&mut base_text);
let inner = executor.block(this.update_diff(
buffer.clone(),
Some(Arc::from(base_text)),
@@ -1092,6 +1094,7 @@ impl BufferDiff {
None,
cx,
));
+ // FIXME
this.set_snapshot(inner, &buffer, true, cx);
this
}
@@ -1189,8 +1192,14 @@ impl BufferDiff {
buffer.clone(),
diff_options,
);
+ let base_text = base_text.unwrap_or_default();
+ if cfg!(debug_assertions) {
+ for hunk in hunks.iter() {
+ base_text.get(hunk.diff_base_byte_range.clone()).unwrap();
+ }
+ }
BufferDiffInner {
- base_text: base_text.unwrap_or_default(),
+ base_text,
hunks,
base_text_exists,
pending_hunks: SumTree::new(&buffer),
@@ -1260,12 +1269,32 @@ impl BufferDiff {
let state = &mut self.inner;
state.base_text_exists = new_state.base_text_exists;
+ if cfg!(debug_assertions) {
+ for hunk in new_state.hunks.iter() {
+ new_state.base_text.get(hunk.diff_base_byte_range.clone());
+ }
+ }
if base_text_changed {
state.base_text.update(cx, |base_text, cx| {
- base_text.set_text(new_state.base_text, cx);
+ base_text.set_text(dbg!(new_state.base_text.clone()), cx);
})
}
state.hunks = new_state.hunks;
+ if cfg!(debug_assertions) {
+ pretty_assertions::assert_eq!(
+ state.base_text.read(cx).snapshot().text().as_str(),
+ new_state.base_text.as_ref()
+ );
+ for hunk in state.hunks.iter() {
+ state
+ .base_text
+ .read(cx)
+ .snapshot()
+ .text_summary_for_range::<text::TextSummary, _>(
+ hunk.diff_base_byte_range.clone(),
+ );
+ }
+ }
if base_text_changed || clear_pending_hunks {
if let Some((first, last)) = state.pending_hunks.first().zip(state.pending_hunks.last())
{
@@ -3465,7 +3465,7 @@ impl BufferSnapshot {
/// returned in chunks where each chunk has a single syntax highlighting style and
/// diagnostic status.
pub fn chunks<T: ToOffset>(&self, range: Range<T>, language_aware: bool) -> BufferChunks<'_> {
- let range = range.start.to_offset(self)..range.end.to_offset(self);
+ let range = dbg!(range.start.to_offset(self))..range.end.to_offset(self);
let mut syntax = None;
if language_aware {
@@ -2327,6 +2327,7 @@ impl MultiBuffer {
let buffer = buffer_state.buffer.read(cx);
let diff_change_range = range.to_offset(buffer);
+ dbg!();
let new_diff = DiffStateSnapshot {
diff: diff.snapshot(cx),
main_buffer: None,
@@ -2375,7 +2376,7 @@ impl MultiBuffer {
&mut snapshot,
excerpt_edits,
DiffChangeKind::DiffUpdated {
- base_changed: base_text_changed,
+ base_changed: dbg!(base_text_changed),
},
);
if !edits.is_empty() {
@@ -3177,6 +3178,7 @@ impl MultiBuffer {
let edit_new_start =
MultiBufferOffset((edit_old_start.0 as isize + output_delta) as usize);
+ dbg!();
let changed_diff_hunks = Self::recompute_diff_transforms_for_edit(
&edit,
&mut excerpts,
@@ -3343,7 +3345,6 @@ impl MultiBuffer {
hunk_excerpt_start,
*end_of_current_insert,
);
- // FIXME record that the status for this region should be "deleted"
if !hunk_buffer_range.is_empty() {
let hunk_info = DiffTransformHunkInfo {
excerpt_id: excerpt.id,
@@ -3419,9 +3420,16 @@ impl MultiBuffer {
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!(&hunk.diff_base_byte_range);
let base_text = diff.base_text();
+ if cfg!(debug_assertions) {
+ dbg!();
+ base_text.text_summary_for_range::<TextSummary, _>(
+ hunk.diff_base_byte_range.clone(),
+ );
+ }
let mut text_cursor =
base_text.as_rope().cursor(hunk.diff_base_byte_range.start);
let mut base_text_summary = text_cursor
@@ -7848,6 +7856,7 @@ impl<'a> Iterator for MultiBufferChunks<'a> {
has_trailing_newline,
..
} => {
+ dbg!(&base_text_byte_range);
let base_text_start =
base_text_byte_range.start + (self.range.start - diff_transform_start);
let base_text_end =
@@ -7866,7 +7875,10 @@ impl<'a> Iterator for MultiBufferChunks<'a> {
chunks
} else {
let base_buffer = &self.diffs.get(buffer_id)?.base_text();
- base_buffer.chunks(base_text_start..base_text_end, self.language_aware)
+ base_buffer.chunks(
+ dbg!(base_text_start)..dbg!(base_text_end),
+ self.language_aware,
+ )
};
let chunk = if let Some(chunk) = chunks.next() {
@@ -132,6 +132,7 @@ impl Chunk {
return true;
}
if PANIC || cfg!(debug_assertions) {
+ dbg!(offset);
panic_char_boundary(&self.text, offset);
} else {
log_err_char_boundary(&self.text, offset);
@@ -3141,6 +3141,7 @@ impl ToOffset for Point {
}
impl ToOffset for usize {
+ #[track_caller]
fn to_offset(&self, snapshot: &BufferSnapshot) -> usize {
if snapshot
.as_rope()