aboutsummaryrefslogtreecommitdiffstats
path: root/nvim/lua/user/lsp.lua
diff options
context:
space:
mode:
authorMatthew Lemon <y@yulqen.org>2023-05-14 09:10:26 +0100
committerMatthew Lemon <y@yulqen.org>2023-05-14 09:10:26 +0100
commit0721b537a8aa3be8b70c183b25951494df9dcd0e (patch)
treeeff07bbc31aeefbb9d2e441bb5ca8b5a5a527ffb /nvim/lua/user/lsp.lua
parent10a89dfbc6bc57ce12c8cf90f1b38a34b728b369 (diff)
Installs nvim config base-idea
Diffstat (limited to 'nvim/lua/user/lsp.lua')
-rw-r--r--nvim/lua/user/lsp.lua111
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