Skip to content

Commit b639be7

Browse files
committed
refactor(render_state): clean up set/update apis
Don't need to pass id, object, and possibly other things to set_part/update_part_data/set_message, just pass a part or message.
1 parent d78904a commit b639be7

File tree

4 files changed

+112
-101
lines changed

4 files changed

+112
-101
lines changed

lua/opencode/ui/formatter.lua

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ end
109109
---Format the revert callout with statistics
110110
---@param session_data OpencodeMessage[] All messages in the session
111111
---@param start_idx number Index of the message where revert occurred
112+
---@return Output output object representing the lines, extmarks, and actions
112113
function M._format_revert_message(session_data, start_idx)
113114
local output = Output.new()
114115
local stats = M._calculate_revert_stats(session_data, start_idx, state.active_session.revert)

lua/opencode/ui/render_state.lua

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -129,20 +129,24 @@ function RenderState:get_actions_at_line(line)
129129
end
130130

131131
---Set or update message render data
132-
---@param message_id string Message ID
133-
---@param message_ref OpencodeMessage Direct reference to message
132+
---@param message OpencodeMessage Direct reference to message
134133
---@param line_start integer? Line where message header starts
135134
---@param line_end integer? Line where message header ends
136-
function RenderState:set_message(message_id, message_ref, line_start, line_end)
135+
function RenderState:set_message(message, line_start, line_end)
136+
if not message or not message.info or not message.info.id then
137+
return
138+
end
139+
local message_id = message.info.id
140+
137141
if not self._messages[message_id] then
138142
self._messages[message_id] = {
139-
message = message_ref,
143+
message = message,
140144
line_start = line_start,
141145
line_end = line_end,
142146
}
143147
else
144148
local msg_data = self._messages[message_id]
145-
msg_data.message = message_ref
149+
msg_data.message = message
146150
if line_start then
147151
msg_data.line_start = line_start
148152
end
@@ -157,12 +161,16 @@ function RenderState:set_message(message_id, message_ref, line_start, line_end)
157161
end
158162

159163
---Set or update part render data
160-
---@param part_id string Part ID
161-
---@param part MessagePart Direct reference to part
162-
---@param message_id string Parent message ID
164+
---@param part MessagePart Direct reference to part (must include id/messageID)
163165
---@param line_start integer? Line where part starts
164166
---@param line_end integer? Line where part ends
165-
function RenderState:set_part(part_id, part, message_id, line_start, line_end)
167+
function RenderState:set_part(part, line_start, line_end)
168+
if not part or not part.id then
169+
return
170+
end
171+
local part_id = part.id
172+
local message_id = part.messageID
173+
166174
if not self._parts[part_id] then
167175
self._parts[part_id] = {
168176
part = part,
@@ -174,7 +182,9 @@ function RenderState:set_part(part_id, part, message_id, line_start, line_end)
174182
else
175183
local render_part = self._parts[part_id]
176184
render_part.part = part
177-
render_part.message_id = message_id
185+
if message_id then
186+
render_part.message_id = message_id
187+
end
178188
if line_start then
179189
render_part.line_start = line_start
180190
end
@@ -218,10 +228,12 @@ function RenderState:update_part_lines(part_id, new_line_start, new_line_end)
218228
end
219229

220230
---Update part data reference
221-
---@param part_id string Part ID
222-
---@param part_ref MessagePart New part reference
223-
function RenderState:update_part_data(part_id, part_ref)
224-
local part_data = self._parts[part_id]
231+
---@param part_ref MessagePart New part reference (must include id)
232+
function RenderState:update_part_data(part_ref)
233+
if not part_ref or not part_ref.id then
234+
return
235+
end
236+
local part_data = self._parts[part_ref.id]
225237
if not part_data then
226238
return
227239
end

lua/opencode/ui/renderer.lua

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ function M.render_full_session()
106106

107107
if config.debug.enabled then
108108
-- TODO: I want to track full renders for now, remove at some point
109-
-- vim.notify('rendering full session\n' .. debug.traceback(), vim.log.levels.WARN)
109+
vim.notify('rendering full session\n' .. debug.traceback(), vim.log.levels.WARN)
110110
end
111111

112112
fetch_session():and_then(M._render_full_session_data)
@@ -124,11 +124,9 @@ function M._render_full_session_data(session_data)
124124
revert_index = i
125125
end
126126

127-
-- only pass in the info so, the parts will be processed as part of the loop
128-
-- TODO: remove part processing code in formatter
129127
M.on_message_updated({ info = msg.info }, revert_index)
130128

131-
for j, part in ipairs(msg.parts or {}) do
129+
for _, part in ipairs(msg.parts or {}) do
132130
M.on_part_updated({ part = part }, revert_index)
133131
end
134132
end
@@ -235,7 +233,7 @@ function M._insert_part_to_buffer(part_id, formatted_data)
235233
return false
236234
end
237235

238-
M._render_state:set_part(part_id, cached.part, cached.message_id, range.line_start, range.line_end)
236+
M._render_state:set_part(cached.part, range.line_start, range.line_end)
239237
return true
240238
end
241239

@@ -328,7 +326,7 @@ function M._replace_message_in_buffer(message_id, formatted_data)
328326
local old_line_end = cached.line_end
329327
local new_line_end = cached.line_start + new_line_count - 1
330328

331-
M._render_state:set_message(message_id, cached.message, cached.line_start, new_line_end)
329+
M._render_state:set_message(cached.message, cached.line_start, new_line_end)
332330

333331
local delta = new_line_end - old_line_end
334332
if delta ~= 0 then
@@ -360,7 +358,7 @@ function M.on_message_updated(message, revert_index)
360358
if not found_msg then
361359
table.insert(state.messages, message)
362360
end
363-
M._render_state:set_message(message.info.id, message, 0, 0)
361+
M._render_state:set_message(message, 0, 0)
364362
return
365363
end
366364

@@ -382,7 +380,7 @@ function M.on_message_updated(message, revert_index)
382380
local range = M._write_formatted_data(header_data)
383381

384382
if range then
385-
M._render_state:set_message(message.info.id, message, range.line_start, range.line_end)
383+
M._render_state:set_message(message, range.line_start, range.line_end)
386384
end
387385

388386
state.current_message = message
@@ -444,9 +442,9 @@ function M.on_part_updated(properties, revert_index)
444442
end
445443

446444
if is_new_part then
447-
M._render_state:set_part(part.id, part, part.messageID)
445+
M._render_state:set_part(part)
448446
else
449-
M._render_state:update_part_data(part.id, part)
447+
M._render_state:update_part_data(part)
450448
end
451449

452450
local formatted = formatter.format_part(part, message.info.role)

0 commit comments

Comments
 (0)