Skip to content

Commit 27f31b6

Browse files
committed
feat(suggestion): add teardown method
1 parent 934eba3 commit 27f31b6

File tree

2 files changed

+71
-10
lines changed

2 files changed

+71
-10
lines changed

lua/copilot/config.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ local default_config = {
2222
enabled = true,
2323
auto_trigger = false,
2424
debounce = 75,
25-
---@type table<'accept'|'next'|'prev'|'dismiss', false|string>
25+
---@type table<'accept'|'accept_word'|'accept_line'|'next'|'prev'|'dismiss', false|string>
2626
keymap = {
2727
accept = "<M-l>",
2828
accept_word = false,

lua/copilot/suggestion.lua

Lines changed: 70 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
local api = require("copilot.api")
22
local c = require("copilot.client")
3+
local config = require("copilot.config")
34
local hl_group = require("copilot.highlight").group
45
local util = require("copilot.util")
56

@@ -100,6 +101,32 @@ local function set_keymap(keymap)
100101
end
101102
end
102103

104+
local function unset_keymap(keymap)
105+
if keymap.accept then
106+
vim.keymap.del("i", keymap.accept)
107+
end
108+
109+
if keymap.accept_word then
110+
vim.keymap.del("i", keymap.accept_word)
111+
end
112+
113+
if keymap.accept_line then
114+
vim.keymap.del("i", keymap.accept_line)
115+
end
116+
117+
if keymap.next then
118+
vim.keymap.del("i", keymap.next)
119+
end
120+
121+
if keymap.prev then
122+
vim.keymap.del("i", keymap.prev)
123+
end
124+
125+
if keymap.dismiss then
126+
vim.keymap.del("i", keymap.dismiss)
127+
end
128+
end
129+
103130
local function stop_timer()
104131
if copilot._copilot_timer then
105132
vim.fn.timer_stop(copilot._copilot_timer)
@@ -473,48 +500,82 @@ local function on_complete_changed()
473500
clear()
474501
end
475502

476-
function mod.setup(config)
477-
if copilot.setup_done then
478-
return
479-
end
480-
481-
set_keymap(config.keymap or {})
482-
483-
copilot.auto_trigger = config.auto_trigger
503+
local function create_autocmds()
504+
vim.api.nvim_create_augroup(copilot.augroup, { clear = true })
484505

485506
vim.api.nvim_create_autocmd("InsertLeave", {
507+
group = copilot.augroup,
486508
callback = on_insert_leave,
487509
desc = "[copilot] (suggestion) insert leave",
488510
})
489511

490512
vim.api.nvim_create_autocmd("BufLeave", {
513+
group = copilot.augroup,
491514
callback = on_buf_leave,
492515
desc = "[copilot] (suggestion) buf leave",
493516
})
494517

495518
vim.api.nvim_create_autocmd("InsertEnter", {
519+
group = copilot.augroup,
496520
callback = on_insert_enter,
497521
desc = "[copilot] (suggestion) insert enter",
498522
})
499523

500524
vim.api.nvim_create_autocmd("BufEnter", {
525+
group = copilot.augroup,
501526
callback = on_buf_enter,
502527
desc = "[copilot] (suggestion) buf enter",
503528
})
504529

505530
vim.api.nvim_create_autocmd("CursorMovedI", {
531+
group = copilot.augroup,
506532
callback = on_cursor_moved_i,
507533
desc = "[copilot] (suggestion) cursor moved insert",
508534
})
509535

510536
vim.api.nvim_create_autocmd("CompleteChanged", {
537+
group = copilot.augroup,
511538
callback = on_complete_changed,
512539
desc = "[copilot] (suggestion) complete changed",
513540
})
541+
end
542+
543+
function mod.setup()
544+
local opts = config.get("suggestion") --[[@as copilot_config_suggestion]]
545+
if not opts.enabled then
546+
return
547+
end
548+
549+
if copilot.setup_done then
550+
return
551+
end
552+
553+
set_keymap(opts.keymap or {})
554+
555+
copilot.auto_trigger = opts.auto_trigger
514556

515-
copilot.debounce = config.debounce
557+
create_autocmds()
558+
559+
copilot.debounce = opts.debounce
516560

517561
copilot.setup_done = true
518562
end
519563

564+
function mod.teardown()
565+
local opts = config.get("suggestion") --[[@as copilot_config_suggestion]]
566+
if not opts.enabled then
567+
return
568+
end
569+
570+
if not copilot.setup_done then
571+
return
572+
end
573+
574+
unset_keymap(opts.keymap or {})
575+
576+
vim.api.nvim_clear_autocmds({ group = copilot.augroup })
577+
578+
copilot.setup_done = false
579+
end
580+
520581
return mod

0 commit comments

Comments
 (0)