diff options
author | Matthew Lemon <y@yulqen.org> | 2023-05-14 09:10:26 +0100 |
---|---|---|
committer | Matthew Lemon <y@yulqen.org> | 2023-05-14 09:10:26 +0100 |
commit | 0721b537a8aa3be8b70c183b25951494df9dcd0e (patch) | |
tree | eff07bbc31aeefbb9d2e441bb5ca8b5a5a527ffb /nvim/lua/user/lsp.lua | |
parent | 10a89dfbc6bc57ce12c8cf90f1b38a34b728b369 (diff) |
Installs nvim config base-idea
Diffstat (limited to 'nvim/lua/user/lsp.lua')
-rw-r--r-- | nvim/lua/user/lsp.lua | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/nvim/lua/user/lsp.lua b/nvim/lua/user/lsp.lua new file mode 100644 index 0000000..94fc781 --- /dev/null +++ b/nvim/lua/user/lsp.lua @@ -0,0 +1,111 @@ +local M = { + "neovim/nvim-lspconfig", + commit = "649137cbc53a044bffde36294ce3160cb18f32c7", + lazy = true, + dependencies = { + { + "hrsh7th/cmp-nvim-lsp", + commit = "0e6b2ed705ddcff9738ec4ea838141654f12eeef", + }, + }, +} + +local cmp_nvim_lsp = require "cmp_nvim_lsp" +function M.config() + local capabilities = vim.lsp.protocol.make_client_capabilities() + capabilities.textDocument.completion.completionItem.snippetSupport = true + capabilities = cmp_nvim_lsp.default_capabilities(M.capabilities) + + local function lsp_keymaps(bufnr) + local opts = { noremap = true, silent = true } + local keymap = vim.api.nvim_buf_set_keymap + keymap(bufnr, "n", "gD", "<cmd>lua vim.lsp.buf.declaration()<CR>", opts) + keymap(bufnr, "n", "gd", "<cmd>lua vim.lsp.buf.definition()<CR>", opts) + keymap(bufnr, "n", "K", "<cmd>lua vim.lsp.buf.hover()<CR>", opts) + keymap(bufnr, "n", "gI", "<cmd>lua vim.lsp.buf.implementation()<CR>", opts) + keymap(bufnr, "n", "gr", "<cmd>lua vim.lsp.buf.references()<CR>", opts) + keymap(bufnr, "n", "gl", "<cmd>lua vim.diagnostic.open_float()<CR>", opts) + keymap(bufnr, "n", "<leader>li", "<cmd>LspInfo<cr>", opts) + keymap(bufnr, "n", "<leader>lI", "<cmd>Mason<cr>", opts) + keymap(bufnr, "n", "<leader>la", "<cmd>lua vim.lsp.buf.code_action()<cr>", opts) + keymap(bufnr, "n", "<leader>lj", "<cmd>lua vim.diagnostic.goto_next({buffer=0})<cr>", opts) + keymap(bufnr, "n", "<leader>lk", "<cmd>lua vim.diagnostic.goto_prev({buffer=0})<cr>", opts) + keymap(bufnr, "n", "<leader>lr", "<cmd>lua vim.lsp.buf.rename()<cr>", opts) + keymap(bufnr, "n", "<leader>ls", "<cmd>lua vim.lsp.buf.signature_help()<CR>", opts) + keymap(bufnr, "n", "<leader>lq", "<cmd>lua vim.diagnostic.setloclist()<CR>", opts) + end + + local lspconfig = require "lspconfig" + local on_attach = function(client, bufnr) + if client.name == "tsserver" then + client.server_capabilities.documentFormattingProvider = false + end + + if client.name == "sumneko_lua" then + client.server_capabilities.documentFormattingProvider = false + end + + lsp_keymaps(bufnr) + require("illuminate").on_attach(client) + end + + for _, server in pairs(require("utils").servers) do + Opts = { + on_attach = on_attach, + capabilities = capabilities, + } + + server = vim.split(server, "@")[1] + + local require_ok, conf_opts = pcall(require, "settings." .. server) + if require_ok then + Opts = vim.tbl_deep_extend("force", conf_opts, Opts) + end + + lspconfig[server].setup(Opts) + end + + local signs = { + { name = "DiagnosticSignError", text = "" }, + { name = "DiagnosticSignWarn", text = "" }, + { name = "DiagnosticSignHint", text = "" }, + { name = "DiagnosticSignInfo", text = "" }, + } + + for _, sign in ipairs(signs) do + vim.fn.sign_define(sign.name, { texthl = sign.name, text = sign.text, numhl = "" }) + end + + local config = { + -- disable virtual text + virtual_text = false, + -- show signs + signs = { + active = signs, + }, + update_in_insert = true, + underline = true, + severity_sort = true, + float = { + focusable = false, + style = "minimal", + border = "rounded", + source = "always", + header = "", + prefix = "", + suffix = "", + }, + } + + vim.diagnostic.config(config) + + vim.lsp.handlers["textDocument/hover"] = vim.lsp.with(vim.lsp.handlers.hover, { + border = "rounded", + }) + + vim.lsp.handlers["textDocument/signatureHelp"] = vim.lsp.with(vim.lsp.handlers.signature_help, { + border = "rounded", + }) +end + +return M |