From fbc72a0c2fe16a93b18ce8facdc9b66e7183f75d Mon Sep 17 00:00:00 2001 From: William Boman Date: Sat, 10 Dec 2022 19:55:41 +0100 Subject: feat(functional): add some more functions (#755) --- lua/mason-core/functional/table.lua | 43 +++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) (limited to 'lua/mason-core/functional/table.lua') 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 @@ -64,4 +75,36 @@ _.invert = fun.curryN(function(tbl) return result end, 1) +---@generic K, V +---@param transforms table +---@param tbl table +---@return table +_.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 _ -- cgit v1.2.3-70-g09d2