local augroup = vim.api.nvim_create_augroup("LspFormatting", {}) local on_attach = function(client, bufnr) local function nnoremap(key, command) vim.keymap.set("n", key, command, { noremap = true, silent = true, buffer = bufnr }) end local telescope = require("telescope.builtin") nnoremap("gD", vim.lsp.buf.declaration) nnoremap("gd", telescope.lsp_definitions) nnoremap("gt", telescope.lsp_type_definitions) nnoremap("gi", telescope.lsp_implementations) nnoremap("gr", telescope.lsp_references) nnoremap("K", vim.lsp.buf.hover) nnoremap("", vim.lsp.buf.signature_help) nnoremap("rn", vim.lsp.buf.rename) nnoremap("ca", vim.lsp.buf.code_action) nnoremap("f", vim.lsp.buf.formatting) nnoremap("d", telescope.diagnostics) nnoremap("", vim.diagnostic.goto_prev) nnoremap("", vim.diagnostic.goto_next) if client.supports_method("textDocument/formatting") then vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr }) vim.api.nvim_create_autocmd("BufWritePre", { group = augroup, buffer = bufnr, callback = function() vim.lsp.buf.formatting_sync({}, 3000) end, }) end end local lsp_status = require("lsp-status") lsp_status.config({ current_function = false, show_filename = false, diagnostics = true, }) lsp_status.register_progress() local capabilities = vim.tbl_extend("keep", vim.lsp.protocol.make_client_capabilities(), lsp_status.capabilities) capabilities = require("cmp_nvim_lsp").update_capabilities(capabilities) local servers = { ["bashls"] = {}, ["rnix"] = {}, ["terraformls"] = {}, ["tflint"] = {}, } local lspconfig = require("lspconfig") for lsp, settings in pairs(servers) do lspconfig[lsp].setup({ settings = settings, on_attach = on_attach, capabilities = capabilities, }) end require("rust-tools").setup({ server = { on_attach = on_attach, settings = { ["rust-analyzer"] = { cargo = { loadOutDirsFromCheck = true, }, checkOnSave = { command = "clippy" }, procMacro = { enable = true, }, }, }, capabilities = capabilities, }, }) local luadev = require("lua-dev").setup({ lspconfig = { on_attach = on_attach, capabilities = capabilities, }, runtime_path = true, }) lspconfig["sumneko_lua"].setup(luadev)