200 lines
4.7 KiB
Lua
200 lines
4.7 KiB
Lua
-- This is part of LazyVim's code, with my modifications.
|
|
-- See: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/plugins/extras/lang/go.lua
|
|
|
|
return {
|
|
|
|
{
|
|
'nvim-treesitter/nvim-treesitter',
|
|
opts = function(_, opts)
|
|
if type(opts.ensure_installed) == 'table' then
|
|
vim.list_extend(opts.ensure_installed, {
|
|
'go',
|
|
'gomod',
|
|
'gosum',
|
|
'gowork',
|
|
})
|
|
end
|
|
|
|
-- Convert a JSON string to a Go struct.
|
|
vim.api.nvim_buf_create_user_command(
|
|
0,
|
|
'JsonToStruct',
|
|
---@param args table
|
|
function(args)
|
|
local range = args.line1 .. ',' .. args.line2
|
|
local fname = vim.api.nvim_buf_get_name(0)
|
|
local cmd = { '!json-to-struct' }
|
|
table.insert(cmd, '-name ' .. vim.fn.fnamemodify(fname, ':t:r'))
|
|
table.insert(cmd, '-pkg ' .. vim.fn.fnamemodify(fname, ':h:t:r'))
|
|
vim.cmd(range .. ' ' .. table.concat(cmd, ' '))
|
|
end,
|
|
{ bar = true, nargs = 0, range = true }
|
|
)
|
|
end,
|
|
},
|
|
|
|
{
|
|
'neovim/nvim-lspconfig',
|
|
opts = {
|
|
servers = {
|
|
gopls = {
|
|
settings = {
|
|
-- https://github.com/golang/tools/blob/master/gopls/doc/settings.md
|
|
gopls = {
|
|
gofumpt = true,
|
|
usePlaceholders = true,
|
|
completeUnimported = true,
|
|
staticcheck = true,
|
|
directoryFilters = {
|
|
'-.git',
|
|
'-.vscode',
|
|
'-.idea',
|
|
'-.vscode-test',
|
|
'-node_modules',
|
|
},
|
|
semanticTokens = true,
|
|
codelenses = {
|
|
gc_details = false,
|
|
generate = true,
|
|
regenerate_cgo = true,
|
|
run_govulncheck = true,
|
|
test = true,
|
|
tidy = true,
|
|
upgrade_dependency = true,
|
|
vendor = true,
|
|
},
|
|
hints = {
|
|
assignVariableTypes = true,
|
|
compositeLiteralFields = true,
|
|
compositeLiteralTypes = true,
|
|
constantValues = true,
|
|
functionTypeParameters = true,
|
|
parameterNames = true,
|
|
rangeVariableTypes = true,
|
|
},
|
|
-- https://github.com/golang/tools/blob/master/gopls/doc/analyzers.md
|
|
analyses = {
|
|
fieldalignment = true,
|
|
nilness = true,
|
|
unusedparams = true,
|
|
unusedwrite = true,
|
|
useany = true,
|
|
-- fillreturns = true,
|
|
-- nonewvars = true,
|
|
-- shadow = true,
|
|
-- undeclaredname = true,
|
|
-- unusedvariable = true,
|
|
-- ST1000 = false,
|
|
-- ST1005 = false,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
setup = {
|
|
gopls = function(_, _)
|
|
-- workaround for gopls not supporting semanticTokensProvider
|
|
-- https://github.com/golang/go/issues/54531#issuecomment-1464982242
|
|
require('plex.lib.utils').on_attach(function(client, _)
|
|
if client.name == 'gopls' then
|
|
if not client.server_capabilities.semanticTokensProvider then
|
|
local semantic =
|
|
client.config.capabilities.textDocument.semanticTokens
|
|
if semantic ~= nil then
|
|
client.server_capabilities.semanticTokensProvider = {
|
|
full = true,
|
|
legend = {
|
|
tokenTypes = semantic.tokenTypes,
|
|
tokenModifiers = semantic.tokenModifiers,
|
|
},
|
|
range = true,
|
|
}
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
-- end workaround
|
|
end,
|
|
},
|
|
},
|
|
},
|
|
|
|
{
|
|
'mason.nvim',
|
|
opts = function(_, opts)
|
|
opts.ensure_installed = opts.ensure_installed or {}
|
|
vim.list_extend(opts.ensure_installed, {
|
|
'gofumpt',
|
|
'goimports-reviser',
|
|
'gomodifytags',
|
|
'impl',
|
|
'json-to-struct',
|
|
})
|
|
end,
|
|
},
|
|
|
|
{
|
|
'mhartington/formatter.nvim',
|
|
optional = true,
|
|
opts = function(_, opts)
|
|
opts = opts or {}
|
|
local filetypes = {
|
|
go = {
|
|
require('formatter.filetypes.go').gofumpt,
|
|
},
|
|
}
|
|
opts.filetype = vim.tbl_extend('keep', opts.filetype or {}, filetypes)
|
|
end,
|
|
},
|
|
|
|
{
|
|
'jose-elias-alvarez/null-ls.nvim',
|
|
optional = true,
|
|
opts = function(_, opts)
|
|
local nls = require('null-ls')
|
|
local sources = {
|
|
nls.builtins.code_actions.gomodifytags,
|
|
nls.builtins.code_actions.impl,
|
|
nls.builtins.formatting.gofumpt,
|
|
-- nls.builtins.formatting.goimports_reviser,
|
|
}
|
|
opts.sources = opts.sources or {}
|
|
for _, source in ipairs(sources) do
|
|
table.insert(opts.sources, source)
|
|
end
|
|
end,
|
|
},
|
|
|
|
{
|
|
'mfussenegger/nvim-dap',
|
|
optional = true,
|
|
dependencies = {
|
|
{
|
|
'mason.nvim',
|
|
opts = function(_, opts)
|
|
opts.ensure_installed = opts.ensure_installed or {}
|
|
vim.list_extend(opts.ensure_installed, { 'delve' })
|
|
end,
|
|
},
|
|
{
|
|
'leoluz/nvim-dap-go',
|
|
config = true,
|
|
},
|
|
},
|
|
},
|
|
|
|
{
|
|
'nvim-neotest/neotest',
|
|
optional = true,
|
|
dependencies = { 'nvim-neotest/neotest-go' },
|
|
opts = {
|
|
adapters = {
|
|
['neotest-go'] = {
|
|
-- Here we can set options for neotest-go, e.g.
|
|
-- args = { '-tags=integration' }
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|