return {
{
"VonHeikemen/lsp-zero.nvim",
branch = "v2.x",
lazy = false,
config = function()
require("lsp-zero.settings").preset({})
end,
},
-- Autocompletion
{
"hrsh7th/nvim-cmp",
event = "InsertEnter",
dependencies = {
{ "L3MON4D3/LuaSnip" },
},
config = function()
require("lsp-zero.cmp").extend()
local cmp = require("cmp")
cmp.setup({
mapping = {
["<Tab>"] = cmp.mapping.select_next_item(elect_opts),
["<S-Tab>"] = cmp.mapping.select_prev_item(select_opts),
["<cr>"] = cmp.mapping.confirm({
behavior = cmp.ConfirmBehavior.Replace,
select = false,
}),
},
})
end,
},
-- LSP + Trouble
{
"neovim/nvim-lspconfig",
cmd = "LspInfo",
event = { "BufReadPre", "BufNewFile" },
dependencies = {
{ "jose-elias-alvarez/null-ls.nvim" },
{ "folke/trouble.nvim" },
{ "hrsh7th/cmp-nvim-lsp" },
{ "williamboman/mason-lspconfig.nvim" },
{
"williamboman/mason.nvim",
build = function()
pcall(vim.cmd, "MasonUpdate")
end,
},
},
config = function()
-- Trouble diagnostics keymap
local trouble_opts = {
action_keys = {
jump = {},
jump_close = { "<cr>" },
},
}
require("trouble").setup(trouble_opts)
vim.keymap.set("n", "<leader>b", "<cmd>TroubleToggle<cr>", { silent = true, noremap = true })
-- Null-ls
local lsp_formatting = function(bufnr)
vim.lsp.buf.format({
filter = function(client)
-- I added this part
local filetype = vim.api.nvim_buf_get_option(0, "filetype")
if filetype == "cpp" or filetype == "c" then
return client.name == "clangd"
end
-- End of cusom part
return client.name == "null-ls"
end,
bufnr = bufnr,
})
local augroup = vim.api.nvim_create_augroup("LspFormatting", {})
end
local lsp = require("lsp-zero")
-- stylua: ignore start
lsp.on_attach(function(client, bufnr)
-- Null-ls stuff
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()
lsp_formatting(bufnr)
end,
})
end
-- End null-ls stuff
lsp.default_keymaps({ buffer = bufnr })
local opts = { buffer = bufnr, remap = false }
local additional_opts = { buffer = bufnr, remap = false, silent = true }
vim.keymap.set('n', 'gd', function() vim.lsp.buf.definition() end, opts)
vim.keymap.set('n', 'gD', function() vim.lsp.buf.declaration() end, opts)
vim.keymap.set('n', 'gt', function() vim.lsp.buf.type_definition() end, opts)
vim.keymap.set('n', 'K', function() vim.lsp.buf.hover() end, opts)
vim.keymap.set('n', '<leader>vws', function() vim.lsp.buf.workspace_symbol() end, opts)
vim.keymap.set('n', '<leader>vd', function() vim.diagnostic.open_float() end, opts)
vim.keymap.set('n', '[d', function() vim.diagnostic.goto_next() end, opts)
vim.keymap.set('n', ']d', function() vim.diagnostic.goto_prev() end, opts)
vim.keymap.set('n', '<leader>vca', function() vim.lsp.buf.code_action() end, opts)
vim.keymap.set('n', '<leader>rr', function() require('telescope.builtin').lsp_references() end, additional_opts)
vim.keymap.set('n', '<leader>rn', function() vim.lsp.buf.rename() end, opts)
vim.keymap.set('i', '<C-h>', function() vim.lsp.buf.signature_help() end, opts)
end)
-- Configure Language Servers Here
require('lspconfig').lua_ls.setup(lsp.nvim_lua_ls())
require('lspconfig').clangd.setup({
cmd = {
'clangd',
'--background-index',
'--clang-tidy'
}
})
lsp.setup()
local null_ls = require('null-ls')
null_ls.setup({
sources = {
-- Add null-ls sources here
null_ls.builtins.formatting.prettierd,
null_ls.builtins.formatting.stylua,
},
})
end,
},
}