aboutsummaryrefslogtreecommitdiffstats
path: root/lua
diff options
context:
space:
mode:
authorWilliam Boman <william@redwill.se>2022-12-20 08:42:58 +0100
committerGitHub <noreply@github.com>2022-12-20 07:42:58 +0000
commit25313762aac8fc313b769f20298bd4e6473cc6dd (patch)
treee46fee667753f4fd7d16b2eac085348d3ecf821f /lua
parentfeat: add expr module (#775) (diff)
downloadmason-25313762aac8fc313b769f20298bd4e6473cc6dd.tar
mason-25313762aac8fc313b769f20298bd4e6473cc6dd.tar.gz
mason-25313762aac8fc313b769f20298bd4e6473cc6dd.tar.bz2
mason-25313762aac8fc313b769f20298bd4e6473cc6dd.tar.lz
mason-25313762aac8fc313b769f20298bd4e6473cc6dd.tar.xz
mason-25313762aac8fc313b769f20298bd4e6473cc6dd.tar.zst
mason-25313762aac8fc313b769f20298bd4e6473cc6dd.zip
feat(functional): add trim_start and assoc (#779)
Diffstat (limited to 'lua')
-rw-r--r--lua/mason-core/functional/init.lua2
-rw-r--r--lua/mason-core/functional/relation.lua4
-rw-r--r--lua/mason-core/functional/string.lua11
-rw-r--r--lua/mason-core/functional/table.lua23
4 files changed, 34 insertions, 6 deletions
diff --git a/lua/mason-core/functional/init.lua b/lua/mason-core/functional/init.lua
index ee185e8b..837f9558 100644
--- a/lua/mason-core/functional/init.lua
+++ b/lua/mason-core/functional/init.lua
@@ -99,6 +99,7 @@ _.format = string.format
_.split = string.split
_.gsub = string.gsub
_.trim = string.trim
+_.trim_start = string.trim_start
_.dedent = string.dedent
_.starts_with = string.starts_with
_.to_upper = string.to_upper
@@ -117,6 +118,7 @@ _.invert = tbl.invert
_.evolve = tbl.evolve
_.merge_left = tbl.merge_left
_.dissoc = tbl.dissoc
+_.assoc = tbl.assoc
---@module "mason-core.functional.type"
local typ = lazy_require "mason-core.functional.type"
diff --git a/lua/mason-core/functional/relation.lua b/lua/mason-core/functional/relation.lua
index b6ba92b7..1561b030 100644
--- a/lua/mason-core/functional/relation.lua
+++ b/lua/mason-core/functional/relation.lua
@@ -18,7 +18,9 @@ end, 3)
---@param path any[]
---@param tbl table
_.path_satisfies = fun.curryN(function(predicate, path, tbl)
- return predicate(vim.tbl_get(tbl, unpack(path)))
+ -- see https://github.com/neovim/neovim/pull/21426
+ local value = vim.tbl_get(tbl, unpack(path))
+ return predicate(value)
end, 3)
---@param a number
diff --git a/lua/mason-core/functional/string.lua b/lua/mason-core/functional/string.lua
index 8c66dbc0..2d53a5b6 100644
--- a/lua/mason-core/functional/string.lua
+++ b/lua/mason-core/functional/string.lua
@@ -85,4 +85,15 @@ _.to_lower = function(str)
return str:lower()
end
+---@param pattern string
+---@param str string
+_.trim_start = fun.curryN(function(pattern, str)
+ for i = 1, #str do
+ if not str:sub(i, i):match(pattern) then
+ return str:sub(i)
+ end
+ end
+ return str
+end, 2)
+
return _
diff --git a/lua/mason-core/functional/table.lua b/lua/mason-core/functional/table.lua
index 276a3180..26db162b 100644
--- a/lua/mason-core/functional/table.lua
+++ b/lua/mason-core/functional/table.lua
@@ -24,7 +24,9 @@ end, 2)
---@param path any[]
---@param tbl table
_.path = fun.curryN(function(path, tbl)
- return vim.tbl_get(tbl, unpack(path))
+ -- see https://github.com/neovim/neovim/pull/21426
+ local value = vim.tbl_get(tbl, unpack(path))
+ return value
end, 2)
---@generic T, U
@@ -97,10 +99,21 @@ _.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
+---@generic K, V
+---@param key K
+---@param value V
+---@param tbl table<K, V>
+---@return table<K, V>
+_.assoc = fun.curryN(function(key, value, tbl)
+ local res = shallow_clone(tbl)
+ res[key] = value
+ return res
+end, 3)
+
+---@generic K, V
+---@param key K
+---@param tbl table<K, V>
+---@return table<K, V>
_.dissoc = fun.curryN(function(key, tbl)
local res = shallow_clone(tbl)
res[key] = nil