mirror of
https://github.com/LazyVim/LazyVim.git
synced 2025-06-21 08:35:53 +02:00
## Description Replace use of icon for `Color` kind with block characters for `blink.cmp` autocomplete items to make swatches more usable. This also makes the `blink.cmp` built-in Tailwind integration better match `nvim-cmp`. **Note:** I didn't want to replace the default `LazyVim.config.icons.kinds.Color` in case it's used by other plugins (e.g. context), but didn't actually find any real uses, so perhaps that could be done instead? Figured best to leave those untouched as they can be more generically used as actual icons, and are not always guaranteed to have custom highlights applied. ## Related Issue(s) None. ## Screenshots ### Old  ### New  ## Checklist - [x] I've read the [CONTRIBUTING](https://github.com/LazyVim/LazyVim/blob/main/CONTRIBUTING.md) guidelines.
172 lines
4.9 KiB
Lua
172 lines
4.9 KiB
Lua
if lazyvim_docs then
|
|
-- set to `true` to follow the main branch
|
|
-- you need to have a working rust toolchain to build the plugin
|
|
-- in this case.
|
|
vim.g.lazyvim_blink_main = false
|
|
end
|
|
|
|
return {
|
|
{
|
|
"hrsh7th/nvim-cmp",
|
|
optional = true,
|
|
enabled = false,
|
|
},
|
|
{
|
|
"saghen/blink.cmp",
|
|
version = not vim.g.lazyvim_blink_main and "*",
|
|
build = vim.g.lazyvim_blink_main and "cargo build --release",
|
|
opts_extend = {
|
|
"sources.completion.enabled_providers",
|
|
"sources.compat",
|
|
"sources.default",
|
|
},
|
|
dependencies = {
|
|
"rafamadriz/friendly-snippets",
|
|
-- add blink.compat to dependencies
|
|
{
|
|
"saghen/blink.compat",
|
|
optional = true, -- make optional so it's only enabled if any extras need it
|
|
opts = {},
|
|
version = not vim.g.lazyvim_blink_main and "*",
|
|
},
|
|
},
|
|
event = "InsertEnter",
|
|
|
|
---@module 'blink.cmp'
|
|
---@type blink.cmp.Config
|
|
opts = {
|
|
appearance = {
|
|
-- sets the fallback highlight groups to nvim-cmp's highlight groups
|
|
-- useful for when your theme doesn't support blink.cmp
|
|
-- will be removed in a future release, assuming themes add support
|
|
use_nvim_cmp_as_default = false,
|
|
-- set to 'mono' for 'Nerd Font Mono' or 'normal' for 'Nerd Font'
|
|
-- adjusts spacing to ensure icons are aligned
|
|
nerd_font_variant = "mono",
|
|
},
|
|
completion = {
|
|
accept = {
|
|
-- experimental auto-brackets support
|
|
auto_brackets = {
|
|
enabled = true,
|
|
},
|
|
},
|
|
menu = {
|
|
draw = {
|
|
treesitter = true,
|
|
},
|
|
},
|
|
documentation = {
|
|
auto_show = true,
|
|
auto_show_delay_ms = 200,
|
|
},
|
|
ghost_text = {
|
|
enabled = vim.g.ai_cmp,
|
|
},
|
|
},
|
|
|
|
-- experimental signature help support
|
|
-- signature = { enabled = true },
|
|
|
|
sources = {
|
|
-- adding any nvim-cmp sources here will enable them
|
|
-- with blink.compat
|
|
compat = {},
|
|
default = { "lsp", "path", "snippets", "buffer" },
|
|
cmdline = {},
|
|
},
|
|
|
|
keymap = {
|
|
preset = "enter",
|
|
["<Tab>"] = {
|
|
LazyVim.cmp.map({ "snippet_forward", "ai_accept" }),
|
|
"fallback",
|
|
},
|
|
},
|
|
},
|
|
---@param opts blink.cmp.Config | { sources: { compat: string[] } }
|
|
config = function(_, opts)
|
|
-- setup compat sources
|
|
local enabled = opts.sources.default
|
|
for _, source in ipairs(opts.sources.compat or {}) do
|
|
opts.sources.providers[source] = vim.tbl_deep_extend(
|
|
"force",
|
|
{ name = source, module = "blink.compat.source" },
|
|
opts.sources.providers[source] or {}
|
|
)
|
|
if type(enabled) == "table" and not vim.tbl_contains(enabled, source) then
|
|
table.insert(enabled, source)
|
|
end
|
|
end
|
|
|
|
-- Unset custom prop to pass blink.cmp validation
|
|
opts.sources.compat = nil
|
|
|
|
-- check if we need to override symbol kinds
|
|
for _, provider in pairs(opts.sources.providers or {}) do
|
|
---@cast provider blink.cmp.SourceProviderConfig|{kind?:string}
|
|
if provider.kind then
|
|
local CompletionItemKind = require("blink.cmp.types").CompletionItemKind
|
|
local kind_idx = #CompletionItemKind + 1
|
|
|
|
CompletionItemKind[kind_idx] = provider.kind
|
|
CompletionItemKind[provider.kind] = kind_idx
|
|
|
|
---@type fun(ctx: blink.cmp.Context, items: blink.cmp.CompletionItem[]): blink.cmp.CompletionItem[]
|
|
local transform_items = provider.transform_items
|
|
---@param ctx blink.cmp.Context
|
|
---@param items blink.cmp.CompletionItem[]
|
|
provider.transform_items = function(ctx, items)
|
|
items = transform_items and transform_items(ctx, items) or items
|
|
for _, item in ipairs(items) do
|
|
item.kind = kind_idx or item.kind
|
|
end
|
|
return items
|
|
end
|
|
|
|
-- Unset custom prop to pass blink.cmp validation
|
|
provider.kind = nil
|
|
end
|
|
end
|
|
|
|
require("blink.cmp").setup(opts)
|
|
end,
|
|
},
|
|
|
|
-- add icons
|
|
{
|
|
"saghen/blink.cmp",
|
|
opts = function(_, opts)
|
|
opts.appearance = opts.appearance or {}
|
|
opts.appearance.kind_icons = LazyVim.config.icons.kinds
|
|
|
|
-- Use block instead of icon for color items to make swatches more usable
|
|
opts.appearance.kind_icons.Color = "██"
|
|
end,
|
|
},
|
|
|
|
-- lazydev
|
|
{
|
|
"saghen/blink.cmp",
|
|
opts = {
|
|
sources = {
|
|
-- add lazydev to your completion providers
|
|
default = { "lazydev" },
|
|
providers = {
|
|
lazydev = {
|
|
name = "LazyDev",
|
|
module = "lazydev.integrations.blink",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
-- catppuccin support
|
|
{
|
|
"catppuccin",
|
|
optional = true,
|
|
opts = {
|
|
integrations = { blink_cmp = true },
|
|
},
|
|
},
|
|
}
|