BufferTracker

Struct BufferTracker 

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

A tracker to keep up to date on changes to Buffers

This struct is capable of tracking all the Changes that happen to any Buffer. That happens through the BufferTracker::parts method, which gives a BufferParts struct, including the Buffer’s Bytes, Tags, Selections, as well as an ExactSizeIterator over the Changes that took place since the last call to this function, and a RangesToUpdate associated with the Buffer

The RangesToUpdate is a struct that keeps track of the ranges where changes have taken place, and informs you on which ones need to be updated based on what is currently visible on screen. At the start, this will include the full range of the Buffer, since Duat assumes that you will want to update the whole buffer.

This struct, alongside PerBuffer, allows for a nice and standardised workflow for “parsers”, which essentially update the Buffers based on changes that took place and on what is presently visible. One example of such a parser can be seen in the duat-treesitter crate.

Implementations§

Source§

impl BufferTracker

Source

pub const fn new() -> Self

Returns a new ChangesFetcher

This struct can be stored in a static variable, since this function is const. You can then use the same ChangesFetcher to fetch Changes from all Buffers

Source

pub fn parts<'b>(&self, buf: &'b mut Buffer) -> Option<BufferParts<'b>>

Gets the BufferParts of a Buffer

This struct consists of the normal TextParts, (Bytes, Tags, Selections), but it also includes an Iterator over all the Changes that took place since the last time this function was called by this tracker on this Buffer.

It is intended for borrowing the Tags mutably, whilst reading from the Bytes, Selections and the Changes that took place.

Returns None when calling this function on a Buffer without first having called BufferTracker::register_buffer on it.

Source

pub fn register_buffer(&self, buf: &mut Buffer)

Registers a Buffer on the list of those that should be tracked

Does nothing if the Buffer was already registered.

Trait Implementations§

Source§

impl Default for BufferTracker

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

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<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
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, 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.