From e1ca2839042d7e4aab17ab21c7acd01adf8e34b8 Mon Sep 17 00:00:00 2001 From: Micah Halter Date: Fri, 28 Feb 2025 15:09:02 -0500 Subject: [PATCH] refactor(completion): update AI plugins to use the new `astrocommunity.recipes.ai` boilerplate --- .../completion/codeium-nvim/init.lua | 13 ++++ .../completion/copilot-lua-cmp/README.md | 19 ----- .../completion/copilot-lua-cmp/init.lua | 77 ------------------- .../completion/copilot-lua/init.lua | 25 +++++- .../completion/supermaven-nvim/init.lua | 21 ++++- .../completion/tabnine-nvim/init.lua | 21 ++++- 6 files changed, 77 insertions(+), 99 deletions(-) delete mode 100644 lua/astrocommunity/completion/copilot-lua-cmp/README.md delete mode 100644 lua/astrocommunity/completion/copilot-lua-cmp/init.lua diff --git a/lua/astrocommunity/completion/codeium-nvim/init.lua b/lua/astrocommunity/completion/codeium-nvim/init.lua index 3adad7ecb..5dac810fa 100644 --- a/lua/astrocommunity/completion/codeium-nvim/init.lua +++ b/lua/astrocommunity/completion/codeium-nvim/init.lua @@ -4,6 +4,7 @@ return { cmd = "Codeium", opts = { enable_chat = true, + virtual_text = { key_bindings = { accept = false } }, }, dependencies = { { @@ -20,6 +21,17 @@ return { ---@param opts AstroCoreOpts opts = function(_, opts) return require("astrocore").extend_tbl(opts, { + options = { + g = { + -- set the ai_accept function + ai_accept = function() + if require("codeium.virtual_text").get_current_completion_item() then + vim.api.nvim_input(require("codeium.virtual_text").accept()) + return true + end + end, + }, + }, mappings = { n = { [";"] = { @@ -36,6 +48,7 @@ return { }, }, specs = { + { import = "astrocommunity.recipes.ai" }, { "hrsh7th/nvim-cmp", optional = true, diff --git a/lua/astrocommunity/completion/copilot-lua-cmp/README.md b/lua/astrocommunity/completion/copilot-lua-cmp/README.md deleted file mode 100644 index 844ecf46e..000000000 --- a/lua/astrocommunity/completion/copilot-lua-cmp/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# copilot.lua + CMP - -Fully featured & enhanced replacement for copilot.vim complete with API for interacting with Github Copilot - -**Repository:** - -## Key Features - -- Seamless integration with nvim-cmp or blink.cmp -- Enhanced keybindings for Copilot suggestions: - - `` - Accept suggestion/Navigate completion menu - - `` / `` - Next/Previous suggestion - - `` / `` - Accept word - - `` / `` - Accept line - - `` - Dismiss suggestion - -_Note_: This plugin will also reconfigure `` in AstroNvim to work with both auto completion in `cmp` and `copilot`. - -The configuration includes support for [nvim-cmp](https://github.com/hrsh7th/nvim-cmp) and [blink.cmp](https://github.com/Saghen/blink.cmp) for improved completion behavior. diff --git a/lua/astrocommunity/completion/copilot-lua-cmp/init.lua b/lua/astrocommunity/completion/copilot-lua-cmp/init.lua deleted file mode 100644 index c882c9ecd..000000000 --- a/lua/astrocommunity/completion/copilot-lua-cmp/init.lua +++ /dev/null @@ -1,77 +0,0 @@ -local function has_words_before() - local line, col = unpack(vim.api.nvim_win_get_cursor(0)) - return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match "%s" == nil -end - -local function copilot_action(action) - local copilot = require "copilot.suggestion" - return function() - if copilot.is_visible() then - copilot[action]() - return true -- doesn't run the next command - end - end -end - -return { - "zbirenbaum/copilot.lua", - specs = { - { import = "astrocommunity.completion.copilot-lua" }, - { - "hrsh7th/nvim-cmp", - dependencies = { "zbirenbaum/copilot.lua" }, - opts = function(_, opts) - local cmp, copilot = require "cmp", require "copilot.suggestion" - local snip_status_ok, luasnip = pcall(require, "luasnip") - if not snip_status_ok then return end - - if not opts.mapping then opts.mapping = {} end - opts.mapping[""] = cmp.mapping(function(fallback) - if copilot.is_visible() then - copilot.accept() - elseif cmp.visible() then - cmp.select_next_item() - elseif luasnip.expand_or_jumpable() then - luasnip.expand_or_jump() - elseif has_words_before() then - cmp.complete() - else - fallback() - end - end, { "i", "s" }) - - opts.mapping[""] = cmp.mapping(copilot_action "next") - opts.mapping[""] = cmp.mapping(copilot_action "prev") - opts.mapping[""] = cmp.mapping(copilot_action "accept_word") - opts.mapping[""] = cmp.mapping(copilot_action "accept_word") - opts.mapping[""] = cmp.mapping(copilot_action "accept_line") - opts.mapping[""] = cmp.mapping(copilot_action "accept_line") - opts.mapping[""] = cmp.mapping(copilot_action "dismiss") - end, - }, - { - "Saghen/blink.cmp", - optional = true, - opts = function(_, opts) - if not opts.keymap then opts.keymap = {} end - - opts.keymap[""] = { - copilot_action "accept", - "select_next", - "snippet_forward", - function(cmp) - if has_words_before() or vim.api.nvim_get_mode().mode == "c" then return cmp.show() end - end, - "fallback", - } - opts.keymap[""] = { copilot_action "next" } - opts.keymap[""] = { copilot_action "prev" } - opts.keymap[""] = { copilot_action "accept_word" } - opts.keymap[""] = { copilot_action "accept_word" } - opts.keymap[""] = { copilot_action "accept_line" } - opts.keymap[""] = { copilot_action "accept_line", "select_next", "fallback" } - opts.keymap[""] = { copilot_action "dismiss" } - end, - }, - }, -} diff --git a/lua/astrocommunity/completion/copilot-lua/init.lua b/lua/astrocommunity/completion/copilot-lua/init.lua index 3845a6ff2..d115139aa 100644 --- a/lua/astrocommunity/completion/copilot-lua/init.lua +++ b/lua/astrocommunity/completion/copilot-lua/init.lua @@ -2,5 +2,28 @@ return { "zbirenbaum/copilot.lua", cmd = "Copilot", event = "User AstroFile", - opts = { suggestion = { auto_trigger = true, debounce = 150 } }, + opts = { suggestion = { + auto_trigger = true, + debounce = 150, + keymap = { accept = false }, + } }, + specs = { + { import = "astrocommunity.recipes.ai" }, + { + "AstroNvim/astrocore", + opts = { + options = { + g = { + -- set the ai_accept function + ai_accept = function() + if require("copilot.suggestion").is_visible() then + require("copilot.suggestion").accept() + return true + end + end, + }, + }, + }, + }, + }, } diff --git a/lua/astrocommunity/completion/supermaven-nvim/init.lua b/lua/astrocommunity/completion/supermaven-nvim/init.lua index 69449ed15..7059bab42 100644 --- a/lua/astrocommunity/completion/supermaven-nvim/init.lua +++ b/lua/astrocommunity/completion/supermaven-nvim/init.lua @@ -3,7 +3,7 @@ return { event = "VeryLazy", opts = { keymaps = { - accept_suggestion = "", + accept_suggestion = false, clear_suggestion = "", accept_word = "", }, @@ -11,4 +11,23 @@ return { disable_inline_completion = false, -- disables inline completion for use with cmp disable_keymaps = false, -- disables built in keymaps for more manual control }, + specs = { + { import = "astrocommunity.recipes.ai" }, + { + "AstroNvim/astrocore", + opts = { + options = { + g = { + -- set the ai_accept function + ai_accept = function() + if require("supermaven-nvim.completion_preview").has_suggestion() then + vim.schedule(function() require("supermaven-nvim.completion_preview").on_accept_suggestion() end) + return true + end + end, + }, + }, + }, + }, + }, } diff --git a/lua/astrocommunity/completion/tabnine-nvim/init.lua b/lua/astrocommunity/completion/tabnine-nvim/init.lua index 5735d1443..7863aca57 100644 --- a/lua/astrocommunity/completion/tabnine-nvim/init.lua +++ b/lua/astrocommunity/completion/tabnine-nvim/init.lua @@ -4,5 +4,24 @@ return { build = vim.loop.os_uname().sysname == "Windows_NT" and "pwsh.exe -file .\\dl_binaries.ps1" or "./dl_binaries.sh", cmd = { "TabnineStatus", "TabnineDisable", "TabnineEnable", "TabnineToggle" }, event = "User AstroFile", - opts = { accept_keymap = "" }, + opts = { accept_keymap = false }, + specs = { + { import = "astrocommunity.recipes.ai" }, + { + "AstroNvim/astrocore", + opts = { + options = { + g = { + -- set the ai_accept function + ai_accept = function() + if require("tabnine.keymaps").has_suggestion() then + require("tabnine.keymaps").accept_suggestion() + return true + end + end, + }, + }, + }, + }, + }, }