From 0d7a6429edb5ce5f7a4efc335d4ca44726a98ed1 Mon Sep 17 00:00:00 2001 From: Oliver Ladner Date: Thu, 7 Mar 2024 10:41:04 +0100 Subject: [PATCH] integrate GitHub Copilot --- README.md | 1 - lazy-lock.json | 2 + lua/weeheavy/plugins/copilot.lua | 54 ++++++++++++++++++++++++ lua/weeheavy/plugins/lsp/copilot-cmp.lua | 10 +++++ lua/weeheavy/plugins/lsp/lsp-zero.lua | 15 +++++++ 5 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 lua/weeheavy/plugins/copilot.lua create mode 100644 lua/weeheavy/plugins/lsp/copilot-cmp.lua diff --git a/README.md b/README.md index 0a68811..3395c55 100644 --- a/README.md +++ b/README.md @@ -112,7 +112,6 @@ See [CHEATSHEET](CHEATSHEET.md) ## Open issues/TODOs -- ollama integration - - solution to search-replace visual blocks - PoC diff --git a/lazy-lock.json b/lazy-lock.json index 5a59bed..58fb501 100644 --- a/lazy-lock.json +++ b/lazy-lock.json @@ -2,6 +2,8 @@ "LuaSnip": { "branch": "master", "commit": "2dbef19461198630b3d7c39f414d09fb07d1fdd2" }, "cmp-nvim-lsp": { "branch": "main", "commit": "5af77f54de1b16c34b23cba810150689a3a90312" }, "conform.nvim": { "branch": "master", "commit": "3d59cbd01a4b74124c5a6fb23b8cc63e5c2db3d5" }, + "copilot-cmp": { "branch": "master", "commit": "72fbaa03695779f8349be3ac54fa8bd77eed3ee3" }, + "copilot.lua": { "branch": "master", "commit": "f7612f5af4a7d7615babf43ab1e67a2d790c13a6" }, "gitsigns.nvim": { "branch": "main", "commit": "2c2463dbd82eddd7dbab881c3a62cfbfbe3c67ae" }, "lazy.nvim": { "branch": "main", "commit": "aedcd79811d491b60d0a6577a9c1701063c2a609" }, "lsp-zero.nvim": { "branch": "v3.x", "commit": "abac76482ec3012a2b359ba956a74e2ffd33d46f" }, diff --git a/lua/weeheavy/plugins/copilot.lua b/lua/weeheavy/plugins/copilot.lua new file mode 100644 index 0000000..084514b --- /dev/null +++ b/lua/weeheavy/plugins/copilot.lua @@ -0,0 +1,54 @@ +-- Fully featured & enhanced replacement for copilot.vim complete with API for +-- interacting with Github Copilot +-- https://github.com/zbirenbaum/copilot.lua +return { + "zbirenbaum/copilot.lua", + lazy = true, + event = "InsertEnter", + config = function() + local copilot = require("copilot") + copilot.setup({ + panel = { + enabled = false, + auto_refresh = false, + keymap = { + jump_prev = "[[", + jump_next = "]]", + accept = "", + refresh = "gr", + open = "", + }, + layout = { + position = "bottom", -- | top | left | right + ratio = 0.4, + }, + }, + suggestion = { + enabled = false, + auto_trigger = false, + debounce = 75, + keymap = { + accept = "", + accept_word = false, + accept_line = false, + next = "", + prev = "", + dismiss = "", + }, + }, + filetypes = { + yaml = false, + markdown = false, + help = false, + gitcommit = false, + gitrebase = false, + hgcommit = false, + svn = false, + cvs = false, + ["."] = false, + }, + copilot_node_command = "node", -- Node.js version must be > 18.x + server_opts_overrides = {}, + }) + end, +} diff --git a/lua/weeheavy/plugins/lsp/copilot-cmp.lua b/lua/weeheavy/plugins/lsp/copilot-cmp.lua new file mode 100644 index 0000000..b31c0fc --- /dev/null +++ b/lua/weeheavy/plugins/lsp/copilot-cmp.lua @@ -0,0 +1,10 @@ +-- transforms https://github.com/zbirenbaum/copilot.lua into a cmp source. +-- https://github.com/zbirenbaum/copilot-cmp +return { + "zbirenbaum/copilot-cmp", + lazy = false, + --event = "InsertEnter", + config = function() + require("copilot_cmp").setup() + end, +} diff --git a/lua/weeheavy/plugins/lsp/lsp-zero.lua b/lua/weeheavy/plugins/lsp/lsp-zero.lua index ec8dfbb..1ec00e4 100644 --- a/lua/weeheavy/plugins/lsp/lsp-zero.lua +++ b/lua/weeheavy/plugins/lsp/lsp-zero.lua @@ -33,6 +33,13 @@ return { cmp.setup({ formatting = lsp_zero.cmp_format(), + sources = { + { name = "copilot" }, + { name = "nvim_lsp" }, + { name = "path" }, + { name = "luasnip" }, + { name = "buffer" }, + }, mapping = cmp.mapping.preset.insert({ [""] = cmp.mapping.complete(), [""] = cmp.mapping.scroll_docs(-4), @@ -43,6 +50,14 @@ return { [""] = cmp_action.luasnip_jump_forward(), [""] = cmp_action.luasnip_jump_backward(), }), + window = { + documentation = { + border = { "╭", "─", "╮", "│", "╯", "─", "╰", "│" }, + }, + completion = { + border = { "╭", "─", "╮", "│", "╯", "─", "╰", "│" }, + }, + }, }) end, },