aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilliam Boman <william@redwill.se>2022-12-26 16:50:40 +0100
committerGitHub <noreply@github.com>2022-12-26 16:50:40 +0100
commit05ea35e25dcb03fc019be9ec0ede7e4782bae6b4 (patch)
tree2458ad78bddd6f69a348d8381119bc7bc6667142
parentrefactor(installer): introduce PackageInstallOpts class (#802) (diff)
downloadmason-05ea35e25dcb03fc019be9ec0ede7e4782bae6b4.tar
mason-05ea35e25dcb03fc019be9ec0ede7e4782bae6b4.tar.gz
mason-05ea35e25dcb03fc019be9ec0ede7e4782bae6b4.tar.bz2
mason-05ea35e25dcb03fc019be9ec0ede7e4782bae6b4.tar.lz
mason-05ea35e25dcb03fc019be9ec0ede7e4782bae6b4.tar.xz
mason-05ea35e25dcb03fc019be9ec0ede7e4782bae6b4.tar.zst
mason-05ea35e25dcb03fc019be9ec0ede7e4782bae6b4.zip
feat(functional): add strip_{prefix,suffix} (#803)
-rw-r--r--lua/mason-core/functional/init.lua5
-rw-r--r--lua/mason-core/functional/string.lua31
-rw-r--r--lua/mason-core/installer/registry/expr.lua3
-rw-r--r--tests/mason-core/functional/string_spec.lua19
-rw-r--r--tests/mason-core/installer/registry/expr_spec.lua2
5 files changed, 55 insertions, 5 deletions
diff --git a/lua/mason-core/functional/init.lua b/lua/mason-core/functional/init.lua
index 837f9558..153c40aa 100644
--- a/lua/mason-core/functional/init.lua
+++ b/lua/mason-core/functional/init.lua
@@ -99,7 +99,10 @@ _.format = string.format
_.split = string.split
_.gsub = string.gsub
_.trim = string.trim
-_.trim_start = string.trim_start
+_.trim_start_matches = string.trim_start_matches
+_.trim_end_matches = string.trim_end_matches
+_.strip_prefix = string.strip_prefix
+_.strip_suffix = string.strip_suffix
_.dedent = string.dedent
_.starts_with = string.starts_with
_.to_upper = string.to_upper
diff --git a/lua/mason-core/functional/string.lua b/lua/mason-core/functional/string.lua
index 2d53a5b6..e9e060f7 100644
--- a/lua/mason-core/functional/string.lua
+++ b/lua/mason-core/functional/string.lua
@@ -87,7 +87,7 @@ end
---@param pattern string
---@param str string
-_.trim_start = fun.curryN(function(pattern, str)
+_.trim_start_matches = fun.curryN(function(pattern, str)
for i = 1, #str do
if not str:sub(i, i):match(pattern) then
return str:sub(i)
@@ -96,4 +96,33 @@ _.trim_start = fun.curryN(function(pattern, str)
return str
end, 2)
+---@param pattern string
+---@param str string
+_.trim_end_matches = fun.curryN(function(pattern, str)
+ for i = #str, 1, -1 do
+ if not str:sub(i, i):match(pattern) then
+ return str:sub(1, i)
+ end
+ end
+ return str
+end, 2)
+
+_.strip_prefix = fun.curryN(function(prefix_pattern, str)
+ local _, start = string.find(str, "^" .. prefix_pattern)
+ if start then
+ return str:sub(start + 1)
+ else
+ return str
+ end
+end, 2)
+
+_.strip_suffix = fun.curryN(function(suffix_pattern, str)
+ local stop = string.find(str, suffix_pattern .. "$")
+ if stop then
+ return str:sub(1, stop - 1)
+ else
+ return str
+ end
+end, 2)
+
return _
diff --git a/lua/mason-core/installer/registry/expr.lua b/lua/mason-core/installer/registry/expr.lua
index 2713fcc4..17307ac2 100644
--- a/lua/mason-core/installer/registry/expr.lua
+++ b/lua/mason-core/installer/registry/expr.lua
@@ -20,6 +20,9 @@ local FILTERS = {
to_upper = _.to_upper,
trim = _.trim,
trim_start = _.trim_start,
+ trim_end = _.trim_end,
+ strip_prefix = _.strip_prefix,
+ strip_suffix = _.strip_suffix,
tostring = tostring,
}
diff --git a/tests/mason-core/functional/string_spec.lua b/tests/mason-core/functional/string_spec.lua
index 02062f4c..30dea069 100644
--- a/tests/mason-core/functional/string_spec.lua
+++ b/tests/mason-core/functional/string_spec.lua
@@ -55,7 +55,22 @@ Ipsum
assert.equals("HELLO!", _.trim " HELLO! ")
end)
- it("trim_starts strings", function()
- assert.equals("HELLO! ", _.trim_start("%s", " HELLO! "))
+ it("should trim_start strings", function()
+ assert.equals("HELLO! ", _.trim_start_matches("%s", " HELLO! "))
+ end)
+
+ it("should trim_end strings", function()
+ assert.equals(" HELLO!", _.trim_end_matches("%s", " HELLO! "))
+ end)
+
+ it("should strip_prefix", function()
+ assert.equals("withthewind", _.strip_prefix("gone", "gonewiththewind"))
+ assert.equals("1.3.0", _.strip_prefix("v", "v1.3.0"))
+ end)
+
+ it("should strip_suffix", function()
+ assert.equals("gone", _.strip_suffix("withtthewind", "gonewithtthewind"))
+ assert.equals("name", _.strip_suffix("%.tar%.gz", "name.tar.gz"))
+ assert.equals("name", _.strip_suffix(".tar.*", "name.tar.gz"))
end)
end)
diff --git a/tests/mason-core/installer/registry/expr_spec.lua b/tests/mason-core/installer/registry/expr_spec.lua
index ec92f7a7..be9de0d7 100644
--- a/tests/mason-core/installer/registry/expr_spec.lua
+++ b/tests/mason-core/installer/registry/expr_spec.lua
@@ -37,7 +37,7 @@ describe("registry expressions", function()
assert.same(
Result.success "Gloves",
- expr.eval("G{{ 'Cloves' | trim_start(trim) }}", {
+ expr.eval("G{{ 'Cloves' | strip_prefix(trim) }}", {
trim = "C",
})
)