diff options
Diffstat (limited to 'lua/mason-core/package')
| -rw-r--r-- | lua/mason-core/package/AbstractPackage.lua | 13 | ||||
| -rw-r--r-- | lua/mason-core/package/init.lua | 13 |
2 files changed, 24 insertions, 2 deletions
diff --git a/lua/mason-core/package/AbstractPackage.lua b/lua/mason-core/package/AbstractPackage.lua index 5678f4dd..a852d350 100644 --- a/lua/mason-core/package/AbstractPackage.lua +++ b/lua/mason-core/package/AbstractPackage.lua @@ -6,6 +6,7 @@ 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 @@ -128,7 +129,7 @@ end ---@return Optional # Optional<InstallReceipt> function AbstractPackage:get_receipt(location) location = location or InstallLocation.global() - local receipt_path = location:receipt(self.name) + local receipt_path = self:get_receipt_path(location) if fs.sync.file_exists(receipt_path) then local receipt = require "mason-core.receipt" return Optional.of(receipt.InstallReceipt.from_json(vim.json.decode(fs.sync.read_file(receipt_path)))) @@ -137,6 +138,11 @@ function AbstractPackage:get_receipt(location) end ---@param location? InstallLocation +function AbstractPackage:get_receipt_path(location) + return path.concat { self:get_install_path(location), "mason-receipt.json" } +end + +---@param location? InstallLocation ---@return boolean function AbstractPackage:is_installed(location) error "Unimplemented." @@ -174,6 +180,11 @@ function AbstractPackage:get_installed_version(location) :or_else(nil) end +---@param location? InstallLocation +function AbstractPackage:get_install_path(location) + error "Unimplemented." +end + ---@param opts? PackageInstallOpts ---@param callback? InstallRunnerCallback ---@return InstallHandle diff --git a/lua/mason-core/package/init.lua b/lua/mason-core/package/init.lua index cb4ef99e..07257d8d 100644 --- a/lua/mason-core/package/init.lua +++ b/lua/mason-core/package/init.lua @@ -76,6 +76,7 @@ Package.License = setmetatable({}, { ---@class RegistryPackageSpec ---@field schema RegistryPackageSpecSchema ---@field name string +---@field system boolean? ---@field description string ---@field homepage string ---@field licenses string[] @@ -147,9 +148,19 @@ function Package:uninstall(opts, callback) end ---@param location? InstallLocation +function Package:get_install_path(location) + location = location or InstallLocation.global() + if self.spec.system then + return location:system_package(self.name) + else + return location:package(self.name) + end +end + +---@param location? InstallLocation function Package:is_installed(location) location = location or InstallLocation.global() - local ok, stat = pcall(vim.loop.fs_stat, location:package(self.name)) + local ok, stat = pcall(vim.loop.fs_stat, self:get_install_path(location)) if not ok or not stat then return false end |
