local telescope_mapper = require("alpha.telescope.mappings") local format_on_save = function(_) vim.cmd([[ augroup lsp_buf_format au! BufWritePre autocmd BufWritePre :lua vim.lsp.buf.format({ async = true }) augroup END ]]) end local filetype_attach = setmetatable({ go = format_on_save, php = format_on_save, -- lua = format_on_save, gdscript = function(_) end, }, { __index = function() return function() end end, }) local function on_attach(client) local filetype = vim.api.nvim_buf_get_option(0, "filetype") -- keymaps for lsp vim.keymap.set("n", "K", vim.lsp.buf.hover, { buffer = 0 }) vim.keymap.set("n", "", vim.lsp.buf.definition, { buffer = 0 }) vim.keymap.set("n", "vrn", vim.lsp.buf.rename, { buffer = 0 }) vim.keymap.set("n", "vf", function() return vim.lsp.buf.format({ async = true }) end, { buffer = 0 }) vim.keymap.set("n", "vn", vim.diagnostic.goto_next, { buffer = 0 }) vim.keymap.set("n", "vp", vim.diagnostic.goto_prev, { buffer = 0 }) vim.keymap.set("n", "vca", vim.lsp.buf.code_action, { buffer = 0 }) vim.keymap.set("i", "", vim.lsp.buf.signature_help, { buffer = 0 }) vim.keymap.set("n", "vo", ":LspRestart", { noremap = true }) telescope_mapper("gr", "lsp_references", nil, true) telescope_mapper("pv", "find_symbol", nil, true) telescope_mapper("pd", "lsp_document_symbols", nil, true) vim.bo.omnifunc = "v:lua.vim.lsp.omnifunc" -- Attach any filetype specific options to the client filetype_attach[filetype](client) end -- vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with(vim.lsp.diagnostic.on_publish_diagnostics, { -- underline = true, -- update_in_insert = false, -- virtual_text = { spacing = 2, prefix = "●" }, -- severity_sort = true, -- }) local signs = { Error = " ", Warn = " ", Hint = " ", Info = " " } for type, icon in pairs(signs) do local hl = "DiagnosticSign" .. type vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = "" }) end -- Actual configs local lsp_flags = { debounce_text_changes = 150, } require("lspconfig")["rust_analyzer"].setup({ on_attach = on_attach, flags = lsp_flags, -- Server-specific settings... settings = { ["rust-analyzer"] = {}, }, }) require("lspconfig").dockerls.setup({ on_attach = on_attach, flags = lsp_flags, }) require("lspconfig")["intelephense"].setup({ on_attach = on_attach, flags = lsp_flags, }) require("lspconfig").jsonls.setup({ flags = lsp_flags, }) require("lspconfig").html.setup({ flags = lsp_flags, }) require("lspconfig").html.setup({ flags = lsp_flags, }) require("lspconfig").emmet_ls.setup({ flags = lsp_flags, }) require("lspconfig").gopls.setup({ on_attach = on_attach, flags = lsp_flags, }) require("lspconfig")["sumneko_lua"].setup({ on_attach = on_attach, flags = lsp_flags, settings = { Lua = { runtime = { version = "LuaJIT", }, diagnostics = { globals = { "vim" }, }, workspace = { library = vim.api.nvim_get_runtime_file("", true), }, telemetry = { enable = false, }, }, }, })