aboutsummaryrefslogtreecommitdiffstats
path: root/lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua')
-rw-r--r--lua/nvim-lsp-installer/core/functional.lua25
1 files changed, 25 insertions, 0 deletions
diff --git a/lua/nvim-lsp-installer/core/functional.lua b/lua/nvim-lsp-installer/core/functional.lua
index 244c3d96..8b549fb6 100644
--- a/lua/nvim-lsp-installer/core/functional.lua
+++ b/lua/nvim-lsp-installer/core/functional.lua
@@ -172,4 +172,29 @@ function functional.partial(fn, ...)
end
end
+function functional.compose(...)
+ local functions = functional.table_pack(...)
+ assert(functions.n > 0, "compose requires at least one function")
+ return function(...)
+ local result = functional.table_pack(...)
+ for i = functions.n, 1, -1 do
+ result = functional.table_pack(functions[i](unpack(result, 1, result.n)))
+ end
+ return unpack(result, 1, result.n)
+ end
+end
+
+---@generic T
+---@param filter_fn fun(item: T): boolean
+---@return fun(list: T[]): T[]
+function functional.filter(filter_fn)
+ return functional.partial(vim.tbl_filter, filter_fn)
+end
+
+function functional.each(fn, list)
+ for k, v in pairs(list) do
+ fn(v, k)
+ end
+end
+
return functional