dotfiles/dot_config/nvim/lua/lsp.lua

193 lines
5.3 KiB
Lua
Raw Normal View History

2022-07-30 07:17:12 +02:00
require("mason").setup({
2022-10-11 07:40:50 +02:00
ui = {
border = "none",
icons = {
package_installed = "",
package_pending = "",
package_uninstalled = "",
},
},
2022-07-30 07:17:12 +02:00
})
require("mason-lspconfig").setup({ automatic_installation = true })
vim.opt.completeopt = "menu,menuone,noselect"
2022-09-06 23:44:35 +02:00
local present, cmp = pcall(require, "cmp")
2022-10-17 17:13:31 +02:00
if not present or not cmp then
vim.pretty_print("cmp not found")
2022-10-11 07:40:50 +02:00
return
2022-09-06 23:44:35 +02:00
end
2022-07-30 07:17:12 +02:00
cmp.setup({
2022-10-11 07:40:50 +02:00
snippet = {
expand = function(args)
vim.fn["vsnip#anonymous"](args.body)
end,
},
2022-10-17 17:13:31 +02:00
window = {
completion = cmp.config.window.bordered(),
documentation = cmp.config.window.bordered(),
},
2022-10-11 07:40:50 +02:00
mapping = cmp.mapping.preset.insert({
2022-10-17 17:13:31 +02:00
["<Tab>"] = cmp.mapping(function(fallback)
-- This little snippet will confirm with tab, and if no entry is selected, will confirm the first item
if cmp.visible() then
local entry = cmp.get_selected_entry()
if not entry then
cmp.select_next_item({ behavior = cmp.SelectBehavior.Select })
else
cmp.confirm()
end
else
fallback()
end
end, { "i", "s", "c" }),
2022-10-11 07:40:50 +02:00
}),
sources = cmp.config.sources({
{ name = "nvim_lsp" },
{ name = "vsnip" },
2022-10-17 17:13:31 +02:00
{ name = "vim-dadbod-completion" },
}, {
{ name = "buffer" },
}),
2022-07-30 07:17:12 +02:00
})
cmp.setup.filetype("gitcommit", {
2022-10-11 07:40:50 +02:00
sources = cmp.config.sources({
{ name = "cmp_git" },
2022-10-17 17:13:31 +02:00
}, {
{ name = "buffer" },
}),
2022-07-30 07:17:12 +02:00
})
2022-10-17 17:13:31 +02:00
cmp.setup.cmdline({ "/", "?" }, {
2022-10-11 07:40:50 +02:00
mapping = cmp.mapping.preset.cmdline(),
2022-10-17 17:13:31 +02:00
sources = {
{ name = "buffer" },
},
2022-07-30 07:17:12 +02:00
})
2022-10-17 17:13:31 +02:00
2022-07-30 07:17:12 +02:00
cmp.setup.cmdline(":", {
2022-10-11 07:40:50 +02:00
mapping = cmp.mapping.preset.cmdline(),
2022-10-17 17:13:31 +02:00
sources = cmp.config.sources({
{ name = "path" },
}, {
{ name = "cmdline" },
}),
2022-07-30 07:17:12 +02:00
})
2022-10-17 17:13:31 +02:00
local capabilities = require("cmp_nvim_lsp").default_capabilities(
2022-10-11 07:40:50 +02:00
vim.lsp.protocol.make_client_capabilities()
)
2022-07-30 07:17:12 +02:00
---@diagnostic disable-next-line: unused-local
local on_attach = function(client, bufnr)
2022-10-11 07:40:50 +02:00
-- Enable completion triggered by <c-x><c-o>
vim.api.nvim_buf_set_option(bufnr, "omnifunc", "v:lua.vim.lsp.omnifunc")
-- Mappings.
-- See `:help vim.lsp.*` for documentation on any of the below functions
local bufopts = { noremap = true, silent = true, buffer = bufnr }
vim.keymap.set("n", "gD", vim.lsp.buf.declaration, bufopts)
vim.keymap.set("n", "gd", vim.lsp.buf.definition, bufopts)
vim.keymap.set("n", "K", vim.lsp.buf.hover, bufopts)
vim.keymap.set("n", "gi", vim.lsp.buf.implementation, bufopts)
vim.keymap.set("n", "<C-k>", vim.lsp.buf.signature_help, bufopts)
vim.keymap.set("n", "<space>wa", vim.lsp.buf.add_workspace_folder, bufopts)
vim.keymap.set("n", "<space>wr", vim.lsp.buf.remove_workspace_folder, bufopts)
vim.keymap.set("n", "<space>wl", function()
print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
end, bufopts)
vim.keymap.set("n", "<space>D", vim.lsp.buf.type_definition, bufopts)
vim.keymap.set("n", "<space>rn", vim.lsp.buf.rename, bufopts)
vim.keymap.set("n", "<space>ca", vim.lsp.buf.code_action, bufopts)
vim.keymap.set("n", "gr", vim.lsp.buf.references, bufopts)
2022-07-30 07:17:12 +02:00
end
2022-10-17 17:13:31 +02:00
local lspconfig = require("lspconfig")
2022-07-30 07:17:12 +02:00
2022-10-17 17:13:31 +02:00
lspconfig.gopls.setup({
2022-10-11 07:40:50 +02:00
capabilities = capabilities,
on_attach = on_attach,
2022-10-17 17:13:31 +02:00
})
lspconfig.sumneko_lua.setup({
2022-10-11 07:40:50 +02:00
capabilities = capabilities,
2022-10-17 17:13:31 +02:00
on_attach = on_attach,
2022-10-11 07:40:50 +02:00
settings = {
Lua = {
workspace = {
-- Make the server aware of Neovim runtime files
library = vim.api.nvim_get_runtime_file("", true),
checkThirdParty = false,
maxPreload = 100000,
preloadFileSize = 10000,
},
diagnostics = {
2022-10-17 17:13:31 +02:00
globals = { "vim" }, -- Get the server to recognize the `vim` global
2022-10-11 07:40:50 +02:00
},
telemetry = {
enable = false,
},
},
},
2022-07-30 07:17:12 +02:00
})
2022-10-17 17:13:31 +02:00
lspconfig["emmet_ls"].setup({
capabilities = capabilities,
2022-10-11 07:40:50 +02:00
on_attach = on_attach,
filetypes = {
"javascriptreact",
"typescriptreact",
"html",
"svelte",
"css",
"less",
"sass",
"scss",
},
2022-07-30 07:17:12 +02:00
})
-- attach tsserver only when there's a 'package.json' file in the CWD
2022-10-17 17:13:31 +02:00
lspconfig.tsserver.setup({
2022-10-11 07:40:50 +02:00
capabilities = capabilities,
2022-10-17 17:13:31 +02:00
on_attach = on_attach,
root_dir = lspconfig.util.root_pattern("package.json"),
2022-07-30 07:17:12 +02:00
})
-- attach deno only when there's a 'deps.ts' file in the CWD
2022-10-17 17:13:31 +02:00
lspconfig.denols.setup({
2022-10-11 07:40:50 +02:00
capabilities = capabilities,
2022-10-17 17:13:31 +02:00
on_attach = on_attach,
root_dir = lspconfig.util.root_pattern("deps.ts"),
2022-10-11 07:40:50 +02:00
single_file_support = false,
2022-07-30 07:17:12 +02:00
})
2022-10-17 17:13:31 +02:00
local null = require("null-ls")
local augroup = vim.api.nvim_create_augroup("LspFormatting", {})
null.setup({
sources = {
null.builtins.formatting.gofmt,
null.builtins.formatting.stylua,
null.builtins.formatting.stylua,
null.builtins.formatting.deno_fmt,
2022-10-11 07:40:50 +02:00
},
2022-10-17 17:13:31 +02:00
on_attach = function(client, bufnr)
if client.supports_method("textDocument/formatting") then
vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr })
vim.api.nvim_create_autocmd("BufWritePre", {
group = augroup,
buffer = bufnr,
callback = function()
vim.lsp.buf.format({ bufnr = bufnr })
end,
})
end
end,
2022-07-30 07:17:12 +02:00
})
2022-10-17 17:13:31 +02:00
local toggle_formatters = function()
null.toggle({ methods = null.methods.FORMATTING })
end
vim.api.nvim_create_user_command("ToggleFormatters", toggle_formatters, {})
local cmp_autopairs = require("nvim-autopairs.completion.cmp")
cmp.event:on("confirm_done", cmp_autopairs.on_confirm_done())