mirror of
https://github.com/LazyVim/LazyVim.git
synced 2025-06-21 08:35:53 +02:00
## Description blink.cmp integration for codeium and copilot, and correct menu drawing for codeium, copilot, and supermaven. I've simplified the blink.cmp config a bit for these extras (especially for copilot, which was extremely nested) by only including the blink.cmp spec if vim.g.ai_cmp is true. Multiple AI extras can now be enabled at the same time with blink.cmp. blink.cmp ghost text is now always enabled. Although some ai plugins always display virtual text, at worst it overlaps with blink's ghost text and is not noticable. Lastly, I can't test copilot because I don't have a subscription, nor do I want to sign up for one, but it should work just as well as the others. ## Screenshots With Codeium:  Multiple extras enabled at the same time:  ## Checklist - [X] I've read the [CONTRIBUTING](https://github.com/LazyVim/LazyVim/blob/main/CONTRIBUTING.md) guidelines. --------- Co-authored-by: Folke Lemaitre <folke.lemaitre@gmail.com>
160 lines
4.6 KiB
Lua
160 lines
4.6 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",
|
|
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",
|
|
},
|
|
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 = {
|
|
highlight = {
|
|
-- 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 = {
|
|
menu = {
|
|
draw = {
|
|
treesitter = true,
|
|
},
|
|
},
|
|
documentation = {
|
|
auto_show = true,
|
|
auto_show_delay_ms = 200,
|
|
},
|
|
ghost_text = {
|
|
enabled = vim.g.ai_cmp,
|
|
},
|
|
},
|
|
|
|
-- experimental auto-brackets support
|
|
accept = { auto_brackets = { enabled = true } },
|
|
|
|
-- experimental signature help support
|
|
-- trigger = { signature_help = { enabled = true } }
|
|
sources = {
|
|
-- adding any nvim-cmp sources here will enable them
|
|
-- with blink.compat
|
|
compat = {},
|
|
completion = {
|
|
-- remember to enable your providers here
|
|
enabled_providers = { "lsp", "path", "snippets", "buffer" },
|
|
},
|
|
},
|
|
|
|
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.completion.enabled_providers
|
|
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
|
|
|
|
-- 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
|
|
require("blink.cmp.types").CompletionItemKind[provider.kind] = provider.kind
|
|
---@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 = provider.kind or item.kind
|
|
end
|
|
return items
|
|
end
|
|
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
|
|
end,
|
|
},
|
|
|
|
-- lazydev
|
|
{
|
|
"saghen/blink.cmp",
|
|
opts = {
|
|
sources = {
|
|
completion = {
|
|
-- add lazydev to your completion providers
|
|
enabled_providers = { "lazydev" },
|
|
},
|
|
providers = {
|
|
lsp = {
|
|
-- dont show LuaLS require statements when lazydev has items
|
|
fallback_for = { "lazydev" },
|
|
},
|
|
lazydev = {
|
|
name = "LazyDev",
|
|
module = "lazydev.integrations.blink",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
-- catppuccin support
|
|
{
|
|
"catppuccin",
|
|
optional = true,
|
|
opts = {
|
|
integrations = { blink_cmp = true },
|
|
},
|
|
},
|
|
}
|