From 9b7da8ef75da94f6b72896f9c93bc38611ea80a6 Mon Sep 17 00:00:00 2001 From: Bruno Carlin Date: Mon, 19 Feb 2024 17:50:04 +0100 Subject: [PATCH] fix(nvim): update config for gopls --- nvim/.config/nvim/lua/lsp/gopls.lua | 32 +++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/nvim/.config/nvim/lua/lsp/gopls.lua b/nvim/.config/nvim/lua/lsp/gopls.lua index 0c8dffa..95b587d 100644 --- a/nvim/.config/nvim/lua/lsp/gopls.lua +++ b/nvim/.config/nvim/lua/lsp/gopls.lua @@ -1,15 +1,28 @@ -vim.api.nvim_create_autocmd('BufWritePre', { - pattern = '*.go', +vim.api.nvim_create_autocmd("BufWritePre", { + pattern = "*.go", callback = function() - vim.lsp.buf.code_action({ context = { only = { 'source.organizeImports' } }, apply = true }) - vim.lsp.buf.format() + local params = vim.lsp.util.make_range_params() + params.context = {only = {"source.organizeImports"}} + -- buf_request_sync defaults to a 1000ms timeout. Depending on your + -- machine and codebase, you may want longer. Add an additional + -- argument after params if you find that you have to write the file + -- twice for changes to be saved. + -- E.g., vim.lsp.buf_request_sync(0, "textDocument/codeAction", params, 3000) + local result = vim.lsp.buf_request_sync(0, "textDocument/codeAction", params) + for cid, res in pairs(result or {}) do + for _, r in pairs(res.result or {}) do + if r.edit then + local enc = (vim.lsp.get_client_by_id(cid) or {}).offset_encoding or "utf-16" + vim.lsp.util.apply_workspace_edit(r.edit, enc) + end + end + end + vim.lsp.buf.format({async = false}) end }) -local capabilities = require('cmp_nvim_lsp').default_capabilities() require('lspconfig').gopls.setup { - capabilities = capabilities, flags = { debounce_text_changes = 150, }, @@ -20,7 +33,9 @@ require('lspconfig').gopls.setup { gofumpt = true, usePlaceholders = true, completeUnimported = true, + completeFunctionCalls = true, experimentalPostfixCompletions = true, + allExperiments = true, analyses = { assign = true, atomic = true, @@ -56,6 +71,11 @@ require('lspconfig').gopls.setup { useany = true, nonewvars = true, }, + codelenses = { + generate = true, + gc_details = true, + run_govulncheck = true, + }, }, }, }