Skip to content

Commit 2f5b983

Browse files
committed
refactor(renderer): pass properties to handler
1 parent 0a39c01 commit 2f5b983

File tree

4 files changed

+42
-40
lines changed

4 files changed

+42
-40
lines changed

lua/opencode/event_manager.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ function EventManager:_subscribe_to_server_events(server)
271271
local emitter = function(event)
272272
-- schedule events to allow for similar pieces of state to be updated
273273
vim.schedule(function()
274-
self:emit(event.type, event)
274+
self:emit(event.type, event.properties)
275275
end)
276276
end
277277

lua/opencode/ui/renderer.lua

Lines changed: 33 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -352,14 +352,14 @@ end
352352

353353
---Event handler for message.updated events
354354
---Creates new message or updates existing message info
355-
---@param event EventMessageUpdated Event object
356-
function M.on_message_updated(event)
357-
if not event or not event.properties or not event.properties.info then
355+
---@param properties {info: MessageInfo} Event properties
356+
function M.on_message_updated(properties)
357+
if not properties or not properties.info then
358358
return
359359
end
360360

361361
---@type OpencodeMessage
362-
local message = event.properties
362+
local message = properties
363363
if not message.info.id or not message.info.sessionID then
364364
return
365365
end
@@ -373,31 +373,32 @@ function M.on_message_updated(event)
373373

374374
if found_idx then
375375
state.messages[found_idx].info = message.info
376+
M._update_stats_from_message(message)
376377
else
377378
table.insert(state.messages, message)
378379
found_idx = #state.messages
379380
M._message_map:add_message(message.info.id, found_idx)
380381

381-
M._write_message_header(message, found_idx)
382+
M._update_stats_from_message(message)
382383

384+
M._write_message_header(message, found_idx)
383385
if message.info.role == 'user' then
384386
state.last_user_message = message
385387
end
386388
end
387-
M._update_stats_from_message(message)
388389

389390
M._scroll_to_bottom()
390391
end
391392

392393
---Event handler for message.part.updated events
393394
---Inserts new parts or replaces existing parts in buffer
394-
---@param event EventMessagePartUpdated Event object
395-
function M.on_part_updated(event)
396-
if not event or not event.properties or not event.properties.part then
395+
---@param properties {part: MessagePart} Event properties
396+
function M.on_part_updated(properties)
397+
if not properties or not properties.part then
397398
return
398399
end
399400

400-
local part = event.properties.part
401+
local part = properties.part
401402
if not part.id or not part.messageID or not part.sessionID then
402403
return
403404
end
@@ -470,13 +471,13 @@ function M.on_part_updated(event)
470471
end
471472

472473
---Event handler for message.part.removed events
473-
---@param event EventMessagePartRemoved Event object
474-
function M.on_part_removed(event)
475-
if not event or not event.properties then
474+
---@param properties {sessionID: string, messageID: string, partID: string} Event properties
475+
function M.on_part_removed(properties)
476+
if not properties then
476477
return
477478
end
478479

479-
local part_id = event.properties.partID
480+
local part_id = properties.partID
480481
if not part_id then
481482
return
482483
end
@@ -493,13 +494,13 @@ end
493494

494495
---Event handler for message.removed events
495496
---Removes message and all its parts from buffer
496-
---@param event EventMessageRemoved Event object
497-
function M.on_message_removed(event)
498-
if not event or not event.properties then
497+
---@param properties {sessionID: string, messageID: string} Event properties
498+
function M.on_message_removed(properties)
499+
if not properties then
499500
return
500501
end
501502

502-
local message_id = event.properties.messageID
503+
local message_id = properties.messageID
503504
if not message_id then
504505
return
505506
end
@@ -520,22 +521,22 @@ function M.on_message_removed(event)
520521
end
521522

522523
---Event handler for session.compacted events
523-
---@param event EventSessionCompacted Event object
524-
function M.on_session_compacted(event)
524+
---@param properties {sessionID: string} Event properties
525+
function M.on_session_compacted(properties)
525526
vim.notify('on_session_compacted')
526527
-- TODO: render a note that the session was compacted
527528
-- FIXME: did we need unset state.last_sent_context because the
528529
-- session was compacted?
529530
end
530531

531532
---Event handler for session.error events
532-
---@param event EventSessionError Event object
533-
function M.on_session_error(event)
534-
if not event or not event.properties or not event.properties.error then
533+
---@param properties {sessionID: string, error: table} Event properties
534+
function M.on_session_error(properties)
535+
if not properties or not properties.error then
535536
return
536537
end
537538

538-
local error_data = event.properties.error
539+
local error_data = properties.error
539540
local error_message = error_data.data and error_data.data.message or vim.inspect(error_data)
540541

541542
local formatted = formatter.format_error_callout(error_message)
@@ -546,13 +547,13 @@ end
546547

547548
---Event handler for permission.updated events
548549
---Re-renders part that requires permission
549-
---@param event EventPermissionUpdated Event object
550-
function M.on_permission_updated(event)
551-
if not event or not event.properties then
550+
---@param properties OpencodePermission Event properties
551+
function M.on_permission_updated(properties)
552+
if not properties then
552553
return
553554
end
554555

555-
local permission = event.properties
556+
local permission = properties
556557
if not permission.messageID or not permission.callID then
557558
return
558559
end
@@ -568,9 +569,9 @@ end
568569

569570
---Event handler for permission.replied events
570571
---Re-renders part after permission is resolved
571-
---@param event EventPermissionReplied Event object
572-
function M.on_permission_replied(event)
573-
if not event or not event.properties then
572+
---@param properties {sessionID: string, permissionID: string, response: string} Event properties
573+
function M.on_permission_replied(properties)
574+
if not properties then
574575
return
575576
end
576577

@@ -586,7 +587,7 @@ function M.on_permission_replied(event)
586587
end
587588
end
588589

589-
function M.on_file_edited(event)
590+
function M.on_file_edited(properties)
590591
vim.cmd('checktime')
591592
end
592593

tests/helpers.lua

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -213,19 +213,19 @@ end
213213
function M.replay_event(event)
214214
local renderer = require('opencode.ui.renderer')
215215
if event.type == 'message.updated' then
216-
renderer.on_message_updated(event)
216+
renderer.on_message_updated(event.properties)
217217
elseif event.type == 'message.part.updated' then
218-
renderer.on_part_updated(event)
218+
renderer.on_part_updated(event.properties)
219219
elseif event.type == 'message.removed' then
220-
renderer.on_message_removed(event)
220+
renderer.on_message_removed(event.properties)
221221
elseif event.type == 'message.part.removed' then
222-
renderer.on_part_removed(event)
222+
renderer.on_part_removed(event.properties)
223223
elseif event.type == 'session.compacted' then
224-
renderer.on_session_compacted(event)
224+
renderer.on_session_compacted(event.properties)
225225
elseif event.type == 'permission.updated' then
226-
renderer.on_permission_updated(event)
226+
renderer.on_permission_updated(event.properties)
227227
elseif event.type == 'permission.replied' then
228-
renderer.on_permission_replied(event)
228+
renderer.on_permission_replied(event.properties)
229229
end
230230
end
231231

tests/manual/renderer_replay.lua

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,7 @@ function M.replay_full_session()
227227

228228
renderer.reset()
229229
renderer._render_full_session_data(session_data)
230+
state.job_count = 0
230231

231232
vim.notify('Rendered full session from loaded events', vim.log.levels.INFO)
232233
return true

0 commit comments

Comments
 (0)