aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilliam Boman <william@redwill.se>2023-01-04 07:28:35 +0100
committerGitHub <noreply@github.com>2023-01-04 07:28:35 +0100
commit2100324ec2ed6b2b0770f8954f1dd1c02484f2cf (patch)
treef3c8bd65d5e749115b90b851a6ba539df9224f98
parentfix(mason-registry): don't pass possible nil value to log (#840) (diff)
downloadmason-2100324ec2ed6b2b0770f8954f1dd1c02484f2cf.tar
mason-2100324ec2ed6b2b0770f8954f1dd1c02484f2cf.tar.gz
mason-2100324ec2ed6b2b0770f8954f1dd1c02484f2cf.tar.bz2
mason-2100324ec2ed6b2b0770f8954f1dd1c02484f2cf.tar.lz
mason-2100324ec2ed6b2b0770f8954f1dd1c02484f2cf.tar.xz
mason-2100324ec2ed6b2b0770f8954f1dd1c02484f2cf.tar.zst
mason-2100324ec2ed6b2b0770f8954f1dd1c02484f2cf.zip
feat(registry): add has_package() method (#847)
-rw-r--r--doc/mason.txt10
-rw-r--r--lua/mason-registry/init.lua7
-rw-r--r--tests/mason-registry/registry_spec.lua20
3 files changed, 37 insertions, 0 deletions
diff --git a/doc/mason.txt b/doc/mason.txt
index 5a5c9bda..604b16ac 100644
--- a/doc/mason.txt
+++ b/doc/mason.txt
@@ -411,6 +411,16 @@ get_package({package_name})
Returns:
Package
+ *mason-registry.has_package()*
+has_package({package_name})
+ Returns true if the provided package_name can be found in the registry.
+
+ Parameters:
+ {package_name} - string
+
+ Returns:
+ boolean
+
*mason-registry.get_installed_packages()*
get_installed_packages()
Returns all installed package instances. This is a slower function that
diff --git a/lua/mason-registry/init.lua b/lua/mason-registry/init.lua
index dc64cc47..164e9c02 100644
--- a/lua/mason-registry/init.lua
+++ b/lua/mason-registry/init.lua
@@ -70,6 +70,13 @@ function M.get_package(package_name)
return pkg
end
+---Returns true if the provided package_name can be found in the registry.
+---@param package_name string
+---@return boolean
+function M.has_package(package_name)
+ return index[package_name] ~= nil
+end
+
local get_packages = _.map(M.get_package)
---Returns all installed package names. This is a fast function that doesn't load any extra modules.
diff --git a/tests/mason-registry/registry_spec.lua b/tests/mason-registry/registry_spec.lua
new file mode 100644
index 00000000..5931ca35
--- /dev/null
+++ b/tests/mason-registry/registry_spec.lua
@@ -0,0 +1,20 @@
+local Pkg = require "mason-core.package"
+local registry = require "mason-registry"
+
+describe("mason-registry", function()
+ it("should return package", function()
+ assert.is_true(getmetatable(registry.get_package "dummy").__index == Pkg)
+ end)
+
+ it("should error when getting non-existent package", function()
+ local err = assert.has_error(function()
+ registry.get_package "non-existent"
+ end)
+ assert.equals([[Cannot find package "non-existent".]], err)
+ end)
+
+ it("should check whether package exists", function()
+ assert.is_true(registry.has_package "dummy")
+ assert.is_false(registry.has_package "non-existent")
+ end)
+end)