Support Vim script plugins

This commit is contained in:
hrsh7th
2021-09-13 23:57:34 +09:00
parent 65b759cdab
commit 6173796b2b
4 changed files with 129 additions and 7 deletions

52
lua/cmp/vim_source.lua Normal file
View File

@@ -0,0 +1,52 @@
local misc = require('cmp.utils.misc')
local vim_source = {}
---@param id number
---@param args any[]
vim_source.on_callback = function(id, args)
return vim_source.to_callback.callbacks[id](unpack(args))
end
---@param callback function
---@return number
vim_source.to_callback = setmetatable({
callbacks = {}
}, {
__call = function(self, callback)
local id = misc.id('cmp.vim_source.to_callback')
self.callbacks[id] = function(...)
callback(...)
self.callbacks[id] = nil
end
return id
end
})
---Convert to serializable args.
---@param args any[]
vim_source.to_args = function(args)
for i, arg in ipairs(args) do
if type(arg) == 'function' then
args[i] = vim_source.to_callback(arg)
end
end
return args
end
---@param id number
---@param methods string[]
vim_source.new = function (id, methods)
local self = setmetatable({}, { __index = vim_source })
for _, method in ipairs(methods) do
self[method] = (function(m)
return function(_, ...)
return vim.fn['cmp#_method'](id, m, vim_source.to_args({ ... }))
end
end)(method)
end
return self
end
return vim_source