From 3c71bd600cadcfceb3101a1e65ff9d62deceae5a Mon Sep 17 00:00:00 2001 From: Dreaded_X Date: Tue, 16 Apr 2024 18:37:51 +0200 Subject: [PATCH] Improved completion --- nvim/dot-config/nvim/lazy-lock.json | 1 + nvim/dot-config/nvim/lua/options.lua | 2 +- nvim/dot-config/nvim/lua/plugins/cmp.lua | 177 ++++++++++++++--------- 3 files changed, 110 insertions(+), 70 deletions(-) diff --git a/nvim/dot-config/nvim/lazy-lock.json b/nvim/dot-config/nvim/lazy-lock.json index f13787e..e0a62a6 100644 --- a/nvim/dot-config/nvim/lazy-lock.json +++ b/nvim/dot-config/nvim/lazy-lock.json @@ -26,6 +26,7 @@ "nvim-autopairs": { "branch": "master", "commit": "4f41e5940bc0443fdbe5f995e2a596847215cd2a" }, "nvim-bufdel": { "branch": "main", "commit": "523d58e94e7212fff3e05c247b962dc8f93bcfde" }, "nvim-cmp": { "branch": "main", "commit": "ce16de5665c766f39c271705b17fff06f7bcb84f" }, + "nvim-cmp-lsp-rs": { "branch": "main", "commit": "cb7681abf20b615a7ec33e3f49df3b5a382711a4" }, "nvim-colorizer.lua": { "branch": "master", "commit": "85855b38011114929f4058efc97af1059ab3e41d" }, "nvim-lspconfig": { "branch": "master", "commit": "9266dc26862d8f3556c2ca77602e811472b4c5b8" }, "nvim-surround": { "branch": "main", "commit": "a4e30d33add8a9743b4f518b3a788b3c8e5def71" }, diff --git a/nvim/dot-config/nvim/lua/options.lua b/nvim/dot-config/nvim/lua/options.lua index 588effa..9835ced 100644 --- a/nvim/dot-config/nvim/lua/options.lua +++ b/nvim/dot-config/nvim/lua/options.lua @@ -32,7 +32,7 @@ vim.o.timeout = true vim.o.timeoutlen = 300 -- Set completeopt to have a better completion experience -vim.o.completeopt = "menuone,noselect" +-- vim.o.completeopt = "menuone,noselect" -- NOTE: You should make sure your terminal supports this vim.o.termguicolors = true diff --git a/nvim/dot-config/nvim/lua/plugins/cmp.lua b/nvim/dot-config/nvim/lua/plugins/cmp.lua index b68df8c..9e7a1b3 100644 --- a/nvim/dot-config/nvim/lua/plugins/cmp.lua +++ b/nvim/dot-config/nvim/lua/plugins/cmp.lua @@ -1,77 +1,116 @@ -- https://github.com/hrsh7th/nvim-cmp -- TODO: Go over this return { - -- Autocompletion - "hrsh7th/nvim-cmp", - dependencies = { - "hrsh7th/cmp-nvim-lsp", - "L3MON4D3/LuaSnip", - "saadparwaiz1/cmp_luasnip", - "hrsh7th/cmp-path", - "onsails/lspkind-nvim", - }, - config = function() - local cmp = require("cmp") - local luasnip = require("luasnip") - local lspkind = require("lspkind") + { + -- Autocompletion + "hrsh7th/nvim-cmp", + dependencies = { + "hrsh7th/cmp-nvim-lsp", + "hrsh7th/cmp-path", + "onsails/lspkind-nvim", - luasnip.config.setup({}) + -- Improve sorting order for rust + "zjp-CN/nvim-cmp-lsp-rs", - local border = require("symbols.window").border + -- Snippets + "L3MON4D3/LuaSnip", + "saadparwaiz1/cmp_luasnip", + }, + config = function() + local cmp = require("cmp") + local luasnip = require("luasnip") + local lspkind = require("lspkind") + local border = require("symbols.window").border - cmp.setup({ - snippet = { - expand = function(args) - luasnip.lsp_expand(args.body) - end, - }, - window = { - completion = cmp.config.window.bordered({ border = border, winhighlight = "CursorLine:CmpSelection" }), - documentation = cmp.config.window.bordered({ border = border }), - }, - -- Include the source of the cmp entry - formatting = { - format = lspkind.cmp_format({ - mode = "text", - menu = { - nvim_lsp = "LSP", - luasnip = "LuaSnip", - path = "Path", + local cmp_rs = require("cmp_lsp_rs") + local comparators = cmp_rs.comparators + + cmp.setup({ + snippet = { + expand = function(args) + luasnip.lsp_expand(args.body) + end, + }, + completion = { completeopt = "menu,menuone,noinsert" }, + window = { + completion = cmp.config.window.bordered({ + border = border, + winhighlight = "CursorLine:CmpSelection", + }), + documentation = cmp.config.window.bordered({ border = border }), + }, + -- Include the source of the cmp entry + formatting = { + format = lspkind.cmp_format({ + mode = "text", + menu = { + nvim_lsp = "LSP", + luasnip = "LuaSnip", + path = "Path", + }, + }), + }, + mapping = cmp.mapping.preset.insert({ + [""] = cmp.mapping.scroll_docs(-4), + [""] = cmp.mapping.scroll_docs(4), + [""] = cmp.mapping.complete({}), + [""] = cmp.mapping.confirm({ + select = true, + }), + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.abort() + else + fallback() + end + end, { "i", "s" }), + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_next_item() + elseif luasnip.expand_or_jumpable() then + luasnip.expand_or_jump() + else + fallback() + end + end, { "i", "s" }), + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_prev_item() + elseif luasnip.jumpable(-1) then + luasnip.jump(-1) + else + fallback() + end + end, { "i", "s" }), + }), + sorting = { + comparators = { + comparators.inherent_import_inscope, + comparators.sort_by_label_but_underscore_last, }, - }), - }, - mapping = cmp.mapping.preset.insert({ - [""] = cmp.mapping.scroll_docs(-4), - [""] = cmp.mapping.scroll_docs(4), - [""] = cmp.mapping.complete({}), - [""] = cmp.mapping.confirm({ - behavior = cmp.ConfirmBehavior.Replace, - select = true, - }), - [""] = cmp.mapping(function(fallback) - if cmp.visible() then - cmp.select_next_item() - elseif luasnip.expand_or_jumpable() then - luasnip.expand_or_jump() - else - fallback() - end - end, { "i", "s" }), - [""] = cmp.mapping(function(fallback) - if cmp.visible() then - cmp.select_prev_item() - elseif luasnip.jumpable(-1) then - luasnip.jump(-1) - else - fallback() - end - end, { "i", "s" }), - }), - sources = { - { name = "luasnip" }, - { name = "nvim_lsp" }, - { name = "path" }, - }, - }) - end, + }, + sources = { + { name = "nvim_lsp" }, + { name = "luasnip" }, + { name = "path" }, + }, + }) + end, + }, + { + "L3MON4D3/LuaSnip", + build = function() + if vim.fn.has("win32") == 1 or vim.fn.executable("make") == 0 then + return + end + return "make install_jsregexp" + end, + config = function() + require("luasnip").config.setup() + -- require("luasnip.loaders.from_vscode").lazy_load() + end, + dependencies = { + -- "rafamadriz/friendly-snippets", + }, + }, }