diff options
Diffstat (limited to 'lua/lvim/utils.lua')
-rw-r--r-- | lua/lvim/utils.lua | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/lua/lvim/utils.lua b/lua/lvim/utils.lua index 5e49906a..63831fe5 100644 --- a/lua/lvim/utils.lua +++ b/lua/lvim/utils.lua @@ -129,4 +129,59 @@ function M.fs_copy(source, destination) end end +-- code from <https://github.com/tjdevries/lazy-require.nvim/blob/bb626818ebc175b8c595846925fd96902b1ce02b/lua/lazy-require.lua#L25> +function M.require_on_index(require_path) + return setmetatable({}, { + __index = function(_, key) + return require(require_path)[key] + end, + + __newindex = function(_, key, value) + require(require_path)[key] = value + end, + }) +end + +-- code from <https://github.com/tjdevries/lazy-require.nvim/blob/bb626818ebc175b8c595846925fd96902b1ce02b/lua/lazy-require.lua#L25> +function M.require_on_exported_call(require_path) + return setmetatable({}, { + __index = function(_, k) + return function(...) + return require(require_path)[k](...) + end + end, + }) +end + +function M.lazy_set(require_path, fn_name) + local function poputale_table(table) + setmetatable(table, {}) + local source = require(require_path)[fn_name]() + for k, v in pairs(source) do + table[k] = v + end + end + return setmetatable({}, { + __index = function(me, index) + poputale_table(me) + return me[index] + end, + + __newindex = function(me, key, value) + poputale_table(me) + me[key] = value + end, + + __pairs = function(me) + poputale_table(me) + return pairs(me) + end, + + __ipairs = function(me) + poputale_table(me) + return pairs(me) + end, + }) +end + return M |