aboutsummaryrefslogtreecommitdiffstats
path: root/lua/mason-core
diff options
context:
space:
mode:
authorWilliam Boman <william@redwill.se>2026-01-07 14:39:35 +0100
committerWilliam Boman <william@redwill.se>2026-01-07 14:39:35 +0100
commitad903f1c1f18fd229d67e523418b3aa6c9f1c862 (patch)
treed52cca80e062b3df9b8daeba20435aa83c34c7a2 /lua/mason-core
parentfix(installer): update cwd after uv_fs_rename() was successful (#2033) (diff)
downloadmason-fix/support-removed-packages.tar
mason-fix/support-removed-packages.tar.gz
mason-fix/support-removed-packages.tar.bz2
mason-fix/support-removed-packages.tar.lz
mason-fix/support-removed-packages.tar.xz
mason-fix/support-removed-packages.tar.zst
mason-fix/support-removed-packages.zip
feat: add support for removal of packages from a registryfix/support-removed-packages
This adds support for removal of packages from any given registry. Currently mason.nvim doesn't support this at all and throws an error when trying to interact with the registry in any way while having a removed package installed locally. This ensures that removed packages are available both in the `:Mason` UI as well as the public Lua APIs. These "synthesized" packages only supports uninstallation, and metadata such as licenses, categories, homepage, etc is not available.
Diffstat (limited to 'lua/mason-core')
-rw-r--r--lua/mason-core/installer/InstallHandle.lua2
-rw-r--r--lua/mason-core/installer/context/init.lua2
-rw-r--r--lua/mason-core/package/AbstractPackage.lua10
-rw-r--r--lua/mason-core/receipt.lua12
4 files changed, 16 insertions, 10 deletions
diff --git a/lua/mason-core/installer/InstallHandle.lua b/lua/mason-core/installer/InstallHandle.lua
index d8b8941f..3846659e 100644
--- a/lua/mason-core/installer/InstallHandle.lua
+++ b/lua/mason-core/installer/InstallHandle.lua
@@ -43,7 +43,7 @@ function InstallHandleSpawnHandle:__tostring()
end
---@class InstallHandle : EventEmitter
----@field package AbstractPackage
+---@field public package AbstractPackage
---@field state InstallHandleState
---@field stdio_sink BufferedSink
---@field is_terminated boolean
diff --git a/lua/mason-core/installer/context/init.lua b/lua/mason-core/installer/context/init.lua
index 9af95f80..ae96f986 100644
--- a/lua/mason-core/installer/context/init.lua
+++ b/lua/mason-core/installer/context/init.lua
@@ -17,7 +17,7 @@ local receipt = require "mason-core.receipt"
---@field location InstallLocation
---@field spawn InstallContextSpawn
---@field handle InstallHandle
----@field package AbstractPackage
+---@field public package AbstractPackage
---@field cwd InstallContextCwd
---@field opts PackageInstallOpts
---@field stdio_sink StdioSink
diff --git a/lua/mason-core/package/AbstractPackage.lua b/lua/mason-core/package/AbstractPackage.lua
index d0fde00d..5678f4dd 100644
--- a/lua/mason-core/package/AbstractPackage.lua
+++ b/lua/mason-core/package/AbstractPackage.lua
@@ -6,7 +6,6 @@ local Result = require "mason-core.result"
local _ = require "mason-core.functional"
local fs = require "mason-core.fs"
local log = require "mason-core.log"
-local path = require "mason-core.path"
local settings = require "mason.settings"
local Semaphore = require("mason-core.async.control").Semaphore
@@ -166,15 +165,10 @@ end
---@return string?
function AbstractPackage:get_installed_version(location)
return self:get_receipt(location)
- :and_then(
+ :map(
---@param receipt InstallReceipt
function(receipt)
- local source = receipt:get_source()
- if source.id then
- return Purl.parse(source.id):map(_.prop "version"):ok()
- else
- return Optional.empty()
- end
+ return receipt:get_installed_package_version()
end
)
:or_else(nil)
diff --git a/lua/mason-core/receipt.lua b/lua/mason-core/receipt.lua
index 42a7e882..bdf96254 100644
--- a/lua/mason-core/receipt.lua
+++ b/lua/mason-core/receipt.lua
@@ -1,3 +1,7 @@
+local Optional = require "mason-core.optional"
+local Purl = require "mason-core.purl"
+local _ = require "mason-core.functional"
+
local M = {}
---@alias InstallReceiptSchemaVersion
@@ -41,6 +45,14 @@ function InstallReceipt:get_name()
return self.name
end
+---@return string?
+function InstallReceipt:get_installed_package_version()
+ local source = self:get_source()
+ if source.id then
+ return Purl.parse(source.id):map(_.prop "version"):get_or_nil()
+ end
+end
+
function InstallReceipt:get_schema_version()
return self.schema_version
end