diff options
| author | William Boman <william@redwill.se> | 2023-02-20 22:19:39 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-02-20 22:19:39 +0100 |
| commit | b8a6632a0f2d263199d5d480ca85477fe0f414ab (patch) | |
| tree | 57e1ee0f3cef078ec144ecdf1b2fa861acf47755 /lua/mason-registry/init.lua | |
| parent | chore: autogenerate (#1015) (diff) | |
| download | mason-b8a6632a0f2d263199d5d480ca85477fe0f414ab.tar mason-b8a6632a0f2d263199d5d480ca85477fe0f414ab.tar.gz mason-b8a6632a0f2d263199d5d480ca85477fe0f414ab.tar.bz2 mason-b8a6632a0f2d263199d5d480ca85477fe0f414ab.tar.lz mason-b8a6632a0f2d263199d5d480ca85477fe0f414ab.tar.xz mason-b8a6632a0f2d263199d5d480ca85477fe0f414ab.tar.zst mason-b8a6632a0f2d263199d5d480ca85477fe0f414ab.zip | |
feat: configurable registries (#1016)
Diffstat (limited to 'lua/mason-registry/init.lua')
| -rw-r--r-- | lua/mason-registry/init.lua | 34 |
1 files changed, 25 insertions, 9 deletions
diff --git a/lua/mason-registry/init.lua b/lua/mason-registry/init.lua index 164e9c02..2aa445a4 100644 --- a/lua/mason-registry/init.lua +++ b/lua/mason-registry/init.lua @@ -4,14 +4,21 @@ local _ = require "mason-core.functional" local Optional = require "mason-core.optional" local path = require "mason-core.path" local EventEmitter = require "mason-core.EventEmitter" +local sources = require "mason-registry.sources" -local index = require "mason-registry.index" +---@class RegistrySource +---@field get_package fun(self: RegistrySource, pkg_name: string): Package +---@field get_all_package_names fun(self: RegistrySource): string[] +---@field is_installed fun(self: RegistrySource): boolean +---@field install async fun(self: RegistrySource): Result ---@class MasonRegistry : EventEmitter ---@diagnostic disable-next-line: assign-type-mismatch local M = setmetatable({}, { __index = EventEmitter }) EventEmitter.init(M) +M.set_registries = sources.set_registries + local scan_install_root do @@ -21,7 +28,7 @@ do local get_directories = _.compose( _.set_of, _.filter_map(function(entry) - if entry.type == "directory" and index[entry.name] then + if entry.type == "directory" then return Optional.of(entry.name) else return Optional.empty() @@ -62,19 +69,22 @@ end ---@param package_name string ---@return Package function M.get_package(package_name) - local ok, pkg = pcall(require, index[package_name]) - if not ok then - log.fmt_error("Failed to load package %s: %s", package_name, pkg or "") - error(("Cannot find package %q."):format(package_name)) + for source in sources.iter() do + local pkg = source:get_package(package_name) + if pkg then + return pkg + end end - return pkg + log.fmt_error("Cannot find package %q.", package_name) + error(("Cannot find package %q."):format(package_name)) 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 + local ok = pcall(M.get_package, package_name) + return ok end local get_packages = _.map(M.get_package) @@ -94,7 +104,13 @@ end ---Returns all package names. This is a fast function that doesn't load any extra modules. ---@return string[] function M.get_all_package_names() - return _.keys(index) + local pkgs = {} + for source in sources.iter() do + for _, name in ipairs(source:get_all_package_names()) do + pkgs[name] = true + end + end + return _.keys(pkgs) end ---Returns all package instances. This is a slower function that loads more modules. |
