aboutsummaryrefslogtreecommitdiffstats
path: root/lua/mason-core/functional
diff options
context:
space:
mode:
authorWilliam Boman <william@redwill.se>2022-12-08 02:00:29 +0100
committerGitHub <noreply@github.com>2022-12-08 01:00:29 +0000
commit6c7feb87923db7f2cc15470d516d6e882d6bba72 (patch)
tree3d737f26fe01f6d911eaffa0022840042b4301ba /lua/mason-core/functional
parentfeat(registry): add neocmakelsp (#739) (diff)
downloadmason-6c7feb87923db7f2cc15470d516d6e882d6bba72.tar
mason-6c7feb87923db7f2cc15470d516d6e882d6bba72.tar.gz
mason-6c7feb87923db7f2cc15470d516d6e882d6bba72.tar.bz2
mason-6c7feb87923db7f2cc15470d516d6e882d6bba72.tar.lz
mason-6c7feb87923db7f2cc15470d516d6e882d6bba72.tar.xz
mason-6c7feb87923db7f2cc15470d516d6e882d6bba72.tar.zst
mason-6c7feb87923db7f2cc15470d516d6e882d6bba72.zip
feat(functional): add more functions (#741)
Diffstat (limited to 'lua/mason-core/functional')
-rw-r--r--lua/mason-core/functional/function.lua25
-rw-r--r--lua/mason-core/functional/init.lua9
-rw-r--r--lua/mason-core/functional/list.lua24
-rw-r--r--lua/mason-core/functional/relation.lua21
-rw-r--r--lua/mason-core/functional/table.lua6
5 files changed, 85 insertions, 0 deletions
diff --git a/lua/mason-core/functional/function.lua b/lua/mason-core/functional/function.lua
index f1475229..6f1806db 100644
--- a/lua/mason-core/functional/function.lua
+++ b/lua/mason-core/functional/function.lua
@@ -94,4 +94,29 @@ _.tap = _.curryN(function(fn, value)
return value
end, 2)
+---@generic T, U
+---@param value T
+---@param fn fun(value: T): U
+---@return U
+_.apply_to = _.curryN(function(value, fn)
+ return fn(value)
+end, 2)
+
+---@generic T, R, V
+---@param fn fun (args...: V[]): R
+---@param args V[]
+---@return R
+_.apply = _.curryN(function(fn, args)
+ return fn(args)
+end, 2)
+
+---@generic T, V
+---@param fn fun(...): T
+---@param fns (fun(value: V))[]
+---@param val V
+---@return T
+_.converge = _.curryN(function(fn, fns, val)
+ return fn(unpack(vim.tbl_map(_.apply_to(val), fns)))
+end, 3)
+
return _
diff --git a/lua/mason-core/functional/init.lua b/lua/mason-core/functional/init.lua
index 04ef1534..f03eb3d5 100644
--- a/lua/mason-core/functional/init.lua
+++ b/lua/mason-core/functional/init.lua
@@ -28,6 +28,9 @@ _.F = fun.F
_.memoize = fun.memoize
_.lazy = fun.lazy
_.tap = fun.tap
+_.apply_to = fun.apply_to
+_.apply = fun.apply
+_.converge = fun.converge
---@module "mason-core.functional.list"
local list = lazy_require "mason-core.functional.list"
@@ -53,12 +56,17 @@ _.sort_by = list.sort_by
_.uniq_by = list.uniq_by
_.join = list.join
_.partition = list.partition
+_.take = list.take
+_.drop = list.drop
---@module "mason-core.functional.relation"
local relation = lazy_require "mason-core.functional.relation"
_.equals = relation.equals
_.prop_eq = relation.prop_eq
_.prop_satisfies = relation.prop_satisfies
+_.path_satisfies = relation.path_satisfies
+_.min = relation.min
+_.add = relation.add
---@module "mason-core.functional.logic"
local logic = lazy_require "mason-core.functional.logic"
@@ -93,6 +101,7 @@ _.starts_with = string.starts_with
---@module "mason-core.functional.table"
local tbl = lazy_require "mason-core.functional.table"
_.prop = tbl.prop
+_.path = tbl.path
_.pick = tbl.pick
_.keys = tbl.keys
_.size = tbl.size
diff --git a/lua/mason-core/functional/list.lua b/lua/mason-core/functional/list.lua
index 2a5378fe..b40e0046 100644
--- a/lua/mason-core/functional/list.lua
+++ b/lua/mason-core/functional/list.lua
@@ -208,4 +208,28 @@ _.partition = fun.curryN(function(predicate, list)
return partitions
end, 2)
+---@generic T
+---@param n integer
+---@param list T[]
+---@return T[]
+_.take = fun.curryN(function(n, list)
+ local result = {}
+ for i = 1, math.min(n, #list) do
+ result[#result + 1] = list[i]
+ end
+ return result
+end, 2)
+
+---@generic T
+---@param n integer
+---@param list T[]
+---@return T[]
+_.drop = fun.curryN(function(n, list)
+ local result = {}
+ for i = n + 1, #list do
+ result[#result + 1] = list[i]
+ end
+ return result
+end, 2)
+
return _
diff --git a/lua/mason-core/functional/relation.lua b/lua/mason-core/functional/relation.lua
index 94913a13..b6ba92b7 100644
--- a/lua/mason-core/functional/relation.lua
+++ b/lua/mason-core/functional/relation.lua
@@ -14,4 +14,25 @@ _.prop_satisfies = fun.curryN(function(predicate, property, tbl)
return predicate(tbl[property])
end, 3)
+---@param predicate fun(value: any): boolean
+---@param path any[]
+---@param tbl table
+_.path_satisfies = fun.curryN(function(predicate, path, tbl)
+ return predicate(vim.tbl_get(tbl, unpack(path)))
+end, 3)
+
+---@param a number
+---@param b number
+---@return number
+_.min = fun.curryN(function(a, b)
+ return b - a
+end, 2)
+
+---@param a number
+---@param b number
+---@return number
+_.add = fun.curryN(function(a, b)
+ return b + a
+end, 2)
+
return _
diff --git a/lua/mason-core/functional/table.lua b/lua/mason-core/functional/table.lua
index e96b0157..eb673d64 100644
--- a/lua/mason-core/functional/table.lua
+++ b/lua/mason-core/functional/table.lua
@@ -10,6 +10,12 @@ _.prop = fun.curryN(function(index, tbl)
return tbl[index]
end, 2)
+---@param path any[]
+---@param tbl table
+_.path = fun.curryN(function(path, tbl)
+ return vim.tbl_get(tbl, unpack(path))
+end, 2)
+
---@generic T, U
---@param keys T[]
---@param tbl table<T, U>