nvim/lua/plugins/lspconfig.lua

204 lines
7 KiB
Lua

return {
{ "hrsh7th/cmp-nvim-lsp" },
{ "hrsh7th/cmp-cmdline" },
{ "hrsh7th/cmp-path" },
{ "hrsh7th/cmp-buffer" },
{
"ray-x/lsp_signature.nvim",
event = "InsertEnter",
opts = {},
},
{
"folke/lazydev.nvim",
ft = "lua", -- only load on lua files
opts = {
library = {
-- See the configuration section for more details
-- Load luvit types when the `vim.uv` word is found
{ path = "${3rd}/luv/library", words = { "vim%.uv" } },
},
},
},
{
"williamboman/mason-lspconfig.nvim",
opts = {
ensure_installed = { "lua_ls", "rust_analyzer", "clangd", "zls" },
handlers = {
function(server_name)
vim.opt.signcolumn = "yes"
local navic = require "nvim-navic"
local on_attach = function(client, bufnr)
require("lsp_signature").on_attach({}, bufnr)
if client.server_capabilities.documentSymbolProvider then
navic.attach(client, bufnr)
end
end
local capabilities = require("cmp_nvim_lsp").default_capabilities()
require("lspconfig")[server_name].setup {
on_attach = on_attach,
capabilities = capabilities,
}
end,
},
},
},
{
"onsails/lspkind.nvim",
config = function()
require("lspkind").init { preset = "codicons" }
end,
},
{
"hrsh7th/nvim-cmp",
config = function()
local cmp = require "cmp"
local lspkind = require "lspkind"
cmp.setup {
formatting = {
format = lspkind.cmp_format {
mode = "symbol", -- show only symbol annotations
maxwidth = {
menu = 50, -- leading text (labelDetails)
abbr = 50, -- actual suggestion item
},
ellipsis_char = "...", -- when popup menu exceed maxwidth, the truncated part would show ellipsis_char instead (must define maxwidth first)
show_labelDetails = true, -- show labelDetails in menu. Disabled by default
before = function(entry, vim_item)
local highlights_info = require("colorful-menu").cmp_highlights(entry)
-- highlight_info is nil means we are missing the ts parser, it's
-- better to fallback to use default `vim_item.abbr`. What this plugin
-- offers is two fields: `vim_item.abbr_hl_group` and `vim_item.abbr`.
if highlights_info ~= nil then
vim_item.abbr_hl_group = highlights_info.highlights
vim_item.abbr = highlights_info.text
end
return vim_item
end,
},
},
sources = {
{ name = "nvim_lsp" },
{
name = "lazydev",
group_index = 0, -- set group index to 0 to skip loading LuaLS completions
},
},
snippet = {
expand = function(args)
vim.snippet.expand(args.body)
end,
},
mapping = cmp.mapping.preset.insert {
["<C-b>"] = cmp.mapping.scroll_docs(-4),
["<C-f>"] = cmp.mapping.scroll_docs(4),
["<C-Space>"] = cmp.mapping.complete(),
["<C-e>"] = cmp.mapping.abort(),
["<CR>"] = cmp.mapping.confirm { select = true }, -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items.
},
}
cmp.setup.cmdline({ "/", "?" }, {
mapping = cmp.mapping.preset.cmdline(),
sources = {
{ name = "buffer" },
},
})
-- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore).
cmp.setup.cmdline(":", {
mapping = cmp.mapping.preset.cmdline(),
sources = cmp.config.sources({
{ name = "path" },
}, {
{ name = "cmdline" },
}),
matching = { disallow_symbol_nonprefix_matching = false },
})
end,
},
{
"neovim/nvim-lspconfig",
lazy = false,
keys = {
{
"ca",
vim.lsp.buf.code_action,
desc = "LSP: [C]ode Action",
},
{
"<leader>rr",
vim.lsp.buf.rename,
desc = "LSP rename",
},
{
"<leader>lh",
vim.lsp.buf.hover,
desc = "[L]sp: Hover",
},
},
config = function()
vim.opt.signcolumn = "yes"
local navic = require "nvim-navic"
local on_attach = function(client, bufnr)
if client.server_capabilities.documentSymbolProvider then
navic.attach(client, bufnr)
end
end
vim.filetype.add {
extension = {
hlsl = "hlsl",
},
}
if not require("lspconfig.configs").hlsl_tools then
require("lspconfig.configs").hlsl_tools = {
default_config = {
cmd = "/home/hstasonis/.config/nvim/vendor/shader-language-server",
on_new_config = function(new_config, _)
new_config.cmd_env.LD_LIBRARY_PATH = "/home/hstasonis/.config/nvim/vendor"
end,
},
single_file_support = true,
filetypes = { "hlsl" },
}
end
-- Set it up as usual
require("lspconfig.configs").hlsl_tools.setup {
on_attach = on_attach,
}
end,
},
{
"williamboman/mason.nvim",
config = function()
require("mason").setup {}
end,
},
{
"SmiteshP/nvim-navic",
config = function()
vim.o.winbar = "%{%v:lua.require'nvim-navic'.get_location()%}"
end,
},
{
"j-hui/fidget.nvim",
opts = {},
},
{
"xzbdmw/colorful-menu.nvim",
config = function()
-- You don't need to set these options.
require("colorful-menu").setup {}
end,
},
}