diff options
| author | delta <darkussdelta@gmail.com> | 2026-04-17 08:10:30 +0200 |
|---|---|---|
| committer | delta <darkussdelta@gmail.com> | 2026-04-17 08:10:30 +0200 |
| commit | a7c79cb5a04562be10347856642a80f0c4be89fc (patch) | |
| tree | 98fac95855d84f5037a1c6f44061cbe94b550600 /.config/nvim/lua/utils | |
| parent | 225eeafcea67d63a608f9c666faf2a2ef014be4a (diff) | |
Diffstat (limited to '.config/nvim/lua/utils')
| -rw-r--r-- | .config/nvim/lua/utils/delegate.lua | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/.config/nvim/lua/utils/delegate.lua b/.config/nvim/lua/utils/delegate.lua new file mode 100644 index 0000000..3ea6d75 --- /dev/null +++ b/.config/nvim/lua/utils/delegate.lua @@ -0,0 +1,22 @@ +local M = {} + +--- Capture `fn`'s upvalues and pass to `delegate` +---@param delegate fun(env: table<string, any>, _: ...): ... +---@param fn function +---@return fun(...): ... +function M.new(delegate, fn) + local upvalues = {} + for i = 1, debug.getinfo(fn, "u").nups do + local name, value = debug.getupvalue(fn, i) + upvalues[name] = value + end + return function(...) + return delegate(upvalues, ...) + end +end + +return setmetatable(M, { + __call = function(_, ...) + return M.new(...) + end, +}) |
