mirror of
https://github.com/LazyVim/LazyVim.git
synced 2025-06-21 08:35:53 +02:00
## Description I've upstreamed the block char vs. icon replacement for Tailwind colors so we shouldn't need this here anymore. I've replaced it by extending the default blink icons instead, just in case they introduce an icon which isn't yet covered by Lazy's, it would still show up (unlikely, but better, no?). ## Related Issue(s) none ## Screenshots none ## Checklist - [x] I've read the [CONTRIBUTING](https://github.com/LazyVim/LazyVim/blob/main/CONTRIBUTING.md) guidelines.
190 lines
5.5 KiB
Lua
190 lines
5.5 KiB
Lua
---@diagnostic disable: missing-fields
|
|
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 = {
|
|
snippets = {
|
|
expand = function(snippet, _)
|
|
return LazyVim.cmp.expand(snippet)
|
|
end,
|
|
},
|
|
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 = { "lsp" },
|
|
},
|
|
},
|
|
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",
|
|
["<C-y>"] = { "select_and_accept" },
|
|
},
|
|
},
|
|
---@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
|
|
|
|
-- add ai_accept to <Tab> key
|
|
if not opts.keymap["<Tab>"] then
|
|
if opts.keymap.preset == "super-tab" then -- super-tab
|
|
opts.keymap["<Tab>"] = {
|
|
require("blink.cmp.keymap.presets")["super-tab"]["<Tab>"][1],
|
|
LazyVim.cmp.map({ "snippet_forward", "ai_accept" }),
|
|
"fallback",
|
|
}
|
|
else -- other presets
|
|
opts.keymap["<Tab>"] = {
|
|
LazyVim.cmp.map({ "snippet_forward", "ai_accept" }),
|
|
"fallback",
|
|
}
|
|
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
|
|
---@diagnostic disable-next-line: no-unknown
|
|
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 = vim.tbl_extend("force", opts.appearance.kind_icons or {}, LazyVim.config.icons.kinds)
|
|
end,
|
|
},
|
|
|
|
-- lazydev
|
|
{
|
|
"saghen/blink.cmp",
|
|
opts = {
|
|
sources = {
|
|
-- add lazydev to your completion providers
|
|
default = { "lazydev" },
|
|
providers = {
|
|
lazydev = {
|
|
name = "LazyDev",
|
|
module = "lazydev.integrations.blink",
|
|
score_offset = 100, -- show at a higher priority than lsp
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
-- catppuccin support
|
|
{
|
|
"catppuccin",
|
|
optional = true,
|
|
opts = {
|
|
integrations = { blink_cmp = true },
|
|
},
|
|
},
|
|
}
|