Skip to content

Commit 3be36d8

Browse files
committed
feat: highlight assistant file references
1 parent e8f0382 commit 3be36d8

15 files changed

Lines changed: 1242 additions & 678 deletions

lua/opencode/ui/formatter.lua

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -690,6 +690,25 @@ local function add_symbol_reference_highlights(output, rendered, rendered_refere
690690
end
691691
end
692692

693+
local function add_file_reference_highlights(output, rendered, rendered_reference_ranges, first_line_idx)
694+
local line_start = 1
695+
696+
for line_idx, line in ipairs(vim.split(rendered, '\n')) do
697+
local line_end = line_start + #line - 1
698+
for _, range in ipairs(rendered_reference_ranges) do
699+
if ranges_overlap(line_start, line_end, range[1], range[2]) then
700+
output:add_extmark(first_line_idx + line_idx - 1, {
701+
start_col = math.max(range[1], line_start) - line_start,
702+
end_col = math.min(range[2], line_end) - line_start + 1,
703+
hl_group = 'OpencodeReference',
704+
priority = 1000,
705+
})
706+
end
707+
end
708+
line_start = line_start + #line + 1
709+
end
710+
end
711+
693712
---@param output Output Output object to write to
694713
---@param text string
695714
---@param message_id string|nil Optional message ID for reference parsing
@@ -701,6 +720,7 @@ function M._format_assistant_message(output, text, message_id)
701720
local first_line_idx = output:get_line_count()
702721

703722
output:add_lines(vim.split(rendered, '\n'))
723+
add_file_reference_highlights(output, rendered, rendered_reference_ranges, first_line_idx)
704724

705725
-- Render-time symbol highlights are only visual hints. This intentionally
706726
-- rebuilds from the current conversation refs instead of storing targets on

lua/opencode/ui/highlight.lua

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ function M.setup()
4141
vim.api.nvim_set_hl(0, 'OpencodeContextSwitchOn', { link = '@label', default = true })
4242
vim.api.nvim_set_hl(0, 'OpencodePickerTime', { link = 'Comment', default = true })
4343
vim.api.nvim_set_hl(0, 'OpencodeDebugText', { link = 'Comment', default = true })
44-
vim.api.nvim_set_hl(0, 'OpencodeReference', { fg = '#1976D2', default = true })
44+
vim.api.nvim_set_hl(0, 'OpencodeReference', { fg = '#5F7896', default = true })
4545
vim.api.nvim_set_hl(0, 'OpencodeSymbolReference', { link = 'Identifier', default = true })
4646
vim.api.nvim_set_hl(0, 'OpencodeReasoningText', { link = 'Comment', default = true })
4747
vim.api.nvim_set_hl(0, 'OpencodePermissionTitle', { fg = '#FF9E3B', default = true })
@@ -90,7 +90,7 @@ function M.setup()
9090
vim.api.nvim_set_hl(0, 'OpencodeContextSwitchOn', { link = '@label', default = true })
9191
vim.api.nvim_set_hl(0, 'OpencodePickerTime', { link = 'Comment', default = true })
9292
vim.api.nvim_set_hl(0, 'OpencodeDebugText', { link = 'Comment', default = true })
93-
vim.api.nvim_set_hl(0, 'OpencodeReference', { fg = '#7AA2F7', default = true })
93+
vim.api.nvim_set_hl(0, 'OpencodeReference', { fg = '#8AA6C8', default = true })
9494
vim.api.nvim_set_hl(0, 'OpencodeSymbolReference', { link = 'Identifier', default = true })
9595
vim.api.nvim_set_hl(0, 'OpencodeReasoningText', { link = 'Comment', default = true })
9696
vim.api.nvim_set_hl(0, 'OpencodePermissionTitle', { fg = '#FF9E3B', default = true })

tests/data/api-abort.expected.json

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,21 @@
194194
"virt_text_pos": "right_align",
195195
"virt_text_repeat_linebreak": false
196196
}
197+
],
198+
[
199+
9,
200+
10,
201+
86,
202+
{
203+
"end_col": 99,
204+
"end_right_gravity": false,
205+
"end_row": 10,
206+
"hl_eol": false,
207+
"hl_group": "OpencodeReference",
208+
"ns_id": 3,
209+
"priority": 1000,
210+
"right_gravity": true
211+
}
197212
]
198213
],
199214
"lines": [

tests/data/cursor_data.expected.json

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,21 @@
314314
"virt_text_pos": "right_align",
315315
"virt_text_repeat_linebreak": false
316316
}
317+
],
318+
[
319+
15,
320+
17,
321+
95,
322+
{
323+
"end_col": 124,
324+
"end_right_gravity": false,
325+
"end_row": 17,
326+
"hl_eol": false,
327+
"hl_group": "OpencodeReference",
328+
"ns_id": 3,
329+
"priority": 1000,
330+
"right_gravity": true
331+
}
317332
]
318333
],
319334
"lines": [

0 commit comments

Comments
 (0)