From 319b4078b9257b2f902e8a13335d9ecbc447bc6f Mon Sep 17 00:00:00 2001 From: Klesh Wong Date: Mon, 8 Aug 2022 11:25:04 +0800 Subject: [PATCH] feat: use null-ls for goimports and format instead of gopls --- cli/vim/neovim/lua/plugins/lsp.lua | 182 +++++++++++++++-------------- 1 file changed, 95 insertions(+), 87 deletions(-) diff --git a/cli/vim/neovim/lua/plugins/lsp.lua b/cli/vim/neovim/lua/plugins/lsp.lua index 8be7302..9d2bfea 100644 --- a/cli/vim/neovim/lua/plugins/lsp.lua +++ b/cli/vim/neovim/lua/plugins/lsp.lua @@ -3,8 +3,44 @@ if not lspconfig_ok then return end +-- Use an on_attach function to only map the following keys +-- after the language server attaches to the current buffer +local on_attach = function(client, bufnr) + -- Enable completion triggered by + vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc') + + -- Mappings. + -- See `:help vim.lsp.*` for documentation on any of the below functions + local bufopts = { noremap = true, silent = true, buffer = bufnr } + vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, bufopts) + vim.keymap.set('n', 'gd', vim.lsp.buf.definition, bufopts) + vim.keymap.set('n', 'od', vim.lsp.buf.hover, bufopts) + vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, bufopts) + vim.keymap.set('n', '', vim.lsp.buf.signature_help, bufopts) + vim.keymap.set('n', 'wa', vim.lsp.buf.add_workspace_folder, bufopts) + vim.keymap.set('n', 'wr', vim.lsp.buf.remove_workspace_folder, bufopts) + vim.keymap.set('n', 'wl', function() + print(vim.inspect(vim.lsp.buf.list_workspace_folders())) + end, bufopts) + vim.keymap.set('n', 'D', vim.lsp.buf.type_definition, bufopts) + vim.keymap.set('n', 'rn', vim.lsp.buf.rename, bufopts) + vim.keymap.set('n', 'ca', vim.lsp.buf.code_action, bufopts) + vim.keymap.set('n', 'gr', vim.lsp.buf.references, bufopts) + vim.keymap.set('n', 'fd', vim.lsp.buf.formatting, bufopts) +end + local language_servers = { - gopls = {}, + gopls = { + -- capabilities = { + -- document_formatting = false, + -- document_range_formatting = false, + -- } + on_attach = function(client, bufnr) + on_attach(client, bufnr) + client.resolved_capabilities.document_formatting = false + client.resolved_capabilities.document_range_formatting = false + end + }, -- grammarly = {}, -- marksman = {}, jsonls = {}, @@ -33,32 +69,6 @@ local language_servers = { } } --- Use an on_attach function to only map the following keys --- after the language server attaches to the current buffer -local on_attach = function(client, bufnr) - -- Enable completion triggered by - vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc') - - -- Mappings. - -- See `:help vim.lsp.*` for documentation on any of the below functions - local bufopts = { noremap = true, silent = true, buffer = bufnr } - vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, bufopts) - vim.keymap.set('n', 'gd', vim.lsp.buf.definition, bufopts) - vim.keymap.set('n', 'od', vim.lsp.buf.hover, bufopts) - vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, bufopts) - vim.keymap.set('n', '', vim.lsp.buf.signature_help, bufopts) - vim.keymap.set('n', 'wa', vim.lsp.buf.add_workspace_folder, bufopts) - vim.keymap.set('n', 'wr', vim.lsp.buf.remove_workspace_folder, bufopts) - vim.keymap.set('n', 'wl', function() - print(vim.inspect(vim.lsp.buf.list_workspace_folders())) - end, bufopts) - vim.keymap.set('n', 'D', vim.lsp.buf.type_definition, bufopts) - vim.keymap.set('n', 'rn', vim.lsp.buf.rename, bufopts) - vim.keymap.set('n', 'ca', vim.lsp.buf.code_action, bufopts) - vim.keymap.set('n', 'gr', vim.lsp.buf.references, bufopts) - vim.keymap.set('n', 'fd', vim.lsp.buf.formatting, bufopts) -end - local capabilities = vim.lsp.protocol.make_client_capabilities() @@ -71,70 +81,68 @@ if cmp_status_ok then end for langsvr, settings in pairs(language_servers) do - settings["on_attach"] = on_attach - settings["capabilities"] = capabilities + settings = vim.tbl_deep_extend("keep", settings, { + on_attach = on_attach, + capabilities = capabilities, + }) lspconfig[langsvr].setup(settings) end -if not cmp_status_ok then - return -end - local luasnip_status_ok, luasnip = pcall(require, "luasnip") - -cmp.setup { - snippet = { - expand = function(args) - if luasnip_status_ok then - luasnip.lsp_expand(args.body) - end - end, - }, - mapping = cmp.mapping.preset.insert({ - [''] = cmp.mapping.scroll_docs(-4), - [''] = cmp.mapping.scroll_docs(4), - [''] = cmp.mapping.confirm { - behavior = cmp.ConfirmBehavior.Replace, - select = true, +if cmp_status_ok and luasnip_status_ok then + cmp.setup { + snippet = { + expand = function(args) + if luasnip_status_ok then + luasnip.lsp_expand(args.body) + end + end, }, - [''] = cmp.mapping(function(fallback) - if cmp.visible() then - cmp.select_next_item() - elseif luasnip_status_ok and 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_status_ok and luasnip.jumpable(-1) then - luasnip.jump(-1) - else - fallback() - end - end, { 'i', 's' }), - }), - sources = { - { name = 'nvim_lsp' }, - { name = 'luasnip' }, - { name = 'buffer' }, - { name = 'path' }, - }, -} - -local null_ls_ok, null_ls = pcall(require, "null_ls") -if not null_ls_ok then - return + mapping = cmp.mapping.preset.insert({ + [''] = cmp.mapping.scroll_docs(-4), + [''] = cmp.mapping.scroll_docs(4), + [''] = cmp.mapping.confirm { + behavior = cmp.ConfirmBehavior.Replace, + select = true, + }, + [''] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_next_item() + elseif luasnip_status_ok and 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_status_ok and luasnip.jumpable(-1) then + luasnip.jump(-1) + else + fallback() + end + end, { 'i', 's' }), + }), + sources = { + { name = 'nvim_lsp' }, + { name = 'luasnip' }, + { name = 'buffer' }, + { name = 'path' }, + }, + } end -null_ls.setup({ - sources = { - null_ls.builtins.formatting.stylua, - null_ls.builtins.diagnostics.eslint, - null_ls.builtins.completion.spell, - null_ls.builtins.formatting.goimports, - null_ls.builtins.formatting.gofumpt, - }, -}) + +local null_ls_ok, null_ls = pcall(require, "null-ls") +if null_ls_ok then + null_ls.setup({ + sources = { + null_ls.builtins.formatting.stylua, + null_ls.builtins.diagnostics.eslint, + null_ls.builtins.completion.spell, + null_ls.builtins.formatting.goimports, + null_ls.builtins.formatting.gofumpt, + }, + }) +end