-- Go filetype settings (Go uses tabs, not spaces) vim.api.nvim_create_autocmd("FileType", { pattern = { "go", "gomod", "gowork", "gotmpl" }, callback = function() vim.opt_local.expandtab = false vim.opt_local.tabstop = 4 vim.opt_local.shiftwidth = 4 end, }) -- Go LSP configuration -- Uses gopls installed via Mason local status_ok, cmp_nvim_lsp = pcall(require, "cmp_nvim_lsp") local capabilities = status_ok and cmp_nvim_lsp.default_capabilities(vim.lsp.protocol.make_client_capabilities()) or vim.lsp.protocol.make_client_capabilities() vim.lsp.config("gopls", { cmd = { "gopls" }, filetypes = { "go", "gomod", "gowork", "gotmpl" }, capabilities = capabilities, root_markers = { "go.mod", ".git" }, settings = { gopls = { hints = { assignVariableTypes = true, compositeLiteralFields = true, compositeLiteralTypes = true, constantValues = true, functionTypeParameters = true, parameterNames = true, rangeVariableTypes = true, }, analyses = { unusedparams = true, shadow = true, nilness = true, }, staticcheck = true, gofumpt = true, -- prefer gofumpt formatting usePlaceholders = true, completeUnimported = true, }, }, }) vim.lsp.enable("gopls")