diff options
Diffstat (limited to 'lua')
| -rw-r--r-- | lua/mason-core/fs.lua | 2 | ||||
| -rw-r--r-- | lua/mason-core/functional/function.lua | 25 | ||||
| -rw-r--r-- | lua/mason-core/functional/init.lua | 9 | ||||
| -rw-r--r-- | lua/mason-core/functional/list.lua | 24 | ||||
| -rw-r--r-- | lua/mason-core/functional/relation.lua | 21 | ||||
| -rw-r--r-- | lua/mason-core/functional/table.lua | 6 |
6 files changed, 87 insertions, 0 deletions
diff --git a/lua/mason-core/fs.lua b/lua/mason-core/fs.lua index 98d04a99..1621d06c 100644 --- a/lua/mason-core/fs.lua +++ b/lua/mason-core/fs.lua @@ -139,6 +139,8 @@ local function make_module(uv) return all_entries end + ---@param path string + ---@param new_path string function M.symlink(path, new_path) log.trace("fs: symlink", path, new_path) uv.fs_symlink(path, new_path) 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> |
