Minga.Parser.Protocol (Minga v0.1.0)

Copy Markdown View Source

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

conceal_span()

@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.

edit_delta()

@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

decode_event(arg1)

@spec decode_event(binary()) :: {:ok, term()} | :unknown | {:error, :malformed}

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.

encode_close_buffer(buffer_id)

@spec encode_close_buffer(non_neg_integer()) :: binary()

Encodes a close_buffer command: buffer_id(4).

encode_edit_buffer(buffer_id, version, edits)

@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).

encode_load_grammar(name, path)

@spec encode_load_grammar(String.t(), String.t()) :: binary()

Encodes a load_grammar command.

encode_parse_buffer(buffer_id, version, source)

@spec encode_parse_buffer(non_neg_integer(), non_neg_integer(), String.t()) ::
  binary()

Encodes a parse_buffer command with buffer_id and version counter.

encode_query_language_at(buffer_id, request_id, byte_offset)

@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).

encode_request_indent(buffer_id, request_id, line)

@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).

encode_request_textobject(buffer_id, request_id, row, col, capture_name)

@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.

encode_set_fold_query(buffer_id, query)

@spec encode_set_fold_query(non_neg_integer(), String.t()) :: binary()

Encodes a set_fold_query command with buffer_id.

encode_set_highlight_query(buffer_id, query)

@spec encode_set_highlight_query(non_neg_integer(), String.t()) :: binary()

Encodes a set_highlight_query command with buffer_id.

encode_set_indent_query(buffer_id, query)

@spec encode_set_indent_query(non_neg_integer(), String.t()) :: binary()

Encodes a set_indent_query command with buffer_id.

encode_set_injection_query(buffer_id, query)

@spec encode_set_injection_query(non_neg_integer(), String.t()) :: binary()

Encodes a set_injection_query command with buffer_id.

encode_set_language(buffer_id, name)

@spec encode_set_language(non_neg_integer(), String.t()) :: binary()

Encodes a set_language command with buffer_id.

encode_set_textobject_query(buffer_id, query)

@spec encode_set_textobject_query(non_neg_integer(), String.t()) :: binary()

Encodes a set_textobject_query command with buffer_id.