| @ -1,107 +1,90 @@ | |||||
| return { | return { | ||||
| "hrsh7th/nvim-cmp", | |||||
| event = "InsertEnter", | |||||
| dependencies = { | |||||
| "hrsh7th/cmp-nvim-lsp", | |||||
| "hrsh7th/cmp-buffer", | |||||
| "hrsh7th/cmp-path", | |||||
| "L3MON4D3/LuaSnip", | |||||
| "saadparwaiz1/cmp_luasnip", | |||||
| "rafamadriz/friendly-snippets", | |||||
| "onsails/lspkind.nvim", | |||||
| "kristijanhusak/vim-dadbod-completion", | |||||
| }, | |||||
| config = function() | |||||
| local cmp = require("cmp") | |||||
| "hrsh7th/nvim-cmp", | |||||
| event = "InsertEnter", | |||||
| dependencies = { | |||||
| -- Snippet Engine & its associated nvim-cmp source | |||||
| { | |||||
| "L3MON4D3/LuaSnip", | |||||
| build = (function() | |||||
| if vim.fn.has("win32") == 1 or vim.fn.executable("make") == 0 then | |||||
| return | |||||
| end | |||||
| return "make install_jsregexp" | |||||
| end)(), | |||||
| dependencies = { | |||||
| { | |||||
| "rafamadriz/friendly-snippets", | |||||
| config = function() | |||||
| require("luasnip.loaders.from_vscode").lazy_load() | |||||
| end, | |||||
| }, | |||||
| }, | |||||
| }, | |||||
| "saadparwaiz1/cmp_luasnip", | |||||
| local luasnip = require("luasnip") | |||||
| "onsails/lspkind.nvim", | |||||
| "kristijanhusak/vim-dadbod-completion", | |||||
| local lspkind = require("lspkind") | |||||
| "hrsh7th/cmp-nvim-lsp", | |||||
| "hrsh7th/cmp-buffer", | |||||
| "hrsh7th/cmp-path", | |||||
| "hrsh7th/cmp-nvim-lsp-signature-help", | |||||
| }, | |||||
| config = function() | |||||
| -- See `:help cmp` | |||||
| local cmp = require("cmp") | |||||
| local luasnip = require("luasnip") | |||||
| local lspkind = require("lspkind") | |||||
| luasnip.config.setup({}) | |||||
| -- loads vscode style snippets from installed plugins (e.g. friendly-snippets) | |||||
| require("luasnip.loaders.from_vscode").lazy_load({ paths = { "~/.config/nvim/snippets" } }) | |||||
| local has_words_before = function() | |||||
| 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 | |||||
| cmp.setup({ | |||||
| completion = { | |||||
| completeopt = "menu,menuone,preview,noselect", | |||||
| }, | |||||
| snippet = { -- configure how nvim-cmp interacts with snippet engine | |||||
| expand = function(args) | |||||
| luasnip.lsp_expand(args.body) | |||||
| end, | |||||
| }, | |||||
| window = {}, | |||||
| mapping = cmp.mapping.preset.insert({ | |||||
| ["<C-k>"] = cmp.mapping.select_prev_item(), -- previous suggestion | |||||
| ["<C-j>"] = cmp.mapping.select_next_item(), -- next suggestion | |||||
| ["<C-u>"] = cmp.mapping.scroll_docs(-4), | |||||
| ["<C-d>"] = cmp.mapping.scroll_docs(4), | |||||
| ["<C-Space>"] = cmp.mapping.complete(), -- show completion suggestions | |||||
| ["<C-e>"] = cmp.mapping.abort(), -- close completion window | |||||
| ["<CR>"] = cmp.mapping.confirm({ select = true }), | |||||
| ["<Tab>"] = cmp.mapping(function(fallback) | |||||
| if 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", | |||||
| }), | |||||
| ["<S-Tab>"] = 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 for autocompletion | |||||
| sources = cmp.config.sources({ | |||||
| { name = "nvim_lsp" }, | |||||
| { name = "luasnip" }, | |||||
| { name = "buffer" }, | |||||
| { name = "path" }, | |||||
| { name = "vim-dadbod-completion" }, | |||||
| }), | |||||
| -- configure lspkind for vs-code like pictograms in completion menu | |||||
| formatting = { | |||||
| format = lspkind.cmp_format({ | |||||
| mode = "symbol_text", | |||||
| menu = { | |||||
| nvim_lua = "[API]", | |||||
| nvim_lsp = "[LSP]", | |||||
| luasnip = "[SNIP]", | |||||
| vim_dadbod_completion = "[DBUI]", | |||||
| path = "[PATH]", | |||||
| buffer = "[BUFF]", | |||||
| }, | |||||
| }), | |||||
| }, | |||||
| event = { | |||||
| on = { | |||||
| CompleteChanged = function(data) | |||||
| if data.entry then | |||||
| vim.lsp.buf.hover() | |||||
| end | |||||
| end, | |||||
| }, | |||||
| cmp.setup({ | |||||
| snippet = { | |||||
| expand = function(args) | |||||
| luasnip.lsp_expand(args.body) | |||||
| end, | |||||
| }, | |||||
| completion = { | |||||
| completeopt = "menu,menuone,noinsert", | |||||
| }, | }, | ||||
| }) | |||||
| end, | |||||
| mapping = cmp.mapping.preset.insert({ | |||||
| ["<C-n>"] = cmp.mapping.select_next_item(), | |||||
| ["<C-p>"] = cmp.mapping.select_prev_item(), | |||||
| ["<C-b>"] = cmp.mapping.scroll_docs(-4), | |||||
| ["<C-f>"] = cmp.mapping.scroll_docs(4), | |||||
| ["<C-y>"] = cmp.mapping.confirm({ select = true }), | |||||
| ["<C-Space>"] = cmp.mapping.complete({}), | |||||
| ["<C-l>"] = cmp.mapping(function() | |||||
| if luasnip.expand_or_locally_jumpable() then | |||||
| luasnip.expand_or_jump() | |||||
| end | |||||
| end, { "i", "s" }), | |||||
| ["<C-h>"] = cmp.mapping(function() | |||||
| if luasnip.locally_jumpable(-1) then | |||||
| luasnip.jump(-1) | |||||
| end | |||||
| end, { "i", "s" }), | |||||
| }), | |||||
| sources = { | |||||
| { name = "nvim_lsp" }, | |||||
| -- { name = "nvim_lsp_signature_help" }, -- TODO: Get this working so hover() doesnt open twice | |||||
| { name = "luasnip" }, | |||||
| { name = "buffer" }, | |||||
| { name = "path" }, | |||||
| { name = "vim-dadbod-completion" }, | |||||
| }, | |||||
| formatting = { | |||||
| format = lspkind.cmp_format({ | |||||
| mode = "symbol_text", | |||||
| menu = { | |||||
| nvim_lua = "[API]", | |||||
| nvim_lsp = "[LSP]", | |||||
| luasnip = "[SNIP]", | |||||
| vim_dadbod_completion = "[DBUI]", | |||||
| path = "[PATH]", | |||||
| buffer = "[BUFF]", | |||||
| }, | |||||
| }), | |||||
| }, | |||||
| }) | |||||
| end, | |||||
| } | } | ||||