1
0
Fork 0
mirror of https://codeberg.org/Mo8it/dotfiles.git synced 2024-10-17 20:52:40 +00:00
dotfiles/.config/nvim/lua/plugins/lsp-cmp.lua
2022-08-21 21:04:46 +02:00

165 lines
3.9 KiB
Lua

-- Add additional capabilities supported by nvim-cmp
local capabilities = vim.lsp.protocol.make_client_capabilities()
capabilities = require("cmp_nvim_lsp").update_capabilities(capabilities)
local lspconfig = require("lspconfig")
-- Enable some language servers with the additional completion capabilities offered by nvim-cmp
local formatting_augroup = vim.api.nvim_create_augroup("LspFormatting", {})
local function format_on_save(client, bufnr)
if client.supports_method("textDocument/formatting") then
vim.api.nvim_clear_autocmds({
group = formatting_augroup,
buffer = bufnr,
})
vim.api.nvim_create_autocmd("BufWritePre", {
group = formatting_augroup,
buffer = bufnr,
callback = function()
-- NOTE: On 0.8, use vim.lsp.buf.format({ bufnr = bufnr }) instead
vim.lsp.buf.formatting_sync(nil, 60000)
end,
})
end
end
local lsp_signature = require("lsp_signature")
local navic = require("nvim-navic")
local function on_attach_without_formatting(client, bufnr)
lsp_signature_config = {
bind = true,
doc_lines = 0,
hint_prefix = "💡 ",
handler_opts = {
border = "single",
},
transparency = 10,
}
lsp_signature.on_attach(lsp_signature_config)
navic.attach(client, bufnr)
end
local function on_attach_with_formatting(client, bufnr)
on_attach_without_formatting(client, bufnr)
format_on_save(client, bufnr)
end
lspconfig["jedi_language_server"].setup({
capabilities = capabilities,
on_attach = on_attach_without_formatting,
})
lspconfig["julials"].setup({
capabilities = capabilities,
on_attach = on_attach_with_formatting,
})
lspconfig["clangd"].setup({
capabilities = capabilities,
on_attach = on_attach_with_formatting,
})
lspconfig["gopls"].setup({
capabilities = capabilities,
on_attach = on_attach_with_formatting,
})
-- null-ls
local null_ls = require("null-ls")
null_ls.setup({
sources = {
null_ls.builtins.diagnostics.fish,
null_ls.builtins.diagnostics.yamllint,
null_ls.builtins.formatting.beautysh,
null_ls.builtins.formatting.black,
null_ls.builtins.formatting.djhtml,
null_ls.builtins.formatting.fish_indent,
null_ls.builtins.formatting.isort,
null_ls.builtins.formatting.dprint.with({
filetypes = {
"markdown",
},
extra_args = {
"$FILENAME",
},
}),
null_ls.builtins.formatting.nginx_beautifier,
null_ls.builtins.formatting.prettier.with({
disabled_filetypes = { "markdown" },
}),
null_ls.builtins.formatting.shellharden,
null_ls.builtins.formatting.stylua,
null_ls.builtins.formatting.taplo,
},
on_attach = format_on_save,
})
-- luasnip setup
local luasnip = require("luasnip")
-- nvim-cmp setup
local has_words_before = function()
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil
end
vim.opt.completeopt = "menuone,noselect,preview"
local cmp = require("cmp")
cmp.setup({
snippet = {
expand = function(args)
luasnip.lsp_expand(args.body)
end,
},
mapping = {
["<C-Space>"] = cmp.mapping(cmp.mapping.complete(), { "i", "c" }),
["<CR>"] = cmp.mapping.confirm({ select = true }),
["<Tab>"] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_next_item()
elseif luasnip.expand_or_jumpable() then
luasnip.expand_or_jump()
elseif has_words_before() then
cmp.complete()
else
fallback()
end
end, { "i", "c", "s" }),
["<S-Tab>"] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_prev_item()
elseif luasnip.jumpable(-1) then
luasnip.jump(-1)
else
fallback()
end
end, { "i", "c", "s" }),
},
sources = {
{ name = "nvim_lsp" },
{ name = "luasnip" },
{ name = "buffer" },
{ name = "path" },
},
})
-- Use buffer source for "/"
cmp.setup.cmdline("/", {
sources = {
{ name = "buffer" },
},
})
-- Use cmdline & path source for ":"
cmp.setup.cmdline(":", {
sources = {
{ name = "path" },
{ name = "cmdline" },
},
})