return { { "xzbdmw/colorful-menu.nvim", config = function() -- You don't need to set these options. require("colorful-menu").setup({ ls = { ["rust-analyzer"] = { -- Such as (as Iterator), (use std::io). extra_info_hl = "@comment", -- Similar to the same setting of gopls. align_type_to_right = true, -- See https://github.com/xzbdmw/colorful-menu.nvim/pull/36 preserve_type_when_truncate = true, }, clangd = { -- Such as "From ". extra_info_hl = "@comment", -- Similar to the same setting of gopls. align_type_to_right = true, -- the hl group of leading dot of "•std::filesystem::permissions(..)" import_dot_hl = "@comment", -- See https://github.com/xzbdmw/colorful-menu.nvim/pull/36 preserve_type_when_truncate = true, }, -- If true, try to highlight "not supported" languages. fallback = true, -- this will be applied to label description for unsupport languages fallback_extra_info_hl = "@comment", }, -- If the built-in logic fails to find a suitable highlight group for a label, -- this highlight is applied to the label. fallback_highlight = "@variable", -- If provided, the plugin truncates the final displayed text to -- this width (measured in display cells). Any highlights that extend -- beyond the truncation point are ignored. When set to a float -- between 0 and 1, it'll be treated as percentage of the width of -- the window: math.floor(max_width * vim.api.nvim_win_get_width(0)) -- Default 60. max_width = 60, }) vim.api.nvim_set_hl(0, "BlinkCmpMenu", { link = "NormalFloat" }) vim.api.nvim_set_hl(0, "BlinkCmpMenuBorder", { link = "FloatBorder" }) vim.api.nvim_set_hl(0, "BlinkCmpDoc", { link = "NormalFloat" }) vim.api.nvim_set_hl(0, "BlinkCmpDocBorder", { link = "FloatBorder" }) end, }, { "saghen/blink.cmp", config = function() require("blink.cmp").setup({ -- 'default' (recommended) for mappings similar to built-in completions (C-y to accept) -- 'super-tab' for mappings similar to vscode (tab to accept) -- 'enter' for enter to accept -- 'none' for no mappings -- -- All presets have the following mappings: -- C-space: Open menu or open docs if already open -- C-n/C-p or Up/Down: Select next/previous item -- C-e: Hide menu -- C-k: Toggle signature help (if signature.enabled = true) -- -- See :h blink-cmp-config-keymap for defining your own keymap keymap = { preset = "super-tab" }, signature = { enabled = true }, appearance = { -- 'mono' (default) for 'Nerd Font Mono' or 'normal' for 'Nerd Font' -- Adjusts spacing to ensure icons are aligned nerd_font_variant = "mono", }, -- Default list of enabled providers defined so that you can extend it -- elsewhere in your config, without redefining it, due to `opts_extend` sources = { default = { "lsp", "path", "snippets", "buffer" }, }, -- (Default) Rust fuzzy matcher for typo resistance and significantly better performance -- You may use a lua implementation instead by using `implementation = "lua"` or fallback to the lua implementation, -- when the Rust fuzzy matcher is not available, by using `implementation = "prefer_rust"` -- -- See the fuzzy documentation for more information fuzzy = { implementation = "prefer_rust_with_warning" }, -- (Default) Only show the documentation popup when manually triggered completion = { documentation = { auto_show = false }, menu = { -- border = "single", draw = { -- We don't need label_description now because label and label_description are already -- combined together in label by colorful-menu.nvim. columns = { { "kind_icon" }, { "label", gap = 1 } }, components = { label = { text = function(ctx) return require("colorful-menu").blink_components_text(ctx) end, highlight = function(ctx) return require("colorful-menu").blink_components_highlight(ctx) end, }, }, }, }, }, }) end, version = "1.*", -- AND/OR build from source, requires nightly: https://rust-lang.github.io/rustup/concepts/channels.html#working-with-nightly-rust -- build = 'cargo build --release', -- If you use nix, you can build from source using latest nightly rust with: -- build = 'nix run .#build-plugin', ---@module 'blink.cmp' ---@type blink.cmp.Config opts_extend = { "sources.default" }, }, } --[[ return { "hrsh7th/nvim-cmp", dependencies = { "hrsh7th/cmp-nvim-lsp", "hrsh7th/cmp-nvim-lua", "hrsh7th/cmp-path", "hrsh7th/cmp-cmdline", "hrsh7th/cmp-buffer", "onsails/lspkind.nvim", -- Pictograms }, config = function() local cmp = require("cmp") vim.cmd("highlight FloatBorder guibg=NONE") cmp.setup({ completion = { completeopt = "menu,menuone,noinsert", }, snippet = { expand = function(args) vim.snippet.expand(args.body) end, }, window = { -- completion = cmp.config.window.bordered(), -- documentation = cmp.config.window.bordered(), }, 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 }), [""] = function() if cmp.visible_docs() then cmp.close_docs() else cmp.open_docs() end end, }), sources = cmp.config.sources({ { name = "nvim_lsp" }, { name = "path" }, { name = "buffer" }, }), formatting = { format = require("lspkind").cmp_format({ mode = "symbol_text", maxwidth = { -- prevent the popup from showing more than provided characters (e.g 50 will not show more than 50 characters) -- can also be a function to dynamically calculate max width such as -- menu = function() return math.floor(0.45 * vim.o.columns) end, menu = 50, -- leading text (labelDetails) abbr = 50, -- actual suggestion item }, }), }, }) end, } ]] --