diff --git a/.config/nvim/lua/tovi/core/autocmd.lua b/.config/nvim/lua/tovi/core/autocmd.lua index 1f5affb..4b5fddd 100644 --- a/.config/nvim/lua/tovi/core/autocmd.lua +++ b/.config/nvim/lua/tovi/core/autocmd.lua @@ -22,14 +22,6 @@ local aucmd_dict = { -- Remove trailing whitespace on save command = [[%s/\s\+$//e]], }, - - { - -- Run goimports on save - pattern = "*.go", - callback = function() - require('go.format').goimport() - end, - }, }, BufRead = { diff --git a/.config/nvim/lua/tovi/plugins/lspconfig.lua b/.config/nvim/lua/tovi/plugins/lspconfig.lua index ee58794..87601b4 100644 --- a/.config/nvim/lua/tovi/plugins/lspconfig.lua +++ b/.config/nvim/lua/tovi/plugins/lspconfig.lua @@ -15,9 +15,6 @@ return { local lspconfig = require("lspconfig") local util = require("lspconfig.util") - -- import cmp-nvim-lsp plugin - local cmp_nvim_lsp = require("cmp_nvim_lsp") - local keymap = vim.keymap vim.api.nvim_create_autocmd("LspAttach", { diff --git a/.config/nvim/lua/tovi/plugins/nvim-cmp.lua b/.config/nvim/lua/tovi/plugins/nvim-cmp.lua index 0ceedbd..eaf042d 100644 --- a/.config/nvim/lua/tovi/plugins/nvim-cmp.lua +++ b/.config/nvim/lua/tovi/plugins/nvim-cmp.lua @@ -1,107 +1,90 @@ 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({ - [""] = cmp.mapping.select_prev_item(), -- previous suggestion - [""] = cmp.mapping.select_next_item(), -- next suggestion - [""] = cmp.mapping.scroll_docs(-4), - [""] = cmp.mapping.scroll_docs(4), - [""] = cmp.mapping.complete(), -- show completion suggestions - [""] = cmp.mapping.abort(), -- close completion window - [""] = cmp.mapping.confirm({ select = true }), - [""] = 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", - }), - [""] = 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({ + [""] = cmp.mapping.select_next_item(), + [""] = cmp.mapping.select_prev_item(), + [""] = cmp.mapping.scroll_docs(-4), + [""] = cmp.mapping.scroll_docs(4), + [""] = cmp.mapping.confirm({ select = true }), + [""] = cmp.mapping.complete({}), + [""] = cmp.mapping(function() + if luasnip.expand_or_locally_jumpable() then + luasnip.expand_or_jump() + end + end, { "i", "s" }), + [""] = 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, } diff --git a/.config/nvim/lua/tovi/plugins/nvim-go.lua b/.config/nvim/lua/tovi/plugins/nvim-go.lua index 16e9083..59d35d8 100644 --- a/.config/nvim/lua/tovi/plugins/nvim-go.lua +++ b/.config/nvim/lua/tovi/plugins/nvim-go.lua @@ -10,5 +10,14 @@ return { build = ':lua require("go.install").update_all_sync()', config = function () require("go").setup() + + local format_sync_grp = vim.api.nvim_create_augroup("GoFormat", {}) + vim.api.nvim_create_autocmd("BufWritePre", { + pattern = "*.go", + callback = function() + require('go.format').goimports() + end, + group = format_sync_grp, + }) end }