Binary protocol encoding/decoding for the tree-sitter parser Port.
The parser Port (minga-parser) speaks the same wire format as the
frontend Port (minga-renderer). This module owns the parser-specific
opcodes and encode/decode functions. MingaEditor.Frontend.Protocol
delegates parser functions here so existing Layer 2 callers work
unchanged.
This is a Layer 0 module. It has no dependencies on MingaEditor.*.
Summary
Types
A conceal span from tree-sitter: byte range + replacement text.
A single edit delta for incremental content sync.
Functions
Decodes a parser event from a binary payload.
Encodes a close_buffer command: buffer_id(4).
Encodes an edit_buffer command with buffer_id, version, and a list of edit deltas.
Encodes a load_grammar command.
Encodes a parse_buffer command with buffer_id and version counter.
Encodes a query_language_at request: buffer_id(4) + request_id(4) + byte_offset(4).
Encodes a request_indent command: buffer_id(4) + request_id(4) + line(4).
Encodes a request_textobject command: buffer_id(4) + request_id(4) + row(4) + col(4) + name_len(2) + name.
Encodes a set_fold_query command with buffer_id.
Encodes a set_highlight_query command with buffer_id.
Encodes a set_indent_query command with buffer_id.
Encodes a set_injection_query command with buffer_id.
Encodes a set_language command with buffer_id.
Encodes a set_textobject_query command with buffer_id.
Types
@type conceal_span() :: %{ start_byte: non_neg_integer(), end_byte: non_neg_integer(), replacement: String.t() }
A conceal span from tree-sitter: byte range + replacement text.
@type edit_delta() :: %{ start_byte: non_neg_integer(), old_end_byte: non_neg_integer(), new_end_byte: non_neg_integer(), start_position: {non_neg_integer(), non_neg_integer()}, old_end_position: {non_neg_integer(), non_neg_integer()}, new_end_position: {non_neg_integer(), non_neg_integer()}, inserted_text: String.t() }
A single edit delta for incremental content sync.
Functions
Decodes a parser event from a binary payload.
Returns {:ok, event} for recognized parser opcodes, :unknown for
unrecognized opcodes (which may be input events handled by
MingaEditor.Frontend.Protocol), or {:error, :malformed} for
truncated data.
@spec encode_close_buffer(non_neg_integer()) :: binary()
Encodes a close_buffer command: buffer_id(4).
@spec encode_edit_buffer(non_neg_integer(), non_neg_integer(), [edit_delta()]) :: binary()
Encodes an edit_buffer command with buffer_id, version, and a list of edit deltas.
Each delta describes a replacement: the range [start_byte, old_end_byte) is
replaced with inserted_text, producing a range [start_byte, new_end_byte).
Encodes a load_grammar command.
@spec encode_parse_buffer(non_neg_integer(), non_neg_integer(), String.t()) :: binary()
Encodes a parse_buffer command with buffer_id and version counter.
@spec encode_query_language_at( non_neg_integer(), non_neg_integer(), non_neg_integer() ) :: binary()
Encodes a query_language_at request: buffer_id(4) + request_id(4) + byte_offset(4).
@spec encode_request_indent(non_neg_integer(), non_neg_integer(), non_neg_integer()) :: binary()
Encodes a request_indent command: buffer_id(4) + request_id(4) + line(4).
@spec encode_request_textobject( non_neg_integer(), non_neg_integer(), non_neg_integer(), non_neg_integer(), String.t() ) :: binary()
Encodes a request_textobject command: buffer_id(4) + request_id(4) + row(4) + col(4) + name_len(2) + name.
@spec encode_set_fold_query(non_neg_integer(), String.t()) :: binary()
Encodes a set_fold_query command with buffer_id.
@spec encode_set_highlight_query(non_neg_integer(), String.t()) :: binary()
Encodes a set_highlight_query command with buffer_id.
@spec encode_set_indent_query(non_neg_integer(), String.t()) :: binary()
Encodes a set_indent_query command with buffer_id.
@spec encode_set_injection_query(non_neg_integer(), String.t()) :: binary()
Encodes a set_injection_query command with buffer_id.
@spec encode_set_language(non_neg_integer(), String.t()) :: binary()
Encodes a set_language command with buffer_id.
@spec encode_set_textobject_query(non_neg_integer(), String.t()) :: binary()
Encodes a set_textobject_query command with buffer_id.