Minga.Editing.Completion.Session (Minga v0.1.0)

Copy Markdown View Source

Pure lifecycle authority for one completion interaction.

Every request, batch, selection, and resolve operation carries the stable session, provider, and item identity needed to reject late work after supersession or teardown.

Summary

Types

Provider request identity and cancellation target.

Resolve work owned by this session.

Stable resolve identity for one selected item.

Whether ranking or explicit user navigation owns the current selection.

t()

Functions

Accepts a batch only when it exactly matches the live provider request identity.

Moves a debounced session into provider-request ownership.

Starts debounced resolve work for the current stable item identity.

Clears resolve ownership and returns its cancellation target and timer.

Advances the session snapshot after local filtering sends no provider request.

Returns whether a response still belongs to this exact session and buffer snapshot.

Clears one failed provider request only when its request identity is still current.

Clears a failed resolve only when its stable identity and request ref are current.

Finds one item by stable identity.

Returns incomplete providers that require an LSP trigger-kind-3 refresh.

Returns the provider-aware normalized index owned by this session.

Returns every candidate in deterministic provider and sort order.

Creates a completion session around one exact buffer snapshot.

Marks a locally previewed item so teardown can clear that ownership explicitly.

Installs the debounce timer owned by this session.

Registers one independently cancellable request per provider.

Returns whether an exact resolve identity and request ref remain active.

Applies resolved documentation only to the exact live resolve identity and request.

Advances an existing session for trigger-kind-3 requests while retaining complete batches.

Returns providers whose incomplete batch or pending request must refresh after input.

Records an explicit user selection by stable identity. Unknown or stale identities are ignored.

Returns cancellation targets and timers while clearing every owned lifecycle value.

Records the independently cancellable request ref for the active resolve.

Types

provider_request()

@type provider_request() :: {client :: pid(), request_ref :: reference()}

Provider request identity and cancellation target.

resolve()

@type resolve() :: %{
  identity: resolve_identity(),
  client: pid(),
  timer: reference() | nil,
  request_ref: reference() | nil
}

Resolve work owned by this session.

resolve_identity()

Stable resolve identity for one selected item.

selection_origin()

@type selection_origin() :: :automatic | :user

Whether ranking or explicit user navigation owns the current selection.

t()

@type t() :: %Minga.Editing.Completion.Session{
  batches: %{
    required(Minga.Editing.Completion.Item.provider_id()) =>
      Minga.Editing.Completion.ProviderBatch.t()
  },
  buffer: pid(),
  buffer_version: non_neg_integer(),
  debounce_timer: reference() | nil,
  dismissed?: boolean(),
  generation: non_neg_integer(),
  id: reference(),
  index: Minga.Editing.Completion.Index.t(),
  previewed_item_id: Minga.Editing.Completion.Item.id() | nil,
  provider_order: [Minga.Editing.Completion.Item.provider_id()],
  provider_requests: %{
    required(Minga.Editing.Completion.Item.provider_id()) => provider_request()
  },
  resolve: resolve() | nil,
  selected_item_id: Minga.Editing.Completion.Item.id() | nil,
  selection_origin: selection_origin(),
  trigger_position: {non_neg_integer(), non_neg_integer()}
}

Functions

accept_batch(session, batch)

@spec accept_batch(t(), Minga.Editing.Completion.ProviderBatch.t()) ::
  {:ok, t()} | :stale

Accepts a batch only when it exactly matches the live provider request identity.

activate(session, trigger_position)

@spec activate(t(), {non_neg_integer(), non_neg_integer()}) :: t()

Moves a debounced session into provider-request ownership.

begin_resolve(session, item_id, client, timer)

@spec begin_resolve(t(), Minga.Editing.Completion.Item.id(), pid(), reference() | nil) ::
  {:ok, t()} | :stale

Starts debounced resolve work for the current stable item identity.

clear_resolve(session)

@spec clear_resolve(t()) :: {t(), provider_request() | nil, reference() | nil}

Clears resolve ownership and returns its cancellation target and timer.

continue_locally(session, buffer_version)

@spec continue_locally(t(), non_neg_integer()) :: t()

Advances the session snapshot after local filtering sends no provider request.

current?(session, id, generation, buffer, version)

@spec current?(t(), reference(), non_neg_integer(), pid(), non_neg_integer()) ::
  boolean()

Returns whether a response still belongs to this exact session and buffer snapshot.

fail_request(session, provider_id, request_ref)

@spec fail_request(t(), Minga.Editing.Completion.Item.provider_id(), reference()) ::
  {:ok, t()} | :stale

Clears one failed provider request only when its request identity is still current.

fail_resolve(session, identity, request_ref)

@spec fail_resolve(t(), resolve_identity(), reference()) :: {:ok, t()} | :stale

Clears a failed resolve only when its stable identity and request ref are current.

find_item(session, item_id)

Finds one item by stable identity.

incomplete_providers(session)

@spec incomplete_providers(t()) :: [
  {Minga.Editing.Completion.Item.provider_id(), pid()}
]

Returns incomplete providers that require an LSP trigger-kind-3 refresh.

index(session)

@spec index(t()) :: Minga.Editing.Completion.Index.t()

Returns the provider-aware normalized index owned by this session.

items(session)

@spec items(t()) :: [Minga.Editing.Completion.Item.t()]

Returns every candidate in deterministic provider and sort order.

new(id, generation, buffer, buffer_version, trigger_position)

Creates a completion session around one exact buffer snapshot.

preview(session, item_id)

@spec preview(t(), Minga.Editing.Completion.Item.id() | nil) :: t()

Marks a locally previewed item so teardown can clear that ownership explicitly.

put_debounce_timer(session, timer)

@spec put_debounce_timer(t(), reference() | nil) :: t()

Installs the debounce timer owned by this session.

register_requests(session, requests)

@spec register_requests(t(), [
  {Minga.Editing.Completion.Item.provider_id(), pid(), reference()}
]) :: t()

Registers one independently cancellable request per provider.

resolve_current?(session, identity, ref)

@spec resolve_current?(t(), resolve_identity(), reference()) :: boolean()

Returns whether an exact resolve identity and request ref remain active.

resolve_item(session, identity, ref, documentation)

@spec resolve_item(t(), resolve_identity(), reference(), String.t()) ::
  {:ok, t()} | :stale

Applies resolved documentation only to the exact live resolve identity and request.

retrigger(session, generation, buffer_version, requests)

Advances an existing session for trigger-kind-3 requests while retaining complete batches.

retrigger_providers(session)

@spec retrigger_providers(t()) :: [
  {Minga.Editing.Completion.Item.provider_id(), pid()}
]

Returns providers whose incomplete batch or pending request must refresh after input.

select(session, item_id)

@spec select(t(), Minga.Editing.Completion.Item.id() | nil) :: t()

Records an explicit user selection by stable identity. Unknown or stale identities are ignored.

teardown(session)

@spec teardown(t()) :: {t(), [provider_request()], [reference()]}

Returns cancellation targets and timers while clearing every owned lifecycle value.

track_resolve(session, identity, ref)

@spec track_resolve(t(), resolve_identity(), reference()) :: {:ok, t()} | :stale

Records the independently cancellable request ref for the active resolve.