Minga.Buffer.ChangeLog (Minga v0.1.0)

Copy Markdown View Source

Ordered record of edit deltas that lets sync consumers catch up independently.

The buffer process applies edits to the document immediately. This struct remembers the resulting Minga.Buffer.EditDelta values for systems that sync incrementally, such as highlighting or language tooling. Each consumer keeps its own cursor, so one consumer reading changes does not steal them from another consumer.

This module is pure state. It does not broadcast events, adjust decorations, or know about GenServer calls.

Summary

Functions

Clears all recorded changes and consumer cursors.

Returns globally pending changes in edit order and clears that legacy pending list.

Creates an empty change log.

Records a new edit delta.

Returns changes unseen by consumer in edit order and advances that consumer's cursor.

Types

consumer()

@type consumer() :: atom()

entry()

@type entry() :: {sequence(), Minga.Buffer.EditDelta.t()}

sequence()

@type sequence() :: non_neg_integer()

t()

@opaque t()

unseen_changes()

@type unseen_changes() :: {:ok, [Minga.Buffer.EditDelta.t()]} | :reset_required

Functions

clear(log)

@spec clear(t()) :: t()

Clears all recorded changes and consumer cursors.

drain_pending_changes(log)

@spec drain_pending_changes(t()) :: {[Minga.Buffer.EditDelta.t()], t()}

Returns globally pending changes in edit order and clears that legacy pending list.

new()

@spec new() :: t()

Creates an empty change log.

record_change(log, delta)

@spec record_change(t(), Minga.Buffer.EditDelta.t()) :: t()

Records a new edit delta.

take_unseen_changes(log, consumer)

@spec take_unseen_changes(t(), consumer()) :: {unseen_changes(), t()}

Returns changes unseen by consumer in edit order and advances that consumer's cursor.

Returns :reset_required when older retained entries were compacted before the consumer caught up. Callers must full-sync their downstream state in that case.