diff options
| author | William Boman <william@redwill.se> | 2022-12-10 19:55:41 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-12-10 18:55:41 +0000 |
| commit | fbc72a0c2fe16a93b18ce8facdc9b66e7183f75d (patch) | |
| tree | be37b4bd7b0320dbfa3e08dae8c90540c0eaa335 /lua/mason-core/functional/table.lua | |
| parent | chore: update generated code (#754) (diff) | |
| download | mason-fbc72a0c2fe16a93b18ce8facdc9b66e7183f75d.tar mason-fbc72a0c2fe16a93b18ce8facdc9b66e7183f75d.tar.gz mason-fbc72a0c2fe16a93b18ce8facdc9b66e7183f75d.tar.bz2 mason-fbc72a0c2fe16a93b18ce8facdc9b66e7183f75d.tar.lz mason-fbc72a0c2fe16a93b18ce8facdc9b66e7183f75d.tar.xz mason-fbc72a0c2fe16a93b18ce8facdc9b66e7183f75d.tar.zst mason-fbc72a0c2fe16a93b18ce8facdc9b66e7183f75d.zip | |
feat(functional): add some more functions (#755)
Diffstat (limited to 'lua/mason-core/functional/table.lua')
| -rw-r--r-- | lua/mason-core/functional/table.lua | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/lua/mason-core/functional/table.lua b/lua/mason-core/functional/table.lua index eb673d64..276a3180 100644 --- a/lua/mason-core/functional/table.lua +++ b/lua/mason-core/functional/table.lua @@ -2,6 +2,17 @@ local fun = require "mason-core.functional.function" local _ = {} +---@generic T : table +---@param tbl T +---@return T +local function shallow_clone(tbl) + local res = {} + for k, v in pairs(tbl) do + res[k] = v + end + return res +end + ---@generic T, U ---@param index T ---@param tbl table<T, U> @@ -64,4 +75,36 @@ _.invert = fun.curryN(function(tbl) return result end, 1) +---@generic K, V +---@param transforms table<K, fun (value: V): V> +---@param tbl table<K, V> +---@return table<K, V> +_.evolve = fun.curryN(function(transforms, tbl) + local result = shallow_clone(tbl) + for key, value in pairs(tbl) do + if transforms[key] then + result[key] = transforms[key](value) + end + end + return result +end, 2) + +---@generic T : table +---@param left T +---@param right T +---@return T +_.merge_left = fun.curryN(function(left, right) + return vim.tbl_extend("force", right, left) +end, 2) + +---@generic T : table +---@param key any +---@param tbl T +---@return T +_.dissoc = fun.curryN(function(key, tbl) + local res = shallow_clone(tbl) + res[key] = nil + return res +end, 2) + return _ |
