diff options
Diffstat (limited to 'lua/blink/cmp/config/init.lua')
| -rw-r--r-- | lua/blink/cmp/config/init.lua | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/lua/blink/cmp/config/init.lua b/lua/blink/cmp/config/init.lua new file mode 100644 index 0000000..ac5678c --- /dev/null +++ b/lua/blink/cmp/config/init.lua @@ -0,0 +1,57 @@ +--- @class (exact) blink.cmp.ConfigStrict +--- @field enabled fun(): boolean +--- @field keymap blink.cmp.KeymapConfig +--- @field completion blink.cmp.CompletionConfig +--- @field fuzzy blink.cmp.FuzzyConfig +--- @field sources blink.cmp.SourceConfig +--- @field signature blink.cmp.SignatureConfig +--- @field snippets blink.cmp.SnippetsConfig +--- @field appearance blink.cmp.AppearanceConfig + +local validate = require('blink.cmp.config.utils').validate +--- @type blink.cmp.ConfigStrict +local config = { + enabled = function() return vim.bo.buftype ~= 'prompt' and vim.b.completion ~= false end, + keymap = require('blink.cmp.config.keymap').default, + completion = require('blink.cmp.config.completion').default, + fuzzy = require('blink.cmp.config.fuzzy').default, + sources = require('blink.cmp.config.sources').default, + signature = require('blink.cmp.config.signature').default, + snippets = require('blink.cmp.config.snippets').default, + appearance = require('blink.cmp.config.appearance').default, +} + +--- @type blink.cmp.ConfigStrict +--- @diagnostic disable-next-line: missing-fields +local M = {} + +--- @param cfg blink.cmp.ConfigStrict +function M.validate(cfg) + validate('config', { + enabled = { cfg.enabled, 'function' }, + keymap = { cfg.keymap, 'table' }, + completion = { cfg.completion, 'table' }, + fuzzy = { cfg.fuzzy, 'table' }, + sources = { cfg.sources, 'table' }, + signature = { cfg.signature, 'table' }, + snippets = { cfg.snippets, 'table' }, + appearance = { cfg.appearance, 'table' }, + }, cfg) + require('blink.cmp.config.keymap').validate(cfg.keymap) + require('blink.cmp.config.completion').validate(cfg.completion) + require('blink.cmp.config.fuzzy').validate(cfg.fuzzy) + require('blink.cmp.config.sources').validate(cfg.sources) + require('blink.cmp.config.signature').validate(cfg.signature) + require('blink.cmp.config.snippets').validate(cfg.snippets) + require('blink.cmp.config.appearance').validate(cfg.appearance) +end + +--- @param user_config blink.cmp.Config +function M.merge_with(user_config) + config = vim.tbl_deep_extend('force', config, user_config) + M.validate(config) +end + +return setmetatable(M, { + __index = function(_, k) return config[k] end, +}) |
