Skip to main content

SnapshotFoldProvider

Struct SnapshotFoldProvider 

Source
pub struct SnapshotFoldProvider { /* private fields */ }
Expand description

Owned-snapshot FoldProvider adapter. Carries a copy of the buffer’s fold list (one Vec<Fold> clone — fold lists are tiny in practice) plus the buffer’s row_count, so the call site can hold the snapshot for fold queries while passing &mut hjkl_buffer::View to a motion function that needs cursor mutation.

Introduced in 0.0.40 (Patch C-δ.5) so the lifted motion fns can take &dyn FoldProvider separately from &mut B: Cursor + Query without the call site running into the immutable-vs-mutable borrow conflict that arises with BufferFoldProvider / BufferFoldProviderMut (both of which hold a buffer borrow).

The snapshot is read-only — apply and invalidate_range are no-ops (any fold mutation must go through the canonical BufferFoldProviderMut adapter against the live buffer).

Implementations§

Source§

impl SnapshotFoldProvider

Source

pub fn from_buffer(buffer: &RopeBuffer) -> Self

Snapshot the current fold list + row-count from buffer. The snapshot is decoupled from the buffer’s lifetime, so the caller can immediately re-borrow the buffer mutably.

Trait Implementations§

Source§

impl FoldProvider for SnapshotFoldProvider

Source§

fn next_visible_row(&self, row: usize, _row_count: usize) -> Option<usize>

First visible row strictly after row, skipping hidden rows. None past the end of the buffer.
Source§

fn prev_visible_row(&self, row: usize) -> Option<usize>

First visible row strictly before row. None past the top.
Source§

fn is_row_hidden(&self, row: usize) -> bool

Is row currently hidden by a closed fold?
Source§

fn fold_at_row(&self, row: usize) -> Option<(usize, usize, bool)>

Range (start_row, end_row, closed) of the fold containing row, if any. Lets za / zo / zc find their target without iterating the full fold list.
Source§

fn apply(&mut self, op: FoldOp)

Apply a FoldOp to the underlying fold storage. Read-only providers (e.g. crate::buffer_impl::BufferFoldProvider which holds a &View) and providers that don’t track folds (e.g. NoopFoldProvider) implement this as a no-op. Read more
Source§

fn invalidate_range(&mut self, start_row: usize, end_row: usize)

Drop every fold whose range overlaps [start_row, end_row]. Edit pipelines call this after a user edit so vim’s “edits inside a fold open it” behaviour fires. Default impl forwards to FoldProvider::apply with a FoldOp::Invalidate.

Auto Trait Implementations§

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

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.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more