From 579d4bd178f4aae76a4f4dc2ea34bf5e8fa6231b Mon Sep 17 00:00:00 2001 From: William Boman Date: Sat, 22 Apr 2023 19:20:52 +0200 Subject: feat(registry): add .get_all_package_specs() (#1247) This is a faster method than .get_all_packages() due to the fact that it only loads package specifications without instantiating mason-core.package instances. Useful for situations where one only needs to read spec data. --- lua/mason-registry/init.lua | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'lua/mason-registry/init.lua') diff --git a/lua/mason-registry/init.lua b/lua/mason-registry/init.lua index e798ac92..a407ad4f 100644 --- a/lua/mason-registry/init.lua +++ b/lua/mason-registry/init.lua @@ -10,6 +10,7 @@ local sources = require "mason-registry.sources" ---@field id string ---@field get_package fun(self: RegistrySource, pkg_name: string): Package? ---@field get_all_package_names fun(self: RegistrySource): string[] +---@field get_all_package_specs fun(self: RegistrySource): PackageSpec[] | RegistryPackageSpec[] ---@field get_display_name fun(self: RegistrySource): string ---@field is_installed fun(self: RegistrySource): boolean ---@field get_installer fun(self: RegistrySource): Optional # Optional @@ -119,6 +120,15 @@ function M.get_all_packages() return get_packages(M.get_all_package_names()) end +---@return (RegistryPackageSpec | PackageSpec)[] +function M.get_all_package_specs() + local specs = {} + for source in sources.iter() do + vim.list_extend(specs, source:get_all_package_specs()) + end + return _.uniq_by(_.prop "name", specs) +end + local STATE_FILE = path.concat { vim.fn.stdpath((vim.fn.has "nvim-0.8.0" == 1) and "state" or "cache"), "mason-registry-update", -- cgit v1.2.3-70-g09d2