Files
dotfiles/.config/nvim/lua/plugins/lsp.lua
Felix Nehrke 2e3412c410 Add descriptions for lsp-shortcuts
Since I use which-key I can actually benefit a lot from meaningful
descriptions of my custom shortcuts. Whenever I feel like I forgot a
multi-key shortcut I can simply type the first letter (in my case
usually "Space" or "g") and peek into the preview of whichkey. It lists
all possible additional keystrokes and their descriptions, so this
change makes it a lot easier for me to find the command I'm looking for.
2026-02-03 00:28:49 +01:00

132 lines
4.1 KiB
Lua

local on_attach = function(_, bufnr)
local desc = function (desc)
return { noremap = true, silent = true, buffer = bufnr, desc = desc }
end
local ts = require("telescope.builtin")
vim.keymap.set("n", "<Leader>rn", vim.lsp.buf.rename, desc("Rename identifier"))
vim.keymap.set("n", "<Leader>ca", vim.lsp.buf.code_action, desc("Code actions"))
vim.keymap.set("n", "gd", vim.lsp.buf.definition, desc("Jump to definition"))
vim.keymap.set("n", "ge", vim.diagnostic.open_float, desc("Open diagnostics, show errors"))
vim.keymap.set("n", "gf", function() vim.lsp.buf.format { async = true } end, desc("Format code"))
vim.keymap.set("n", "gi", vim.lsp.buf.implementation, desc("Jump to implementation"))
vim.keymap.set("n", "gk", vim.lsp.buf.hover, desc("Show quick-docs"))
vim.keymap.set("n", "gK", vim.lsp.buf.signature_help, desc("Show signature"))
vim.keymap.set("n", "gn", function() vim.diagnostic.jump({ count = 1, float = true }) end, desc("Jump to next occurence"))
vim.keymap.set("n", "gN", function() vim.diagnostic.jump({ count = -1, float = true }) end, desc("Jump to previous occurence"))
vim.keymap.set("n", "gr", ts.lsp_references, desc("Search references"))
vim.api.nvim_buf_set_option(bufnr, "omnifunc", "v:lua.vim.lsp.omnifunc")
end
return {
"mason-org/mason-lspconfig.nvim",
dependencies = {
{ "mason-org/mason.nvim", opts = {} },
"neovim/nvim-lspconfig",
"nvim-telescope/telescope.nvim",
"hrsh7th/nvim-cmp", -- IMPORTANT: autocomplete must be configured correctly!
-- {
-- 'stevearc/dressing.nvim',
-- opts = {},
-- event='VeryLazy'
-- }
},
opts = {},
config = function()
local masonlsp = require("mason-lspconfig")
masonlsp.setup({
-- possibilities: https://mason-registry.dev/registry/list
ensure_installed = {
"bashls",
"cssls",
"docker_language_server",
"eslint",
"gopls",
"harper_ls",
"html",
"jsonls",
"lua_ls",
"terraformls",
"ts_ls",
"vue_ls",
},
})
local vue_language_server_path = vim.fn.expand '$MASON/packages' ..
'/vue-language-server' .. '/node_modules/@vue/language-server'
local vue_plugin = {
name = '@vue/typescript-plugin',
location = vue_language_server_path,
languages = { 'vue' },
configNamespace = 'typescript',
}
local home_dir = os.getenv('HOME')
local augroup = vim.api.nvim_create_augroup("LspFormatting", {})
local capabilities = require("cmp_nvim_lsp").default_capabilities()
capabilities.textDocument.completion.completionItem.snippetSupport = true
local opts = {
on_attach = on_attach,
capabilities = capabilities,
}
-- A list of language-server-configs https://github.com/neovim/nvim-lspconfig/blob/master/doc/configs.md
vim.lsp.config("bashls", opts)
vim.lsp.config("cssls", opts)
vim.lsp.config("docker_language_server", opts)
vim.lsp.config("eslint", {
on_attach = function(client, bufnr)
vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr })
vim.api.nvim_create_autocmd("BufWritePre", {
group = augroup,
buffer = bufnr,
callback = function()
if vim.bo.filetype == "typescript" then
vim.lsp.buf.format()
end
end,
})
end,
})
vim.lsp.config("gopls", opts)
vim.lsp.config("harper_ls", { -- spelling and grammer checks
on_attach = on_attach,
capabilities = capabilities,
filetypes = { "markdown", "asciidoc", "text", "vimwiki" },
})
vim.lsp.config("html", opts)
vim.lsp.config("jsonls", opts)
vim.lsp.config("lua_ls", {
on_attach = on_attach,
capabilities = capabilities,
settings = {
Lua = {
diagnostics = {
globals = { "vim" }
},
telemetry = { enable = false },
}
}
})
vim.lsp.config("terraformls", opts)
vim.lsp.config("ts_ls", {
on_attach = on_attach,
capabilities = capabilities,
init_options = {
plugins = {
vue_plugin,
},
},
filetypes = { 'typescript', 'javascript', 'javascriptreact', 'typescriptreact', 'vue' },
})
vim.lsp.config('vue_ls', opts)
vim.lsp.enable({
"cssls",
"eslint",
"html",
"harper_ls",
"jsonls",
"lua_ls",
"terraformls",
"ts_ls",
"vue_ls",
})
end,
}