mirror of
https://github.com/NotAShelf/neovim-flake.git
synced 2025-01-09 04:39:47 +01:00
completion: migrate to shared cmp source options
This commit is contained in:
parent
e6d0dde3a0
commit
39ed7ccc1a
8 changed files with 75 additions and 67 deletions
|
@ -58,8 +58,8 @@ in {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
autocomplete.nvim-cmp = {
|
autocomplete = {
|
||||||
sources = {copilot = "[Copilot]";};
|
nvim-cmp.sources = {copilot = "[Copilot]";};
|
||||||
sourcePlugins = ["copilot-cmp"];
|
sourcePlugins = ["copilot-cmp"];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
borders = config.vim.ui.borders.plugins.nvim-cmp;
|
borders = config.vim.ui.borders.plugins.nvim-cmp;
|
||||||
|
|
||||||
cfg = config.vim.autocomplete.nvim-cmp;
|
cfg = config.vim.autocomplete.nvim-cmp;
|
||||||
|
autocompleteCfg = config.vim.autocomplete;
|
||||||
luasnipEnable = config.vim.snippets.luasnip.enable;
|
luasnipEnable = config.vim.snippets.luasnip.enable;
|
||||||
getPluginName = plugin:
|
getPluginName = plugin:
|
||||||
if typeOf plugin == "string"
|
if typeOf plugin == "string"
|
||||||
|
@ -23,8 +24,6 @@
|
||||||
in {
|
in {
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
vim = {
|
vim = {
|
||||||
autocomplete.enableSharedCmpSources = true;
|
|
||||||
|
|
||||||
lazy.plugins = {
|
lazy.plugins = {
|
||||||
nvim-cmp = {
|
nvim-cmp = {
|
||||||
package = "nvim-cmp";
|
package = "nvim-cmp";
|
||||||
|
@ -50,74 +49,77 @@ in {
|
||||||
${optionalString config.vim.lazy.enable
|
${optionalString config.vim.lazy.enable
|
||||||
(concatStringsSep "\n" (map
|
(concatStringsSep "\n" (map
|
||||||
(package: "require('lz.n').trigger_load(${toLuaObject (getPluginName package)})")
|
(package: "require('lz.n').trigger_load(${toLuaObject (getPluginName package)})")
|
||||||
cfg.sourcePlugins))}
|
autocompleteCfg.sourcePlugins))}
|
||||||
'';
|
'';
|
||||||
|
|
||||||
event = ["InsertEnter" "CmdlineEnter"];
|
event = ["InsertEnter" "CmdlineEnter"];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
autocomplete.nvim-cmp = {
|
autocomplete = {
|
||||||
sources = {
|
enableSharedCmpSources = true;
|
||||||
nvim-cmp = null;
|
|
||||||
buffer = "[Buffer]";
|
|
||||||
path = "[Path]";
|
|
||||||
};
|
|
||||||
|
|
||||||
sourcePlugins = ["cmp-buffer" "cmp-path"];
|
sourcePlugins = ["cmp-buffer" "cmp-path"];
|
||||||
|
|
||||||
setupOpts = {
|
nvim-cmp = {
|
||||||
sources = map (s: {name = s;}) (attrNames cfg.sources);
|
sources = {
|
||||||
|
nvim-cmp = null;
|
||||||
window = mkIf borders.enable {
|
buffer = "[Buffer]";
|
||||||
completion.border = borders.style;
|
path = "[Path]";
|
||||||
documentation.border = borders.style;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
formatting.format = cfg.format;
|
setupOpts = {
|
||||||
|
sources = map (s: {name = s;}) (attrNames cfg.sources);
|
||||||
|
|
||||||
# `cmp` and `luasnip` are defined above, in the `nvim-cmp` section
|
window = mkIf borders.enable {
|
||||||
mapping = {
|
completion.border = borders.style;
|
||||||
${mappings.complete} = mkLuaInline "cmp.mapping.complete()";
|
documentation.border = borders.style;
|
||||||
${mappings.close} = mkLuaInline "cmp.mapping.abort()";
|
};
|
||||||
${mappings.scrollDocsUp} = mkLuaInline "cmp.mapping.scroll_docs(-4)";
|
|
||||||
${mappings.scrollDocsDown} = mkLuaInline "cmp.mapping.scroll_docs(4)";
|
|
||||||
${mappings.confirm} = mkLuaInline "cmp.mapping.confirm({ select = true })";
|
|
||||||
|
|
||||||
${mappings.next} = mkLuaInline ''
|
formatting.format = cfg.format;
|
||||||
cmp.mapping(function(fallback)
|
|
||||||
local has_words_before = function()
|
|
||||||
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
|
|
||||||
return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil
|
|
||||||
end
|
|
||||||
|
|
||||||
if cmp.visible() then
|
# `cmp` and `luasnip` are defined above, in the `nvim-cmp` section
|
||||||
cmp.select_next_item()
|
mapping = {
|
||||||
${optionalString luasnipEnable ''
|
${mappings.complete} = mkLuaInline "cmp.mapping.complete()";
|
||||||
elseif luasnip.locally_jumpable(1) then
|
${mappings.close} = mkLuaInline "cmp.mapping.abort()";
|
||||||
luasnip.jump(1)
|
${mappings.scrollDocsUp} = mkLuaInline "cmp.mapping.scroll_docs(-4)";
|
||||||
''}
|
${mappings.scrollDocsDown} = mkLuaInline "cmp.mapping.scroll_docs(4)";
|
||||||
elseif has_words_before() then
|
${mappings.confirm} = mkLuaInline "cmp.mapping.confirm({ select = true })";
|
||||||
cmp.complete()
|
|
||||||
else
|
|
||||||
fallback()
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
'';
|
|
||||||
|
|
||||||
${mappings.previous} = mkLuaInline ''
|
${mappings.next} = mkLuaInline ''
|
||||||
cmp.mapping(function(fallback)
|
cmp.mapping(function(fallback)
|
||||||
if cmp.visible() then
|
local has_words_before = function()
|
||||||
cmp.select_prev_item()
|
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
|
||||||
${optionalString luasnipEnable ''
|
return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil
|
||||||
elseif luasnip.locally_jumpable(-1) then
|
end
|
||||||
luasnip.jump(-1)
|
|
||||||
''}
|
if cmp.visible() then
|
||||||
else
|
cmp.select_next_item()
|
||||||
fallback()
|
${optionalString luasnipEnable ''
|
||||||
end
|
elseif luasnip.locally_jumpable(1) then
|
||||||
end)
|
luasnip.jump(1)
|
||||||
'';
|
''}
|
||||||
|
elseif has_words_before() then
|
||||||
|
cmp.complete()
|
||||||
|
else
|
||||||
|
fallback()
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
'';
|
||||||
|
|
||||||
|
${mappings.previous} = mkLuaInline ''
|
||||||
|
cmp.mapping(function(fallback)
|
||||||
|
if cmp.visible() then
|
||||||
|
cmp.select_prev_item()
|
||||||
|
${optionalString luasnipEnable ''
|
||||||
|
elseif luasnip.locally_jumpable(-1) then
|
||||||
|
luasnip.jump(-1)
|
||||||
|
''}
|
||||||
|
else
|
||||||
|
fallback()
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
'';
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -6,7 +6,7 @@ in {
|
||||||
options.vim.autocomplete = {
|
options.vim.autocomplete = {
|
||||||
enableSharedCmpSources = mkEnableOption "cmp sources shared by nvim-cmp and blink.cmp";
|
enableSharedCmpSources = mkEnableOption "cmp sources shared by nvim-cmp and blink.cmp";
|
||||||
|
|
||||||
cmpSourcePlugins = mkOption {
|
sourcePlugins = mkOption {
|
||||||
type = listOf pluginType;
|
type = listOf pluginType;
|
||||||
default = [];
|
default = [];
|
||||||
description = "List of cmp source plugins.";
|
description = "List of cmp source plugins.";
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
|
|
||||||
cfg = config.vim.lsp;
|
cfg = config.vim.lsp;
|
||||||
usingNvimCmp = config.vim.autocomplete.nvim-cmp.enable;
|
usingNvimCmp = config.vim.autocomplete.nvim-cmp.enable;
|
||||||
|
usingBlinkCmp = config.vim.autocomplete.blink-cmp.enable;
|
||||||
self = import ./module.nix {inherit config lib pkgs;};
|
self = import ./module.nix {inherit config lib pkgs;};
|
||||||
|
|
||||||
mappingDefinitions = self.options.vim.lsp.mappings;
|
mappingDefinitions = self.options.vim.lsp.mappings;
|
||||||
|
@ -22,8 +23,8 @@
|
||||||
in {
|
in {
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
vim = {
|
vim = {
|
||||||
autocomplete.nvim-cmp = {
|
autocomplete = mkIf usingNvimCmp {
|
||||||
sources = {nvim_lsp = "[LSP]";};
|
nvim-cmp.sources = {nvim_lsp = "[LSP]";};
|
||||||
sourcePlugins = ["cmp-nvim-lsp"];
|
sourcePlugins = ["cmp-nvim-lsp"];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -170,6 +171,10 @@ in {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
''}
|
''}
|
||||||
|
|
||||||
|
${optionalString usingBlinkCmp ''
|
||||||
|
-- TODO
|
||||||
|
''}
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -8,11 +8,12 @@
|
||||||
inherit (lib.nvim.lua) toLuaObject;
|
inherit (lib.nvim.lua) toLuaObject;
|
||||||
|
|
||||||
cfg = config.vim.lsp.lspkind;
|
cfg = config.vim.lsp.lspkind;
|
||||||
|
inherit (config.vim) autocomplete;
|
||||||
in {
|
in {
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
assertions = [
|
assertions = [
|
||||||
{
|
{
|
||||||
assertion = config.vim.autocomplete.nvim-cmp.enable;
|
assertion = autocomplete.nvim-cmp.enable || autocomplete.blink-cmp.enable;
|
||||||
message = ''
|
message = ''
|
||||||
While lspkind supports Neovim's native lsp upstream, using that over
|
While lspkind supports Neovim's native lsp upstream, using that over
|
||||||
nvim-cmp isn't recommended, nor supported by nvf.
|
nvim-cmp isn't recommended, nor supported by nvf.
|
||||||
|
|
|
@ -48,7 +48,7 @@ in {
|
||||||
# If using nvim-cmp, otherwise set to false
|
# If using nvim-cmp, otherwise set to false
|
||||||
type = bool;
|
type = bool;
|
||||||
description = "If using nvim-cmp, otherwise set to false";
|
description = "If using nvim-cmp, otherwise set to false";
|
||||||
default = config.vim.autocomplete.nvim-cmp.enable;
|
default = config.vim.autocomplete.enableSharedCmpSources;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -17,8 +17,8 @@ in {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
startPlugins = cfg.providers;
|
startPlugins = cfg.providers;
|
||||||
autocomplete.nvim-cmp = {
|
autocomplete = {
|
||||||
sources = {luasnip = "[LuaSnip]";};
|
nvim-cmp.sources = {luasnip = "[LuaSnip]";};
|
||||||
sourcePlugins = ["cmp-luasnip"];
|
sourcePlugins = ["cmp-luasnip"];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -20,8 +20,8 @@ in {
|
||||||
vim = {
|
vim = {
|
||||||
startPlugins = ["nvim-treesitter"];
|
startPlugins = ["nvim-treesitter"];
|
||||||
|
|
||||||
autocomplete.nvim-cmp = {
|
autocomplete = {
|
||||||
sources = {treesitter = "[Treesitter]";};
|
nvim-cmp.sources = {treesitter = "[Treesitter]";};
|
||||||
sourcePlugins = ["cmp-treesitter"];
|
sourcePlugins = ["cmp-treesitter"];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue