Skip to content

Commit d10eef2

Browse files
committed
refactor(ui): expose find_message_in_state and avoid circular dependency
Export find_message_in_state as M.find_message_in_state in lua/opencode/ui/renderer.lua and update events.lua to call it via a lazy require through a new local helper find_message_by_id. This removes duplicated lookup logic and prevents the circular dependency between renderer.lua and events.lua without changing runtime behavior.
1 parent 3cfd40d commit d10eef2

2 files changed

Lines changed: 8 additions & 14 deletions

File tree

lua/opencode/ui/renderer.lua

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ end
107107

108108
---@param message_id string
109109
---@return OpencodeMessage|nil
110-
local function find_message_in_state(message_id)
110+
M.find_message_in_state = function(message_id)
111111
for _, message in ipairs(state.messages or {}) do
112112
if message.info and message.info.id == message_id then
113113
return message
@@ -137,7 +137,7 @@ end
137137
---@param message_id string
138138
local function hide_rendered_message(message_id)
139139
local rendered_message = ctx.render_state:get_message(message_id)
140-
local message = rendered_message and rendered_message.message or find_message_in_state(message_id)
140+
local message = rendered_message and rendered_message.message or M.find_message_in_state(message_id)
141141
if not message then
142142
return
143143
end

lua/opencode/ui/renderer/events.lua

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -33,23 +33,17 @@ local function find_text_part_for_message(message)
3333
return nil
3434
end
3535

36+
-- Lazy require to avoid circular dependency: renderer.lua <-> events.lua
3637
---@param message_id string|nil
3738
---@return OpencodeMessage|nil
38-
local function find_message_in_state(message_id)
39+
local function find_message_by_id(message_id)
3940
if not message_id then
4041
return nil
4142
end
4243

43-
for _, message in ipairs(state.messages or {}) do
44-
if message.info and message.info.id == message_id then
45-
return message
46-
end
47-
end
48-
49-
return nil
44+
return require('opencode.ui.renderer').find_message_in_state(message_id)
5045
end
5146

52-
-- Lazy require to avoid circular dependency: renderer.lua <-> events.lua
5347
---@param force? boolean
5448
local function scroll(force)
5549
require('opencode.ui.renderer').scroll_to_bottom(force)
@@ -187,7 +181,7 @@ function M.on_message_updated(message, revert_index)
187181
end
188182

189183
local rendered_message = ctx.render_state:get_message(msg.info.id)
190-
local found_msg = rendered_message and rendered_message.message or find_message_in_state(msg.info.id)
184+
local found_msg = rendered_message and rendered_message.message or find_message_by_id(msg.info.id)
191185

192186
if revert_index then
193187
if not found_msg then
@@ -250,7 +244,7 @@ function M.on_message_removed(properties)
250244
end
251245

252246
local rendered_message = ctx.render_state:get_message(message_id)
253-
local message = rendered_message and rendered_message.message or find_message_in_state(message_id)
247+
local message = rendered_message and rendered_message.message or find_message_by_id(message_id)
254248
ctx.render_state:clear_orphan_parts(message_id)
255249
if not message then
256250
return
@@ -303,7 +297,7 @@ function M.on_part_updated(properties, revert_index)
303297

304298
local rendered_message = ctx.render_state:get_message(part.messageID)
305299
if not rendered_message then
306-
local existing_message = find_message_in_state(part.messageID)
300+
local existing_message = find_message_by_id(part.messageID)
307301
if existing_message then
308302
ctx.render_state:set_message(existing_message)
309303
rendered_message = ctx.render_state:get_message(part.messageID)

0 commit comments

Comments
 (0)