aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lua/mason-registry/init.lua2
-rw-r--r--lua/mason-registry/sources/file.lua4
-rw-r--r--lua/mason-registry/sources/lua.lua53
-rw-r--r--tests/helpers/lua/dummy-registry/dummy.lua (renamed from tests/helpers/lua/dummy-registry/dummy_package.lua)11
-rw-r--r--tests/helpers/lua/dummy-registry/dummy2.lua (renamed from tests/helpers/lua/dummy-registry/dummy2_package.lua)11
-rw-r--r--tests/helpers/lua/dummy-registry/index.lua6
-rw-r--r--tests/helpers/lua/dummy-registry/registry.lua (renamed from tests/helpers/lua/dummy-registry/registry_package.lua)5
-rw-r--r--tests/mason-core/installer/context_spec.lua5
-rw-r--r--tests/mason-core/installer/linker_spec.lua4
-rw-r--r--tests/mason-core/package/package_spec.lua4
-rw-r--r--tests/mason-registry/sources/lua_spec.lua27
-rw-r--r--tests/minimal_init.vim2
12 files changed, 62 insertions, 72 deletions
diff --git a/lua/mason-registry/init.lua b/lua/mason-registry/init.lua
index b129380c..713335f0 100644
--- a/lua/mason-registry/init.lua
+++ b/lua/mason-registry/init.lua
@@ -119,9 +119,11 @@ function Registry.update(callback)
Registry:emit("update:progress", finished, all)
end)
:on_success(function(updated_registries)
+ log.fmt_debug("Successfully updated %d registries.", #updated_registries)
Registry:emit("update:success", updated_registries)
end)
:on_failure(function(errors)
+ log.error("Failed to update registries.", errors)
Registry:emit("update:failed", errors)
end)
:get_or_throw()
diff --git a/lua/mason-registry/sources/file.lua b/lua/mason-registry/sources/file.lua
index 84566479..d81fcc9c 100644
--- a/lua/mason-registry/sources/file.lua
+++ b/lua/mason-registry/sources/file.lua
@@ -1,8 +1,6 @@
-local Optional = require "mason-core.optional"
local Result = require "mason-core.result"
local _ = require "mason-core.functional"
local a = require "mason-core.async"
-local async_control = require "mason-core.async.control"
local async_uv = require "mason-core.async.uv"
local fs = require "mason-core.fs"
local log = require "mason-core.log"
@@ -11,8 +9,6 @@ local process = require "mason-core.process"
local spawn = require "mason-core.spawn"
local util = require "mason-registry.sources.util"
-local Channel = async_control.Channel
-
---@class FileRegistrySourceSpec
---@field id string
---@field path string
diff --git a/lua/mason-registry/sources/lua.lua b/lua/mason-registry/sources/lua.lua
index 7fae54fe..e2144a83 100644
--- a/lua/mason-registry/sources/lua.lua
+++ b/lua/mason-registry/sources/lua.lua
@@ -1,7 +1,6 @@
-local Optional = require "mason-core.optional"
local Result = require "mason-core.result"
local _ = require "mason-core.functional"
-local log = require "mason-core.log"
+local util = require "mason-registry.sources.util"
---@class LuaRegistrySourceSpec
---@field id string
@@ -9,6 +8,7 @@ local log = require "mason-core.log"
---@class LuaRegistrySource : RegistrySource
---@field private spec LuaRegistrySourceSpec
+---@field buffer { specs: RegistryPackageSpec[], instances: table<string, Package> }?
local LuaRegistrySource = {}
LuaRegistrySource.__index = LuaRegistrySource
@@ -25,37 +25,52 @@ end
---@param pkg_name string
---@return Package?
function LuaRegistrySource:get_package(pkg_name)
- local index = require(self.spec.mod)
- if index[pkg_name] then
- local ok, mod = pcall(require, index[pkg_name])
- if ok then
- return mod
- else
- log.fmt_warn("Unable to load %s from %s: %s", pkg_name, self, mod)
- end
- end
+ return self:get_buffer().instances[pkg_name]
+end
+
+---@param specs RegistryPackageSpec[]
+function LuaRegistrySource:reload(specs)
+ self.buffer = _.assoc("specs", specs, self.buffer or {})
+ self.buffer.instances = _.compose(
+ _.index_by(_.prop "name"),
+ _.map(util.hydrate_package(self.buffer.instances or {}))
+ )(self:get_all_package_specs())
+ return self.buffer
end
function LuaRegistrySource:install()
- return Result.pcall(require, self.spec.mod)
+ return Result.try(function(try)
+ local index = try(Result.pcall(require, self.spec.mod))
+ ---@type RegistryPackageSpec[]
+ local specs = {}
+
+ for _, mod in pairs(index) do
+ table.insert(specs, try(Result.pcall(require, mod)))
+ end
+
+ try(Result.pcall(self.reload, self, specs))
+ end)
end
---@return string[]
function LuaRegistrySource:get_all_package_names()
- local index = require(self.spec.mod)
- return vim.tbl_keys(index)
+ return _.map(_.prop "name", self:get_all_package_specs())
end
---@return RegistryPackageSpec[]
function LuaRegistrySource:get_all_package_specs()
- return _.filter_map(function(name)
- return Optional.of_nilable(self:get_package(name)):map(_.prop "spec")
- end, self:get_all_package_names())
+ return _.filter_map(util.map_registry_spec, self:get_buffer().specs)
+end
+
+function LuaRegistrySource:get_buffer()
+ return self.buffer or {
+ specs = {},
+ instances = {},
+ }
end
function LuaRegistrySource:is_installed()
- local ok = pcall(require, self.spec.mod)
- return ok
+ return self.buffer ~= nil
end
function LuaRegistrySource:get_display_name()
diff --git a/tests/helpers/lua/dummy-registry/dummy_package.lua b/tests/helpers/lua/dummy-registry/dummy.lua
index 4fbaf44d..4b06f4d1 100644
--- a/tests/helpers/lua/dummy-registry/dummy_package.lua
+++ b/tests/helpers/lua/dummy-registry/dummy.lua
@@ -1,13 +1,10 @@
-local Pkg = require "mason-core.package"
-
-return Pkg:new {
- schema = "registry+v1",
+return {
name = "dummy",
description = [[This is a dummy package.]],
homepage = "https://example.com",
- licenses = { Pkg.License.MIT },
- languages = { Pkg.Lang.DummyLang },
- categories = { Pkg.Cat.LSP },
+ licenses = { "MIT" },
+ languages = { "DummyLang" },
+ categories = { "LSP" },
source = {
id = "pkg:mason/dummy@1.0.0",
---@async
diff --git a/tests/helpers/lua/dummy-registry/dummy2_package.lua b/tests/helpers/lua/dummy-registry/dummy2.lua
index 008d27b2..8dc26c9f 100644
--- a/tests/helpers/lua/dummy-registry/dummy2_package.lua
+++ b/tests/helpers/lua/dummy-registry/dummy2.lua
@@ -1,13 +1,10 @@
-local Pkg = require "mason-core.package"
-
-return Pkg:new {
- schema = "registry+v1",
+return {
name = "dummy2",
description = [[This is a dummy2 package.]],
homepage = "https://example.com",
- licenses = { Pkg.License.MIT },
- languages = { Pkg.Lang.Dummy2Lang },
- categories = { Pkg.Cat.LSP },
+ licenses = { "MIT" },
+ languages = { "Dummy2Lang" },
+ categories = { "LSP" },
source = {
id = "pkg:mason/dummy2@1.0.0",
---@async
diff --git a/tests/helpers/lua/dummy-registry/index.lua b/tests/helpers/lua/dummy-registry/index.lua
index 85fe000f..112a2df2 100644
--- a/tests/helpers/lua/dummy-registry/index.lua
+++ b/tests/helpers/lua/dummy-registry/index.lua
@@ -1,5 +1,5 @@
return {
- ["dummy"] = "dummy-registry.dummy_package",
- ["dummy2"] = "dummy-registry.dummy2_package",
- ["registry"] = "dummy-registry.registry_package",
+ ["dummy"] = "dummy-registry.dummy",
+ ["dummy2"] = "dummy-registry.dummy2",
+ ["registry"] = "dummy-registry.registry",
}
diff --git a/tests/helpers/lua/dummy-registry/registry_package.lua b/tests/helpers/lua/dummy-registry/registry.lua
index 7e5d9fbd..3cc4858b 100644
--- a/tests/helpers/lua/dummy-registry/registry_package.lua
+++ b/tests/helpers/lua/dummy-registry/registry.lua
@@ -1,7 +1,4 @@
-local Pkg = require "mason-core.package"
-
-return Pkg:new {
- schema = "registry+v1",
+return {
name = "registry",
description = [[This is a dummy package.]],
homepage = "https://example.com",
diff --git a/tests/mason-core/installer/context_spec.lua b/tests/mason-core/installer/context_spec.lua
index ad469e08..92ef1c49 100644
--- a/tests/mason-core/installer/context_spec.lua
+++ b/tests/mason-core/installer/context_spec.lua
@@ -94,7 +94,6 @@ cmd.exe /C echo %GREETING% %*]]
it("should write Node exec wrapper", function()
local js_rel_path = path.concat { "some", "obscure", "path", "server.js" }
- local dummy = registry.get_package "dummy"
local ctx = test_helpers.create_context()
stub(ctx, "write_shell_exec_wrapper")
stub(ctx.fs, "file_exists")
@@ -112,7 +111,6 @@ cmd.exe /C echo %GREETING% %*]]
it("should write Ruby exec wrapper", function()
local js_rel_path = path.concat { "some", "obscure", "path", "server.js" }
- local dummy = registry.get_package "dummy"
local ctx = test_helpers.create_context()
stub(ctx, "write_shell_exec_wrapper")
stub(ctx.fs, "file_exists")
@@ -147,7 +145,6 @@ cmd.exe /C echo %GREETING% %*]]
end)
it("should write Python exec wrapper", function()
- local dummy = registry.get_package "dummy"
local ctx = test_helpers.create_context()
stub(ctx.cwd, "get")
ctx.cwd.get.returns "/tmp/placeholder"
@@ -183,7 +180,6 @@ cmd.exe /C echo %GREETING% %*]]
end)
it("should write exec wrapper", function()
- local dummy = registry.get_package "dummy"
local exec_rel_path = path.concat { "obscure", "path", "to", "server" }
local ctx = test_helpers.create_context()
stub(ctx, "write_shell_exec_wrapper")
@@ -219,7 +215,6 @@ cmd.exe /C echo %GREETING% %*]]
it("should write PHP exec wrapper", function()
local php_rel_path = path.concat { "some", "obscure", "path", "cli.php" }
- local dummy = registry.get_package "dummy"
local ctx = test_helpers.create_context()
stub(ctx, "write_shell_exec_wrapper")
stub(ctx.fs, "file_exists")
diff --git a/tests/mason-core/installer/linker_spec.lua b/tests/mason-core/installer/linker_spec.lua
index 2177f6a3..6bf63a14 100644
--- a/tests/mason-core/installer/linker_spec.lua
+++ b/tests/mason-core/installer/linker_spec.lua
@@ -40,7 +40,6 @@ describe("linker", function()
end)
it("should symlink executable on Unix", function()
- local dummy = registry.get_package "dummy"
local ctx = test_helpers.create_context()
stub(fs.async, "file_exists")
@@ -70,7 +69,6 @@ describe("linker", function()
end)
it("should write executable wrapper on Windows", function()
- local dummy = registry.get_package "dummy"
local ctx = test_helpers.create_context()
platform.is.darwin = false
@@ -110,7 +108,6 @@ describe("linker", function()
end)
it("should symlink share files", function()
- local dummy = registry.get_package "dummy"
local ctx = test_helpers.create_context()
stub(fs.async, "mkdirp")
@@ -150,7 +147,6 @@ describe("linker", function()
end)
it("should copy share files on Windows", function()
- local dummy = registry.get_package "dummy"
local ctx = test_helpers.create_context()
platform.is.darwin = false
diff --git a/tests/mason-core/package/package_spec.lua b/tests/mason-core/package/package_spec.lua
index 5f69ea4e..8d1929d8 100644
--- a/tests/mason-core/package/package_spec.lua
+++ b/tests/mason-core/package/package_spec.lua
@@ -42,8 +42,8 @@ describe("Package ::", function()
name = "Package name",
description = "Package description",
homepage = "https://example.com",
- categories = { Pkg.Cat.LSP },
- languages = { Pkg.Lang.Rust },
+ categories = { "LSP" },
+ languages = { "Rust" },
licenses = {},
source = {
id = "pkg:mason/package@1",
diff --git a/tests/mason-registry/sources/lua_spec.lua b/tests/mason-registry/sources/lua_spec.lua
index c720ae10..9e3c8450 100644
--- a/tests/mason-registry/sources/lua_spec.lua
+++ b/tests/mason-registry/sources/lua_spec.lua
@@ -2,44 +2,37 @@ local LuaRegistrySource = require "mason-registry.sources.lua"
describe("Lua registry source", function()
it("should get package", function()
- package.loaded["pkg-index"] = {
- ["my-pkg"] = "pkg-index.my-pkg",
- }
- package.loaded["pkg-index.my-pkg"] = {}
local source = LuaRegistrySource:new {
- mod = "pkg-index",
+ mod = "dummy-registry.index",
}
- assert.is_not_nil(source:get_package "my-pkg")
+ assert.is_true(source:install():is_success())
+ assert.is_not_nil(source:get_package "dummy")
assert.is_nil(source:get_package "non-existent")
end)
it("should get all package names", function()
- package.loaded["pkg-index"] = {
- ["my-pkg"] = "pkg-index.my-pkg",
- ["rust-analyzer"] = "pkg-index.rust-analyzer",
- ["typescript-language-server"] = "pkg-index.typescript-language-server",
- }
local source = LuaRegistrySource:new {
- mod = "pkg-index",
+ mod = "dummy-registry.index",
}
+ assert.is_true(source:install():is_success())
local package_names = source:get_all_package_names()
table.sort(package_names)
assert.same({
- "my-pkg",
- "rust-analyzer",
- "typescript-language-server",
+ "dummy",
+ "dummy2",
+ "registry",
}, package_names)
end)
it("should check if is installed", function()
- package.loaded["pkg-index"] = {}
local installed_source = LuaRegistrySource:new {
- mod = "pkg-index",
+ mod = "dummy-registry.index",
}
local uninstalled_source = LuaRegistrySource:new {
mod = "non-existent",
}
+ assert.is_true(installed_source:install():is_success())
assert.is_true(installed_source:is_installed())
assert.is_false(uninstalled_source:is_installed())
end)
diff --git a/tests/minimal_init.vim b/tests/minimal_init.vim
index 43e8367f..e573ec1d 100644
--- a/tests/minimal_init.vim
+++ b/tests/minimal_init.vim
@@ -40,6 +40,8 @@ require("mason").setup {
"lua:dummy-registry.index"
}
}
+
+require("mason-registry").refresh()
EOF
function! RunTests() abort