summaryrefslogtreecommitdiff
path: root/lua/blink/cmp/config/init.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua/blink/cmp/config/init.lua')
-rw-r--r--lua/blink/cmp/config/init.lua57
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,
+})