dotfiles/home/.config/nvim/lua/plugins/lsp.lua

114 lines
3.4 KiB
Lua
Raw Normal View History

local m = {}
function m.setup()
require("mason").setup()
local mason_lsp = require("mason-lspconfig")
mason_lsp.setup()
local capabilities = m.get_capabilities()
mason_lsp.setup_handlers({
-- Default handler
function(server_name)
require("lspconfig")[server_name].setup({
on_attach = m.on_attach,
capabilities = capabilities,
})
end,
-- Override lua_ls settings
["lua_ls"] = function()
require("lspconfig").lua_ls.setup({
on_attach = m.on_attach,
capabilities = capabilities,
settings = {
Lua = {
runtime = {
-- Tell the language server which version of Lua you're using (most likely LuaJIT in the case of Neovim)
version = "LuaJIT",
},
diagnostics = {
-- Get the language server to recognize the `vim` global
globals = { "vim" },
},
workspace = {
-- Make the server aware of Neovim runtime files
library = vim.api.nvim_get_runtime_file("", true),
},
-- Do not send telemetry data containing a randomized but unique identifier
telemetry = { enable = false },
},
},
})
end,
2023-05-05 10:17:55 +03:00
-- Don't set up jdtls, it is set up by nvim-jdtls
["jdtls"] = function() end,
})
end
function m.map_keys()
local telescope_builtin = require("telescope.builtin")
require("which-key").register({
g = {
name = "Go to",
d = { telescope_builtin.lsp_definitions, "Definition" },
D = { vim.lsp.buf.declaration, "Declaration" },
i = { telescope_builtin.lsp_implementations, "Implementation" },
r = { telescope_builtin.lsp_references, "References" },
s = { telescope_builtin.lsp_document_symbols, "Symbols" },
},
["<leader>"] = {
name = "Leader",
w = {
name = "Workspace",
a = { vim.lsp.buf.add_workspace_folder, "Add folder" },
r = { vim.lsp.buf.remove_workspace_folder, "Remove folder" },
l = {
function()
print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
end,
"List folders",
},
},
k = { vim.lsp.buf.signature_help, "Signature help" },
D = { vim.lsp.buf.type_definition, "Type definition" },
rn = { vim.lsp.buf.rename, "Rename symbol" },
ca = { vim.lsp.buf.code_action, "Code action" },
e = { vim.diagnostic.open_float, "Open diagnostics" },
2023-06-27 12:39:51 +03:00
F = { vim.lsp.buf.format, "Format with LSP" },
},
K = { vim.lsp.buf.hover, "Hover" },
["["] = { d = { vim.diagnostic.goto_prev, "Previous diagnostic" } },
["]"] = { d = { vim.diagnostic.goto_next, "Next diagnostic" } },
})
end
function m.on_attach(client, bufnr)
-- Attach navic if document symbols are available
if client.server_capabilities.documentSymbolProvider then
require("nvim-navic").attach(client, bufnr)
end
-- Setup keybinds
m.map_keys()
end
function m.get_capabilities()
-- Combine built-in LSP and cmp cabaibilities
local capabilities = vim.tbl_deep_extend(
"force",
vim.lsp.protocol.make_client_capabilities(),
require("cmp_nvim_lsp").default_capabilities()
)
-- Neovim hasn't added foldingRange to default capabilities, users must add it manually
-- for ufo
--capabilities.textDocument.foldingRange = {
-- dynamicRegistration = false,
-- lineFoldingOnly = true,
--}
return capabilities
end
return m