Skip to content

Commit 2414691

Browse files
committed
refactor(state): use std.RawGet and keyof OpencodeState in annotations
1 parent ff2bf75 commit 2414691

3 files changed

Lines changed: 41 additions & 39 deletions

File tree

lua/opencode/state.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
return require('opencode.state.init')
1+
return require('opencode.state.init') --[[@as OpencodeStateModule]]

lua/opencode/state/init.lua

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
---@class OpencodeToggleDecision
2424
---@field action 'open'|'close'|'hide'|'close_hidden'|'restore_hidden'|'migrate'
2525

26-
---@class OpencodeState
26+
---@class OpencodeStateData
2727
---@field windows OpencodeWindowState|nil
2828
---@field is_opening boolean
2929
---@field input_content table
@@ -33,9 +33,10 @@
3333
---@field last_output_window_position integer[]|nil
3434
---@field last_code_win_before_opencode integer|nil
3535
---@field current_code_buf number|nil
36+
---@field current_code_view table|nil
3637
---@field saved_window_options table|nil
37-
---@field display_route any|nil
38-
---@field current_mode string
38+
---@field display_route string|nil
39+
---@field current_mode string|nil
3940
---@field last_output number
4041
---@field last_sent_context OpencodeContext|nil
4142
---@field current_context_config OpencodeContextConfig|nil
@@ -55,25 +56,14 @@
5556
---@field job_count number
5657
---@field user_message_count table<string, number>
5758
---@field opencode_server OpencodeServer|nil
58-
---@field api_client OpencodeApiClient
59+
---@field api_client OpencodeApiClient|nil
5960
---@field event_manager EventManager|nil
6061
---@field pre_zoom_width integer|nil
6162
---@field last_window_width_ratio number|nil
6263
---@field required_version string
6364
---@field opencode_cli_version string|nil
6465
---@field current_cwd string|nil
6566
---@field _hidden_buffers OpencodeHiddenBuffers|nil
66-
---@field append fun(key:string, value:any)
67-
---@field remove fun(key:string, idx:number)
68-
---@field subscribe fun(key:string|string[]|nil, cb:fun(key:string, new_val:any, old_val:any))
69-
---@field unsubscribe fun(key:string|nil, cb:fun(key:string, new_val:any, old_val:any))
70-
---@field is_running fun():boolean
71-
---@field session OpencodeSessionStateMutations
72-
---@field jobs OpencodeJobStateMutations
73-
---@field ui OpencodeUiStateMutations
74-
---@field model OpencodeModelStateMutations
75-
---@field renderer OpencodeRendererStateMutations
76-
---@field context OpencodeContextStateMutations
7767

7868
local store = require('opencode.state.store')
7969
local session = require('opencode.state.session')
@@ -83,6 +73,18 @@ local model = require('opencode.state.model')
8373
local renderer = require('opencode.state.renderer')
8474
local context = require('opencode.state.context')
8575

76+
---@class OpencodeStateModule
77+
---@field store OpencodeStateStore<OpencodeStateData>
78+
---@field session OpencodeSessionStateMutations
79+
---@field jobs OpencodeJobStateMutations
80+
---@field ui OpencodeUiStateMutations
81+
---@field model OpencodeModelStateMutations
82+
---@field renderer OpencodeRendererStateMutations
83+
---@field context OpencodeContextStateMutations
84+
---@field is_running fun():boolean
85+
86+
---@alias OpencodeState OpencodeStateModule & OpencodeStateData
87+
---@type OpencodeState
8688
local M = {
8789
store = store,
8890
session = session,

lua/opencode/state/store.lua

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
local M = {}
66

7-
---@type OpencodeState
7+
---@type OpencodeStateData
88
local _state = {
99
windows = nil,
1010
is_opening = false,
@@ -49,7 +49,7 @@ local _state = {
4949

5050
local _listeners = {}
5151

52-
---@param key string
52+
---@param key keyof OpencodeStateData
5353
---@param opts? OpencodeProtectedStateSetOptions
5454
local function error_on_raw_write(key, opts)
5555
if opts and opts.silent then
@@ -63,18 +63,18 @@ function M.state()
6363
return _state
6464
end
6565

66-
---@generic K extends keyof OpencodeState
66+
---@generic K extends keyof OpencodeStateData
6767
---@param key K
68-
---@return OpencodeState[K]
68+
---@return std.RawGet<OpencodeStateData, K>
6969
function M.get(key)
7070
return _state[key]
7171
end
7272

73-
---@generic K extends keyof OpencodeState
73+
---@generic K extends keyof OpencodeStateData
7474
---@param key K
75-
---@param value OpencodeState[K]
75+
---@param value std.RawGet<OpencodeStateData, K>
7676
---@param opts? OpencodeProtectedStateSetOptions
77-
---@return OpencodeState[K]
77+
---@return std.RawGet<OpencodeStateData, K>
7878
function M.set(key, value, opts)
7979
local old = _state[key]
8080
opts = opts or { source = 'helper' }
@@ -91,30 +91,30 @@ function M.set(key, value, opts)
9191
return value
9292
end
9393

94-
---@generic K extends keyof OpencodeState
94+
---@generic K extends keyof OpencodeStateData
9595
---@param key K
96-
---@param value OpencodeState[K]
96+
---@param value std.RawGet<OpencodeStateData, K>
9797
---@param opts? OpencodeProtectedStateSetOptions
98-
---@return OpencodeState[K]
98+
---@return std.RawGet<OpencodeStateData, K>
9999
function M.set_raw(key, value, opts)
100100
local next_opts = vim.tbl_extend('force', { source = 'raw' }, opts or {})
101101
return M.set(key, value, next_opts)
102102
end
103103

104-
---@generic K extends keyof OpencodeState
104+
---@generic K extends keyof OpencodeStateData
105105
---@param key K
106-
---@param updater fun(current: OpencodeState[K]): OpencodeState[K]
106+
---@param updater fun(current: std.RawGet<OpencodeStateData, K>): std.RawGet<OpencodeStateData, K>
107107
---@param opts? OpencodeProtectedStateSetOptions
108-
---@return OpencodeState[K]
108+
---@return std.RawGet<OpencodeStateData, K>
109109
function M.update(key, updater, opts)
110110
local next_value = updater(_state[key])
111111
M.set(key, next_value, opts)
112112
return next_value
113113
end
114114

115-
---@generic K extends keyof OpencodeState
115+
---@generic K extends keyof OpencodeStateData
116116
---@param key K|K[]|nil
117-
---@param cb fun(key:K, new_val:OpencodeState[K], old_val:OpencodeState[K])
117+
---@param cb fun(key:K, new_val:std.RawGet<OpencodeStateData, K>, old_val:std.RawGet<OpencodeStateData, K>)
118118
function M.subscribe(key, cb)
119119
if type(key) == 'table' then
120120
for _, current_key in ipairs(key) do
@@ -137,9 +137,9 @@ function M.subscribe(key, cb)
137137
table.insert(_listeners[key], cb)
138138
end
139139

140-
---@generic K extends keyof OpencodeState
140+
---@generic K extends keyof OpencodeStateData
141141
---@param key K|nil
142-
---@param cb fun(key:K, new_val:OpencodeState[K], old_val:OpencodeState[K])
142+
---@param cb fun(key:K, new_val:std.RawGet<OpencodeStateData, K>, old_val:std.RawGet<OpencodeStateData, K>)
143143
function M.unsubscribe(key, cb)
144144
key = key or '*'
145145
local list = _listeners[key]
@@ -154,10 +154,10 @@ function M.unsubscribe(key, cb)
154154
end
155155
end
156156

157-
---@generic K extends keyof OpencodeState
157+
---@generic K extends keyof OpencodeStateData
158158
---@param key K
159-
---@param new_val OpencodeState[K]
160-
---@param old_val OpencodeState[K]
159+
---@param new_val std.RawGet<OpencodeStateData, K>
160+
---@param old_val std.RawGet<OpencodeStateData, K>
161161
function M.emit(key, new_val, old_val)
162162
vim.schedule(function()
163163
if _listeners[key] then
@@ -177,9 +177,9 @@ function M.emit(key, new_val, old_val)
177177
end)
178178
end
179179

180-
---@generic K extends keyof OpencodeState
180+
---@generic K extends keyof OpencodeStateData
181181
---@param key K
182-
---@param value OpencodeState[K] extends any[] and OpencodeState[K][integer] or never
182+
---@param value std.RawGet<OpencodeStateData, K> extends any[] and std.RawGet<OpencodeStateData, K>[integer] or never
183183
function M.append(key, value)
184184
if type(value) ~= 'table' then
185185
error('Value must be a table to append')
@@ -196,7 +196,7 @@ function M.append(key, value)
196196
M.emit(key, _state[key], old)
197197
end
198198

199-
---@generic K extends keyof OpencodeState
199+
---@generic K extends keyof OpencodeStateData
200200
---@param key K
201201
---@param idx integer
202202
function M.remove(key, idx)

0 commit comments

Comments
 (0)