aboutsummaryrefslogtreecommitdiffstats
path: root/lua/mason-registry/sources
diff options
context:
space:
mode:
Diffstat (limited to 'lua/mason-registry/sources')
-rw-r--r--lua/mason-registry/sources/file.lua4
-rw-r--r--lua/mason-registry/sources/lua.lua53
2 files changed, 34 insertions, 23 deletions
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()