diff --git a/lua/lsp/config/gopls.lua b/lua/lsp/config/gopls.lua index b5875e0..b0c522e 100644 --- a/lua/lsp/config/gopls.lua +++ b/lua/lsp/config/gopls.lua @@ -1,10 +1,47 @@ --- spec: https://rust-analyzer.github.io/manual.html#configuration +local utils = require("utils") +---@type ServerConfig return { enable = true, - mason = { - name = "gopls", - -- version = "", + mason = { "gopls", dependencies = { "golines", "golangci-lint" } }, + keymaps = { + { + mode = "n", + lhs = "lf", + rhs = function() + utils.format({ + cmd = { "golines", "-m", "80", "--shorten-comments" }, + output = "stdout", + }) + vim.lsp.buf.format({ async = true }) + end, + }, + }, + linters = { + { + cmd = { + "golangci-lint", + "run", + "--output.json.path=stdout", + "--show-stats=false", + "%file%", + }, + stdin = true, + stdout = true, + json = { + diagnostics_root = "Issues", + source = "FromLinter", + message = "Text", + lnum = "Pos.Line", + col = "Pos.Column", + callback = function(diag) + if not diag.severity or diag.severity == "" then + diag.severity = vim.diagnostic.severity.WARN + end + utils.debug(vim.inspect(diag)) + end, + }, + }, }, lspconfig = { filetypes = { @@ -13,7 +50,7 @@ return { "gowork", "gotmpl", }, - cmd = { "gopls", }, + cmd = { "gopls" }, single_file_support = true, settings = { gopls = { @@ -21,7 +58,7 @@ return { unusedparams = true, }, staticcheck = true, - gofumpt = true, + gofumpt = false, }, }, },