aboutsummaryrefslogtreecommitdiffstats
path: root/lua/mason-core/functional/table.lua
diff options
context:
space:
mode:
authorWilliam Boman <william@redwill.se>2022-12-10 19:55:41 +0100
committerGitHub <noreply@github.com>2022-12-10 18:55:41 +0000
commitfbc72a0c2fe16a93b18ce8facdc9b66e7183f75d (patch)
treebe37b4bd7b0320dbfa3e08dae8c90540c0eaa335 /lua/mason-core/functional/table.lua
parentchore: update generated code (#754) (diff)
downloadmason-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.lua43
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 _