From 2953751d1beda5eeec54fd7bb743614c56febc18 Mon Sep 17 00:00:00 2001 From: William Boman Date: Mon, 2 Jan 2023 06:47:41 +0100 Subject: feat(functional): add split_every and default_to (#835) --- lua/mason-core/functional/init.lua | 2 ++ lua/mason-core/functional/list.lua | 15 +++++++++++++++ lua/mason-core/functional/logic.lua | 12 ++++++++++++ 3 files changed, 29 insertions(+) (limited to 'lua/mason-core/functional') diff --git a/lua/mason-core/functional/init.lua b/lua/mason-core/functional/init.lua index 153c40aa..9b52047c 100644 --- a/lua/mason-core/functional/init.lua +++ b/lua/mason-core/functional/init.lua @@ -62,6 +62,7 @@ _.take = list.take _.drop = list.drop _.drop_last = list.drop_last _.reduce = list.reduce +_.split_every = list.split_every ---@module "mason-core.functional.relation" local relation = lazy_require "mason-core.functional.relation" @@ -80,6 +81,7 @@ _.if_else = logic.if_else _.is_not = logic.is_not _.complement = logic.complement _.cond = logic.cond +_.default_to = logic.default_to ---@module "mason-core.functional.number" local number = lazy_require "mason-core.functional.number" diff --git a/lua/mason-core/functional/list.lua b/lua/mason-core/functional/list.lua index 8c216c4d..275bc61a 100644 --- a/lua/mason-core/functional/list.lua +++ b/lua/mason-core/functional/list.lua @@ -269,4 +269,19 @@ _.reduce = fun.curryN(function(fn, acc, list) return acc end, 3) +---@generic T +---@param n integer +---@param list T[] +---@return T[][] +_.split_every = fun.curryN(function(n, list) + assert(n > 0, "n needs to be greater than 0.") + local res = {} + local idx = 1 + while idx <= #list do + table.insert(res, { unpack(list, idx, idx + n - 1) }) + idx = idx + n + end + return res +end, 2) + return _ diff --git a/lua/mason-core/functional/logic.lua b/lua/mason-core/functional/logic.lua index 125a94ee..79e02361 100644 --- a/lua/mason-core/functional/logic.lua +++ b/lua/mason-core/functional/logic.lua @@ -69,4 +69,16 @@ _.cond = fun.curryN(function(predicate_transformer_pairs, value) end end, 2) +---@generic T +---@param default_val T +---@param val T? +---@return T +_.default_to = fun.curryN(function(default_val, val) + if val ~= nil then + return val + else + return default_val + end +end, 2) + return _ -- cgit v1.2.3-70-g09d2