From 6deaa64e7130a273a97e8e5b96d288e4077db774 Mon Sep 17 00:00:00 2001 From: Daniil Tsivinsky Date: Sat, 11 Dec 2021 23:22:51 +0300 Subject: [PATCH] Update neovim config for better Go development --- config/nvim/init.lua | 3 ++- config/nvim/lua/lsp.lua | 45 ++++++++++++++++++++++++++++++++++++++++- 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/config/nvim/init.lua b/config/nvim/init.lua index ec5d3ce..a141a5a 100644 --- a/config/nvim/init.lua +++ b/config/nvim/init.lua @@ -103,7 +103,8 @@ vim.g.mapleader = " " vim.g.qs_highlight_on_keys = {"f", "F"} -vim.cmd([[autocmd BufWritePre * undojoin | Neoformat]]) +vim.cmd( + [[autocmd BufWritePre *.js,*.jsx,*.ts,*.tsx,*.html,*.css,*.scss,*.json undojoin | Neoformat]]) require("lsp") diff --git a/config/nvim/lua/lsp.lua b/config/nvim/lua/lsp.lua index b99c338..5a3b6a5 100644 --- a/config/nvim/lua/lsp.lua +++ b/config/nvim/lua/lsp.lua @@ -140,9 +140,52 @@ nvim_lsp.ls_emmet.setup({capabilities = capabilities}) nvim_lsp.gopls.setup({ capabilities = capabilities, - on_attach = function() setupLspSignature() end + on_attach = function() setupLspSignature() end, + settings = { + gopls = { + experimentalPostfixCompletions = true, + analyses = { + unusedparams = true, + shadow = true + }, + staticcheck = true + } + } }) +function goimports(timeout_ms) + local context = { only = { "source.organizeImports" } } + vim.validate { context = { context, "t", true } } + + local params = vim.lsp.util.make_range_params() + params.context = context + + -- See the implementation of the textDocument/codeAction callback + -- (lua/vim/lsp/handler.lua) for how to do this properly. + local result = vim.lsp.buf_request_sync(0, "textDocument/codeAction", params, timeout_ms) + if not result or next(result) == nil then return end + local actions = result[1].result + if not actions then return end + local action = actions[1] + + -- textDocument/codeAction can return either Command[] or CodeAction[]. If it + -- is a CodeAction, it can have either an edit, a command or both. Edits + -- should be executed first. + if action.edit or type(action.command) == "table" then + if action.edit then + vim.lsp.util.apply_workspace_edit(action.edit) + end + if type(action.command) == "table" then + vim.lsp.buf.execute_command(action.command) + end + else + vim.lsp.buf.execute_command(action) + end +end + +vim.cmd([[autocmd BufWritePre *.go lua vim.lsp.buf.formatting_sync()]]) +vim.cmd([[autocmd BufWritePre *.go lua goimports(1000)]]) + require("luasnip/loaders/from_vscode").load({ include = {"javascript", "typescript", "go", "html"} })