
Closes #12553 * [x] Fix `diff_hunk_before` * [x] Fix failure to show deleted text when expanding hunk w/ cursor on second line of the hunk * [x] Failure to expand diff hunk below the cursor. * [x] Delete the whole file, and expand the diff. Backspace over the deleted hunk, panic! * [x] Go-to-line now counts the diff hunks, but it should not * [x] backspace at the beginning of a deleted hunk deletes too much text * [x] Indent guides are rendered incorrectly * [ ] Fix randomized multi buffer tests Maybe: * [ ] Buffer search should include deleted text (in vim mode it turns out I use `/x` all the time to jump to the next x I can see). * [ ] vim: should refuse to switch into insert mode if selection is fully within a diff. * [ ] vim `o` command when cursor is on last line of deleted hunk. * [ ] vim `shift-o` on first line of deleted hunk moves cursor but doesn't insert line * [x] `enter` at end of diff hunk inserts a new line but doesn't move cursor * [x] (`shift-enter` at start of diff hunk does nothing) * [ ] Inserting a line just before an expanded hunk collapses it Release Notes: - Improved diff rendering, allowing you to navigate with your cursor inside of deleted text in diff hunks. --------- Co-authored-by: Conrad <conrad@zed.dev> Co-authored-by: Cole <cole@zed.dev> Co-authored-by: Mikayla <mikayla@zed.dev> Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com> Co-authored-by: Michael <michael@zed.dev> Co-authored-by: Agus <agus@zed.dev> Co-authored-by: João <joao@zed.dev>
51 lines
1.2 KiB
Rust
51 lines
1.2 KiB
Rust
use crate::ChunkSummary;
|
|
use std::ops::{Add, AddAssign, Sub, SubAssign};
|
|
|
|
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
|
pub struct Unclipped<T>(pub T);
|
|
|
|
impl<T> From<T> for Unclipped<T> {
|
|
fn from(value: T) -> Self {
|
|
Unclipped(value)
|
|
}
|
|
}
|
|
|
|
impl<'a, T: sum_tree::Dimension<'a, ChunkSummary>> sum_tree::Dimension<'a, ChunkSummary>
|
|
for Unclipped<T>
|
|
{
|
|
fn zero(_: &()) -> Self {
|
|
Self(T::zero(&()))
|
|
}
|
|
|
|
fn add_summary(&mut self, summary: &'a ChunkSummary, _: &()) {
|
|
self.0.add_summary(summary, &());
|
|
}
|
|
}
|
|
|
|
impl<T: Add<T, Output = T>> Add<Unclipped<T>> for Unclipped<T> {
|
|
type Output = Unclipped<T>;
|
|
|
|
fn add(self, rhs: Unclipped<T>) -> Self::Output {
|
|
Unclipped(self.0 + rhs.0)
|
|
}
|
|
}
|
|
|
|
impl<T: Sub<T, Output = T>> Sub<Unclipped<T>> for Unclipped<T> {
|
|
type Output = Unclipped<T>;
|
|
|
|
fn sub(self, rhs: Unclipped<T>) -> Self::Output {
|
|
Unclipped(self.0 - rhs.0)
|
|
}
|
|
}
|
|
|
|
impl<T: AddAssign<T>> AddAssign<Unclipped<T>> for Unclipped<T> {
|
|
fn add_assign(&mut self, rhs: Unclipped<T>) {
|
|
self.0 += rhs.0;
|
|
}
|
|
}
|
|
|
|
impl<T: SubAssign<T>> SubAssign<Unclipped<T>> for Unclipped<T> {
|
|
fn sub_assign(&mut self, rhs: Unclipped<T>) {
|
|
self.0 -= rhs.0;
|
|
}
|
|
}
|