MingaEditor.State.LSP.PendingRequests (Minga v0.1.0)

Copy Markdown View Source

Pure indexes for Editor-global LSP request correlations.

One response reference has exactly one semantic owner. Formatting keeps extra Buffer and newest indexes for cancellation while all request variants share the by_ref authority.

Summary

Types

operation_kind()

@type operation_kind() :: :references | :rename

position()

@type position() :: {non_neg_integer(), non_neg_integer()}

request()

t()

@type t() :: %MingaEditor.State.LSP.PendingRequests{
  by_ref: %{required(reference()) => request()},
  format_by_buffer: %{required(pid()) => reference()},
  newest_formats: [reference()]
}

Functions

drop_completion_requests(pending)

@spec drop_completion_requests(t()) :: t()

drop_format(pending, ref)

@spec drop_format(t(), reference()) :: t()

fetch(pending, ref)

@spec fetch(t(), reference()) :: {:ok, request()} | :error

fetch_format(pending, ref)

@spec fetch_format(t(), reference()) ::
  {:ok, MingaEditor.State.LSP.FormatOperation.t()} | :error

format_active?(pending, ref)

@spec format_active?(t(), reference()) :: boolean()

format_for_buffer(pending, buffer)

@spec format_for_buffer(t(), pid()) :: MingaEditor.State.LSP.FormatOperation.t() | nil

new()

@spec new() :: t()

newest_format(pending)

@spec newest_format(t()) :: MingaEditor.State.LSP.FormatOperation.t() | nil

take(pending, ref)

@spec take(t(), reference()) :: {:ok, request(), t()} | :error

take_operations_for_tab(pending, tab_id)

@spec take_operations_for_tab(t(), MingaEditor.State.Tab.id()) :: {[request()], t()}

track_completion_resolve(pending, ref, client, buffer, version, gen, raw_item)

@spec track_completion_resolve(
  t(),
  reference(),
  pid(),
  pid(),
  non_neg_integer(),
  non_neg_integer(),
  map()
) :: {:ok, t()} | {:error, :duplicate_ref}

track_completion_result(pending, ref, role, client, buffer, version, gen, pos)

@spec track_completion_result(
  t(),
  reference(),
  MingaEditor.CompletionTrigger.response_role(),
  pid(),
  pid(),
  non_neg_integer(),
  non_neg_integer(),
  position()
) :: {:ok, t()} | {:error, :duplicate_ref}

track_format(pending, operation)

@spec track_format(t(), MingaEditor.State.LSP.FormatOperation.t()) ::
  {:ok, t()} | {:error, :duplicate_ref | :buffer_busy}

track_hover_mouse(pending, ref, row, col, buffer, buffer_line, buffer_col, version)

@spec track_hover_mouse(
  t(),
  reference(),
  non_neg_integer(),
  non_neg_integer(),
  pid(),
  non_neg_integer(),
  non_neg_integer(),
  non_neg_integer()
) :: {:ok, t()} | {:error, :duplicate_ref}

track_inlay_hint(pending, ref, client, buffer, version, tab_id, viewport_top, viewport_rows)

@spec track_inlay_hint(
  t(),
  reference(),
  pid(),
  pid(),
  non_neg_integer(),
  MingaEditor.State.Tab.id() | nil,
  non_neg_integer(),
  pos_integer()
) :: {:ok, t()} | {:error, :duplicate_ref}

track_operation(pending, ref, kind, operation_id, tab_id)

@spec track_operation(
  t(),
  reference(),
  operation_kind(),
  MingaEditor.State.Operation.id(),
  MingaEditor.State.Tab.id() | nil
) :: {:ok, t()} | {:error, :duplicate_ref}

track_response(pending, ref, kind, client, buffer, version, tab_id, cursor)

@spec track_response(
  t(),
  reference(),
  MingaEditor.State.LSP.current_origin_response_kind(),
  pid(),
  pid(),
  non_neg_integer(),
  MingaEditor.State.Tab.id() | nil,
  {non_neg_integer(), non_neg_integer()} | nil
) :: {:ok, t()} | {:error, :duplicate_ref}

track_semantic_tokens(pending, ref, client, buffer, version, encoding, arg)

@spec track_semantic_tokens(
  t(),
  reference(),
  pid(),
  pid(),
  non_neg_integer(),
  Minga.LSP.PositionEncoding.encoding(),
  {[String.t()], [String.t()]}
) :: {:ok, t()} | {:error, :duplicate_ref}

track_signature_help(pending, ref, client, buffer, version, cursor)

@spec track_signature_help(
  t(),
  reference(),
  pid(),
  pid(),
  non_neg_integer(),
  position()
) ::
  {:ok, t()} | {:error, :duplicate_ref}