Skip to main content

Edit

Enum Edit 

Source
pub enum Edit {
    Insert {
        position: Position,
        text: String,
    },
    Delete {
        position: Position,
        text: String,
    },
}
Expand description

A single atomic edit operation.

Edits are self-contained and can be inverted for undo/redo. Each edit records the position where it occurred and the text involved.

§Undo/Redo

Use Edit::inverse to get the operation that undoes this edit:

  • Insert becomes Delete
  • Delete becomes Insert

§Example

use reovim_kernel::api::v1::*;

let insert = Edit::insert(Position::new(0, 5), "Hello");
assert!(insert.is_insert());
assert_eq!(insert.text(), "Hello");

// Get the inverse for undo
let undo = insert.inverse();
assert!(undo.is_delete());
assert_eq!(undo.position(), Position::new(0, 5));

Variants§

§

Insert

Text was inserted at a position.

Fields

§position: Position

Position where text was inserted.

§text: String

The inserted text.

§

Delete

Text was deleted at a position.

Fields

§position: Position

Position where deletion started.

§text: String

The deleted text.

Implementations§

Source§

impl Edit

Source

pub fn insert(position: Position, text: impl Into<String>) -> Self

Create an insert edit.

Source

pub fn delete(position: Position, text: impl Into<String>) -> Self

Create a delete edit.

Source

pub fn inverse(&self) -> Self

Get the inverse of this edit (for undo).

Insert becomes Delete and vice versa. The position and text are preserved.

Source

pub const fn position(&self) -> Position

Get the position where this edit occurred.

Source

pub fn text(&self) -> &str

Get the text involved in this edit.

Source

pub const fn is_insert(&self) -> bool

Check if this edit is an insertion.

Source

pub const fn is_delete(&self) -> bool

Check if this edit is a deletion.

Source

pub fn is_empty(&self) -> bool

Check if this edit has no effect (empty text).

Source

pub fn transform(&self, against: &Self) -> Self

Transform this edit’s position through another edit.

Returns a new edit with the same text but a position adjusted to account for the effect of against. This is the OT inclusion transformation (IT) applied at the edit level.

§Example
use reovim_kernel::api::v1::*;

// An insert at (0,5) transformed through an earlier insert of "abc" at (0,2)
let edit = Edit::insert(Position::new(0, 5), "hello");
let against = Edit::insert(Position::new(0, 2), "abc");
let transformed = edit.transform(&against);
assert_eq!(transformed.position(), Position::new(0, 8)); // 5 + 3
assert_eq!(transformed.text(), "hello"); // text unchanged

Trait Implementations§

Source§

impl Clone for Edit

Source§

fn clone(&self) -> Edit

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Edit

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl From<Edit> for Transaction

Source§

fn from(edit: Edit) -> Self

Converts to this type from the input type.
Source§

impl PartialEq for Edit

Source§

fn eq(&self, other: &Edit) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Eq for Edit

Source§

impl StructuralPartialEq for Edit

Auto Trait Implementations§

§

impl Freeze for Edit

§

impl RefUnwindSafe for Edit

§

impl Send for Edit

§

impl Sync for Edit

§

impl Unpin for Edit

§

impl UnsafeUnpin for Edit

§

impl UnwindSafe for Edit

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.