return { "williamboman/mason.nvim", enabled = true, dependencies = { "williamboman/mason-lspconfig.nvim", }, opts = { ensure_installed = { "jdtls", "java-debug-adapter", "sonarlint-language-server", "gradle-language-server", "html-lsp", "json-lsp", "typos-lsp" }, }, config = function() require("mason").setup() require("mason-lspconfig").setup() lspconfig = require "lspconfig" -- Gradle lspconfig.gradle_ls.setup{} -- HTML lspconfig.html.setup{} -- JSON lspconfig.jsonls.setup{} -- Go lspconfig.gopls.setup{ settings = { gopls = { gofumpt = true, staticcheck = true, analyses = { unusedparams = true, unusedresult = true, unusedwrite = true, unusedvariable = true, useany = true, fieldalignment = false, nilness = true, shadow = true, }, hints = { assignVariableTypes = true, compositeLiteralFields = true, compositeLiteralTypes = true, constantValues = true, functionTypeParameters = true, parameterNames = true, rangeVariableTypes = true, }, codelenses = { gc_details = true, generate = true, regenerate_cgo = true, tidy = true, upgrade_dependency = true, vendor = true, }, }, }, } -- Organize imports and format code on save vim.api.nvim_create_autocmd({"BufWritePre"}, { pattern = "*.go", callback = function() local params = vim.lsp.util.make_range_params() params.context = {only = {"source.organizeImports"}} local result = vim.lsp.buf_request_sync(0, "textDocument/codeAction", params) for cid, res in pairs(result or {}) do for _, r in pairs(res.result or {}) do if r.edit then local enc = (vim.lsp.get_client_by_id(cid) or {}).offset_encoding or "utf-16" vim.lsp.util.apply_workspace_edit(r.edit, enc) end end end vim.lsp.buf.format({async = false}) end }) -- Python lspconfig.pylsp.setup{ settings = { pylsp = { plugins = { autopep8 = { enabled = false, }, yapf = { enabled = true, }, pylint = { enabled = false, }, pyflakes = { enabled = true, }, pycodestyle = { enabled = true, ignore = { 'E402', 'W503', }, }, }, }, }, } lspconfig.typos_lsp.setup({ settings = { filetypes = { 'java', 'go' }, }, init_options = { diagnosticSeverity = "Info", } }) end, }