|
| 1 | +local M = {} |
| 2 | + |
| 3 | +local status_cmp_ok, cmp_nvim_lsp = pcall(require, "cmp_nvim_lsp") |
| 4 | +if not status_cmp_ok then |
| 5 | + return |
| 6 | +end |
| 7 | + |
| 8 | +M.capabilities = vim.lsp.protocol.make_client_capabilities() |
| 9 | +M.capabilities.textDocument.completion.completionItem.snippetSupport = true |
| 10 | +M.capabilities = cmp_nvim_lsp.default_capabilities(M.capabilities) |
| 11 | + |
| 12 | +local function lsp_keymaps(bufnr) |
| 13 | + local opts = { noremap = true, silent = true } |
| 14 | + local keymap = vim.api.nvim_buf_set_keymap |
| 15 | + keymap(bufnr, "n", "gD", "<cmd>lua vim.lsp.buf.declaration()<CR>", opts) |
| 16 | + keymap(bufnr, "n", "gd", "<cmd>lua vim.lsp.buf.definition()<CR>", opts) |
| 17 | + keymap(bufnr, "n", "K", "<cmd>lua vim.lsp.buf.hover()<CR>", opts) |
| 18 | + keymap(bufnr, "n", "gI", "<cmd>lua vim.lsp.buf.implementation()<CR>", opts) |
| 19 | + keymap(bufnr, "n", "gr", "<cmd>lua vim.lsp.buf.references()<CR>", opts) |
| 20 | + keymap(bufnr, "n", "gl", "<cmd>lua vim.diagnostic.open_float()<CR>", opts) |
| 21 | + keymap(bufnr, "n", "<leader>lf", "<cmd>lua vim.lsp.buf.format{ async = true }<cr>", opts) |
| 22 | + keymap(bufnr, "n", "<leader>li", "<cmd>LspInfo<cr>", opts) |
| 23 | + keymap(bufnr, "n", "<leader>lI", "<cmd>LspInstallInfo<cr>", opts) |
| 24 | + keymap(bufnr, "n", "<leader>la", "<cmd>lua vim.lsp.buf.code_action()<cr>", opts) |
| 25 | + keymap(bufnr, "n", "<leader>lj", "<cmd>lua vim.diagnostic.goto_next({buffer=0})<cr>", opts) |
| 26 | + keymap(bufnr, "n", "<leader>lk", "<cmd>lua vim.diagnostic.goto_prev({buffer=0})<cr>", opts) |
| 27 | + keymap(bufnr, "n", "<leader>lr", "<cmd>lua vim.lsp.buf.rename()<cr>", opts) |
| 28 | + keymap(bufnr, "n", "<leader>ls", "<cmd>lua vim.lsp.buf.signature_help()<CR>", opts) |
| 29 | + keymap(bufnr, "n", "<leader>lq", "<cmd>lua vim.diagnostic.setloclist()<CR>", opts) |
| 30 | +end |
| 31 | + |
| 32 | +M.on_attach = function(client, bufnr) |
| 33 | + if client.name == "sumneko_lua" then |
| 34 | + client.server_capabilities.documentFormattingProvider = false |
| 35 | + end |
| 36 | + |
| 37 | + lsp_keymaps(bufnr) |
| 38 | + local status_ok, illuminate = pcall(require, "illuminate") |
| 39 | + if not status_ok then |
| 40 | + return |
| 41 | + end |
| 42 | + illuminate.on_attach(client) |
| 43 | +end |
| 44 | + |
| 45 | +M.setup = function() |
| 46 | + local signs = { |
| 47 | + |
| 48 | + { name = "DiagnosticSignError", text = "" }, |
| 49 | + { name = "DiagnosticSignWarn", text = "" }, |
| 50 | + { name = "DiagnosticSignHint", text = "" }, |
| 51 | + { name = "DiagnosticSignInfo", text = "" }, |
| 52 | + } |
| 53 | + |
| 54 | + for _, sign in ipairs(signs) do |
| 55 | + vim.fn.sign_define(sign.name, { texthl = sign.name, text = sign.text, numhl = "" }) |
| 56 | + end |
| 57 | + |
| 58 | + local config = { |
| 59 | + virtual_text = false, -- disable virtual text |
| 60 | + signs = { |
| 61 | + active = signs, -- show signs |
| 62 | + }, |
| 63 | + update_in_insert = true, |
| 64 | + underline = true, |
| 65 | + severity_sort = true, |
| 66 | + float = { |
| 67 | + focusable = true, |
| 68 | + style = "minimal", |
| 69 | + border = "rounded", |
| 70 | + source = "always", |
| 71 | + header = "", |
| 72 | + prefix = "", |
| 73 | + }, |
| 74 | + } |
| 75 | + |
| 76 | + vim.diagnostic.config(config) |
| 77 | + |
| 78 | + vim.lsp.handlers["textDocument/hover"] = vim.lsp.with(vim.lsp.handlers.hover, { |
| 79 | + border = "rounded", |
| 80 | + }) |
| 81 | + |
| 82 | + vim.lsp.handlers["textDocument/signatureHelp"] = vim.lsp.with(vim.lsp.handlers.signature_help, { |
| 83 | + border = "rounded", |
| 84 | + }) |
| 85 | +end |
| 86 | + |
| 87 | +return M |
0 commit comments