summaryrefslogtreecommitdiff
path: root/script/plugin.lua
diff options
context:
space:
mode:
Diffstat (limited to 'script/plugin.lua')
-rw-r--r--script/plugin.lua57
1 files changed, 57 insertions, 0 deletions
diff --git a/script/plugin.lua b/script/plugin.lua
index 7a661e0d..b297cd9b 100644
--- a/script/plugin.lua
+++ b/script/plugin.lua
@@ -7,6 +7,15 @@ local scope = require 'workspace.scope'
local ws = require 'workspace'
local fs = require 'bee.filesystem'
+---@class pluginInterfaces
+local pluginConfigs = {
+ -- create plugin for vm module
+ VM = {
+ OnCompileFunctionParam = function (next, func, source)
+ end
+ }
+}
+
---@class plugin
local m = {}
@@ -51,6 +60,15 @@ function m.dispatch(event, uri, ...)
return failed == 0, res1, res2
end
+function m.getVmPlugin(uri)
+ local scp = scope.getScope(uri)
+ local interfaces = scp:get('pluginInterfaces')
+ if not interfaces then
+ return
+ end
+ return interfaces.VM
+end
+
---@async
---@param scp scope
local function checkTrustLoad(scp)
@@ -78,6 +96,40 @@ local function checkTrustLoad(scp)
return true
end
+local function createMethodGroup(interfaces, key, methods)
+ local methodGroup = {}
+
+ for method in pairs(methods) do
+ local funcs = setmetatable({}, {
+ __call = function (t, next, ...)
+ if #t == 0 then
+ return next(...)
+ else
+ local result
+ for _, fn in ipairs(t) do
+ result = fn(next, ...)
+ end
+ return result
+ end
+ end
+ })
+ for _, interface in ipairs(interfaces) do
+ local func = interface[method]
+ if not func then
+ local namespace = interface[key]
+ if namespace then
+ func = namespace[method]
+ end
+ end
+ if func then
+ funcs[#funcs+1] = func
+ end
+ end
+ methodGroup[method] = funcs
+ end
+ return #methodGroup>0 and methodGroup or nil
+end
+
---@param uri uri
local function initPlugin(uri)
await.call(function () ---@async
@@ -148,6 +200,11 @@ local function initPlugin(uri)
end
interfaces[#interfaces+1] = interface
end
+
+ for key, config in pairs(pluginConfigs) do
+ interfaces[key] = createMethodGroup(interfaces, key, config)
+ end
+
ws.resetFiles(scp)
end)
end