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 on_attach = function(client, bufnr) require("lsp_signature").on_attach({}, bufnr) if client.server_capabilities.documentSymbolProvider then 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 { [""] = cmp.mapping.scroll_docs(-4), [""] = cmp.mapping.scroll_docs(4), [""] = cmp.mapping.complete(), [""] = cmp.mapping.abort(), [""] = 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", }, { "rr", vim.lsp.buf.rename, desc = "LSP rename", }, { "lh", vim.lsp.buf.hover, desc = "[L]sp: Hover", }, }, config = function() vim.opt.signcolumn = "yes" local on_attach = function(client, bufnr) -- TODO: Impl 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, }, { "j-hui/fidget.nvim", opts = {}, }, { "xzbdmw/colorful-menu.nvim", config = function() -- You don't need to set these options. require("colorful-menu").setup {} end, }, }