Skip to content

Commit 371d7b5

Browse files
committed
wip
1 parent f184acf commit 371d7b5

File tree

9 files changed

+65
-541
lines changed

9 files changed

+65
-541
lines changed

doc/usage/events.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ The events that are fired from within the plugin are:
1313
- `CodeCompanionChatACPModeChanged` - Fired after the ACP mode has been changed in the chat
1414
- `CodeCompanionChatCreated` - Fired after a chat has been created for the first time
1515
- `CodeCompanionChatOpened` - Fired after a chat has been opened
16-
- `CodeCompanionChatHidden` - Fired after a chat has been hidden
1716
- `CodeCompanionChatClosed` - Fired after a chat has been permanently closed
17+
- `CodeCompanionChatHidden` - Fired after a chat has been hidden
1818
- `CodeCompanionChatSubmitted` - Fired after a chat has been submitted
1919
- `CodeCompanionChatDone` - Fired after a chat has received the response
2020
- `CodeCompanionChatStopped` - Fired after a chat has been stopped

lua/codecompanion/commands/diff.lua

Lines changed: 24 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -473,62 +473,19 @@ function M.run_visual_test(test_num)
473473
ft = test_case.filetype,
474474
title = string.format("%s (Test %d/%d)", test_case.name, test_num, #M.test_cases),
475475
diff_id = diff_id,
476-
})
477-
478-
-- Add keymaps for cycling through test cases
479-
-- local keymap_opts = { buffer = diff_ui.bufnr, silent = true, nowait = true }
480-
--
481-
-- vim.keymap.set("n", "n", function()
482-
-- local next_test = test_num % #M.test_cases + 1
483-
-- local Diff = require("codecompanion.diff")
484-
-- Diff.clear(diff_ui.diff)
485-
-- if vim.api.nvim_win_is_valid(diff_ui.winnr) then
486-
-- vim.api.nvim_win_close(diff_ui.winnr, true)
487-
-- end
488-
-- M.run_visual_test(next_test)
489-
-- end, vim.tbl_extend("force", keymap_opts, { desc = "Next test case" }))
490-
--
491-
-- vim.keymap.set("n", "p", function()
492-
-- local prev_test = test_num == 1 and #M.test_cases or test_num - 1
493-
-- local Diff = require("codecompanion.diff")
494-
-- Diff.clear(diff_ui.diff)
495-
-- if vim.api.nvim_win_is_valid(diff_ui.winnr) then
496-
-- vim.api.nvim_win_close(diff_ui.winnr, true)
497-
-- end
498-
-- M.run_visual_test(prev_test)
499-
-- end, vim.tbl_extend("force", keymap_opts, { desc = "Previous test case" }))
500-
501-
-- Listen for diff events
502-
local group = vim.api.nvim_create_augroup("CodeCompanionDiffTest_" .. diff_id, { clear = true })
503-
504-
vim.api.nvim_create_autocmd("User", {
505-
pattern = "CodeCompanionDiffAccepted",
506-
group = group,
507-
callback = function(event)
508-
if event.data.diff_id == diff_id then
509-
vim.notify(
510-
string.format("Test %d/%d: Changes ACCEPTED", test_num, #M.test_cases),
511-
vim.log.levels.INFO,
512-
{ title = "CodeCompanion Diff Test" }
513-
)
514-
vim.api.nvim_del_augroup_by_id(group)
515-
end
476+
on_accept = function()
477+
vim.notify(
478+
string.format("Test %d/%d: Changes ACCEPTED", test_num, #M.test_cases),
479+
vim.log.levels.INFO,
480+
{ title = "CodeCompanion Diff Test" }
481+
)
516482
end,
517-
})
518-
519-
vim.api.nvim_create_autocmd("User", {
520-
pattern = "CodeCompanionDiffRejected",
521-
group = group,
522-
callback = function(event)
523-
if event.data.diff_id == diff_id then
524-
local status = event.data.timeout and "CLOSED" or "REJECTED"
525-
vim.notify(
526-
string.format("Test %d/%d: Changes %s", test_num, #M.test_cases, status),
527-
vim.log.levels.WARN,
528-
{ title = "CodeCompanion Diff Test" }
529-
)
530-
vim.api.nvim_del_augroup_by_id(group)
531-
end
483+
on_reject = function()
484+
vim.notify(
485+
string.format("Test %d/%d: Changes REJECTED", test_num, #M.test_cases),
486+
vim.log.levels.WARN,
487+
{ title = "CodeCompanion Diff Test" }
488+
)
532489
end,
533490
})
534491

@@ -565,38 +522,19 @@ function M.run_inline_test(test_num)
565522
diff_id = diff_id,
566523
bufnr = bufnr,
567524
inline = true,
568-
})
569-
570-
local group = vim.api.nvim_create_augroup("CodeCompanionDiffInlineTest_" .. diff_id, { clear = true })
571-
572-
vim.api.nvim_create_autocmd("User", {
573-
pattern = "CodeCompanionDiffAccepted",
574-
group = group,
575-
callback = function(event)
576-
if event.data.diff_id == diff_id then
577-
vim.notify(
578-
string.format("Inline Test %d/%d: Changes ACCEPTED", test_num, #M.test_cases),
579-
vim.log.levels.INFO,
580-
{ title = "CodeCompanion Diff Inline Test" }
581-
)
582-
vim.api.nvim_del_augroup_by_id(group)
583-
end
525+
on_accept = function()
526+
vim.notify(
527+
string.format("Inline Test %d/%d: Changes ACCEPTED", test_num, #M.test_cases),
528+
vim.log.levels.INFO,
529+
{ title = "CodeCompanion Diff Inline Test" }
530+
)
584531
end,
585-
})
586-
587-
vim.api.nvim_create_autocmd("User", {
588-
pattern = "CodeCompanionDiffRejected",
589-
group = group,
590-
callback = function(event)
591-
if event.data.diff_id == diff_id then
592-
local status = event.data.timeout and "CLOSED" or "REJECTED"
593-
vim.notify(
594-
string.format("Inline Test %d/%d: Changes %s", test_num, #M.test_cases, status),
595-
vim.log.levels.WARN,
596-
{ title = "CodeCompanion Diff Inline Test" }
597-
)
598-
vim.api.nvim_del_augroup_by_id(group)
599-
end
532+
on_reject = function()
533+
vim.notify(
534+
string.format("Inline Test %d/%d: Changes REJECTED", test_num, #M.test_cases),
535+
vim.log.levels.WARN,
536+
{ title = "CodeCompanion Diff Inline Test" }
537+
)
600538
end,
601539
})
602540

lua/codecompanion/diff/keymaps.lua

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
local config = require("codecompanion.config")
22
local log = require("codecompanion.utils.log")
3-
local utils = require("codecompanion.utils")
43

54
local api = vim.api
65

@@ -21,7 +20,7 @@ end
2120

2221
---Resolve a diff with common cleanup logic
2322
---@param diff_ui CodeCompanion.DiffUI
24-
---@param opts { event: string, log_action: string, callback?: fun(diff_ui: CodeCompanion.DiffUI), custom_handler?: fun(diff_ui: CodeCompanion.DiffUI)|nil }
23+
---@param opts { log_action: string, callback?: fun(diff_ui: CodeCompanion.DiffUI), handler?: fun(diff_ui: CodeCompanion.DiffUI)|nil }
2524
---@return boolean success Returns false if already resolved
2625
local function resolve_diff(diff_ui, opts)
2726
if diff_ui.resolved then
@@ -31,11 +30,8 @@ local function resolve_diff(diff_ui, opts)
3130

3231
log:trace("[Diff] %s diff for id=%s", opts.log_action, diff_ui.diff_id)
3332

34-
-- If a custom handler is provided, call it instead of the default event
35-
if opts.custom_handler then
36-
opts.custom_handler(diff_ui)
37-
else
38-
utils.fire(opts.event, { id = diff_ui.diff_id })
33+
if opts.handler then
34+
opts.handler(diff_ui)
3935
end
4036

4137
if opts.callback then
@@ -53,9 +49,8 @@ M.always_accept = {
5349
desc = "Always accept changes from this chat buffer",
5450
callback = function(diff_ui)
5551
resolve_diff(diff_ui, {
56-
event = "DiffAccepted",
5752
log_action = "Accepting",
58-
custom_handler = diff_ui.keymaps.on_accept,
53+
handler = diff_ui.keymaps.on_accept,
5954
callback = function(ui)
6055
if ui.keymaps.on_always_accept then
6156
return ui.keymaps.on_always_accept(ui)
@@ -73,9 +68,8 @@ M.accept_change = {
7368
desc = "Accept all changes",
7469
callback = function(diff_ui)
7570
resolve_diff(diff_ui, {
76-
event = "DiffAccepted",
7771
log_action = "Accepting",
78-
custom_handler = diff_ui.keymaps.on_accept or diff_ui.on_accept,
72+
handler = diff_ui.keymaps.on_accept,
7973
})
8074
end,
8175
}
@@ -84,9 +78,8 @@ M.reject_change = {
8478
desc = "Reject all changes",
8579
callback = function(diff_ui)
8680
resolve_diff(diff_ui, {
87-
event = "DiffRejected",
8881
log_action = "Rejecting",
89-
custom_handler = diff_ui.keymaps.on_reject or diff_ui.on_reject,
82+
handler = diff_ui.keymaps.on_reject,
9083
})
9184
end,
9285
}
@@ -95,9 +88,8 @@ M.close_window = {
9588
desc = "Close window and reject",
9689
callback = function(diff_ui)
9790
resolve_diff(diff_ui, {
98-
event = "DiffRejected",
9991
log_action = "Closing",
100-
custom_handler = diff_ui.keymaps.on_reject or diff_ui.on_reject,
92+
handler = diff_ui.keymaps.on_reject,
10193
})
10294
end,
10395
}

lua/codecompanion/interactions/chat/acp/request_permission.lua

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -214,28 +214,17 @@ local function show_diff(chat, request)
214214
chat_bufnr = chat.bufnr,
215215
diff_id = diff_id,
216216
ft = vim.filetype.match({ filename = d.path }) or "text",
217+
keymaps = {
218+
on_reject = function()
219+
local rejected = find_reject_option(request.options)
220+
request.respond(rejected, false)
221+
end,
222+
},
217223
skip_default_keymaps = true,
218224
title = vim.fn.fnamemodify(d.path, ":."),
219225
})
220226

221227
setup_diff_keymaps(diff_ui, normalized, kind_map, request)
222-
223-
vim.api.nvim_create_autocmd("User", {
224-
pattern = "CodeCompanionDiffRejected",
225-
callback = function(event)
226-
if event.data.id ~= diff_id then
227-
return
228-
end
229-
if diff_ui.resolved then
230-
return
231-
end
232-
if not diff_ui.resolved then
233-
diff_ui.resolved = true
234-
end
235-
local rejected = find_reject_option(request.options)
236-
return request.respond(rejected, false)
237-
end,
238-
})
239228
end
240229

241230
---Show the permission request to the user and handle their response

lua/codecompanion/interactions/chat/helpers/wait.lua

Lines changed: 0 additions & 103 deletions
This file was deleted.

0 commit comments

Comments
 (0)