diff options
Diffstat (limited to '.config/nvim/lsp/golangci_lint_ls.lua')
| -rw-r--r-- | .config/nvim/lsp/golangci_lint_ls.lua | 52 | 
1 files changed, 52 insertions, 0 deletions
diff --git a/.config/nvim/lsp/golangci_lint_ls.lua b/.config/nvim/lsp/golangci_lint_ls.lua new file mode 100644 index 0000000..8a95035 --- /dev/null +++ b/.config/nvim/lsp/golangci_lint_ls.lua @@ -0,0 +1,52 @@ +---@brief +--- +--- Combination of both lint server and client +--- +--- https://github.com/nametake/golangci-lint-langserver +--- https://github.com/golangci/golangci-lint +--- +--- +--- Installation of binaries needed is done via +--- +--- ``` +--- go install github.com/nametake/golangci-lint-langserver@latest +--- go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest +--- ``` + +---@type vim.lsp.Config +return { +  cmd = { 'golangci-lint-langserver' }, +  filetypes = { 'go', 'gomod' }, +  init_options = { +    command = { 'golangci-lint', 'run', '--output.json.path=stdout', '--show-stats=false' }, +  }, +  root_markers = { +    '.golangci.yml', +    '.golangci.yaml', +    '.golangci.toml', +    '.golangci.json', +    'go.work', +    'go.mod', +    '.git', +  }, +  before_init = function(_, config) +    -- Add support for golangci-lint V1 (in V2 `--out-format=json` was replaced by +    -- `--output.json.path=stdout`). +    local v1, v2 = false, false +    -- PERF: `golangci-lint version` is very slow (about 0.1 sec) so let's find +    -- version using `go version -m $(which golangci-lint) | grep '^\smod'`. +    if vim.fn.executable 'go' == 1 then +      local exe = vim.fn.exepath 'golangci-lint' +      local version = vim.system({ 'go', 'version', '-m', exe }):wait() +      v1 = string.match(version.stdout, '\tmod\tgithub.com/golangci/golangci%-lint\t') +      v2 = string.match(version.stdout, '\tmod\tgithub.com/golangci/golangci%-lint/v2\t') +    end +    if not v1 and not v2 then +      local version = vim.system({ 'golangci-lint', 'version' }):wait() +      v1 = string.match(version.stdout, 'version v?1%.') +    end +    if v1 then +      config.init_options.command = { 'golangci-lint', 'run', '--out-format', 'json' } +    end +  end, +}  |