MingaEditor.Handlers.EffectHandler (Minga v0.1.0)

Copy Markdown View Source

Interprets side-effect instructions returned by event handlers.

Agent event handlers return {new_state, [effect()]} from their callbacks. This module walks the effect list and applies each one, keeping handlers testable as pure state -> {state, effects} functions.

Summary

Types

Side effects returned by event handlers and pure state functions.

Functions

Applies a list of effects to the editor state.

Types

effect()

@type effect() ::
  :render
  | :render_now
  | {:render, delay_ms :: pos_integer()}
  | {:open_file, String.t()}
  | {:switch_buffer, pid()}
  | {:set_status, String.t()}
  | :clear_status
  | {:push_overlay, module()}
  | {:pop_overlay, module()}
  | {:log_message, String.t()}
  | {:log_warning, String.t()}
  | {:log, atom(), atom(), String.t()}
  | :sync_agent_buffer
  | {:update_tab_label, String.t()}
  | {:monitor, pid()}
  | :stop_spinner
  | :start_spinner
  | {:rebuild_agent_session, MingaEditor.State.Tab.t()}
  | {:request_semantic_tokens}
  | {:send_after, term(), non_neg_integer()}
  | {:conceal_spans, pid(), [map()]}
  | {:prettify_symbols, pid()}
  | {:update_agent_styled_cache}
  | {:evict_parser_trees_timer}
  | {:refresh_tool_picker}
  | {:save_session_async, term(), keyword()}
  | {:compact_session, pid()}
  | {:restart_session_timer}
  | {:cancel_session_timer}
  | {:recover_swap_entries, [Minga.Session.swap_entry()]}
  | {:restore_session, keyword()}
  | {:request_code_lens}
  | {:request_inlay_hints}
  | {:save_session_deferred}
  | {:schedule_file_tree_refresh, non_neg_integer()}
  | {:handle_git_remote_result, reference(), term()}

Side effects returned by event handlers and pure state functions.

  • :render — schedule a debounced render
  • {:render, delay_ms} — schedule render with custom delay
  • {:open_file, path} — open a file in a new or existing buffer
  • {:switch_buffer, pid} — make this buffer active
  • {:set_status, msg} — show a status message in the minibuffer
  • :clear_status — clear the status message
  • {:push_overlay, module} — push an overlay handler onto the focus stack
  • {:pop_overlay, module} — pop an overlay handler from the focus stack
  • {:log_message, msg} — log to Messages buffer
  • {:log_warning, msg} — log to both Messages and Warnings (warning level)
  • {:log, subsystem, level, msg} — log via Minga.Log
  • :sync_agent_buffer — sync agent buffer with session output
  • {:update_tab_label, label} — update active tab label
  • {:monitor, pid} — monitor a buffer process
  • {:stop_spinner} — cancel outgoing agent spinner timer
  • {:start_spinner} — start incoming agent spinner timer
  • {:rebuild_agent_session, tab} — rebuild agent state from session process
  • {:request_semantic_tokens} — request semantic tokens from LSP
  • {:send_after, msg, delay} — schedule a self-send after delay
  • {:conceal_spans, pid, spans} — apply conceal spans to a buffer
  • {:prettify_symbols, pid} — run prettify symbols on a buffer
  • {:update_agent_styled_cache} — re-cache GUI styled messages
  • {:evict_parser_trees_timer} — schedule next eviction check
  • {:refresh_tool_picker} — refresh tool picker if open
  • {:save_session_async, snapshot, opts} — persist session in background
  • {:restart_session_timer} — restart the periodic session timer
  • {:cancel_session_timer} — cancel the periodic session timer
  • {:recover_swap_entries, entries} — recover swap file entries
  • {:restore_session, opts} — restore session from disk
  • {:request_code_lens} — request fresh code lenses from LSP
  • {:request_inlay_hints} — request fresh inlay hints from LSP
  • :render_now — render immediately after a handler updates state
  • {:save_session_deferred} — send :save_session to self
  • {:schedule_file_tree_refresh, delay} — debounce one filesystem tree refresh
  • {:handle_git_remote_result, ref, result} — process git remote result

Functions

apply_effects(state, list)

@spec apply_effects(MingaEditor.State.t(), [effect()]) :: MingaEditor.State.t()

Applies a list of effects to the editor state.

Agent event handlers return {new_state, [effect()]} from their callbacks. The Editor interprets each effect. This keeps handlers testable as pure state -> {state, effects} functions.