aboutsummaryrefslogtreecommitdiffstats
path: root/lua/mason-core/package/init.lua
diff options
context:
space:
mode:
authorWilliam Boman <william@redwill.se>2023-03-05 03:21:03 +0100
committerGitHub <noreply@github.com>2023-03-05 03:21:03 +0100
commit08db751ef23471a030b09e6fc16b79702f3f2f1e (patch)
treeda71eda21387072c1fede9e5ae7e351b69977959 /lua/mason-core/package/init.lua
parentfeat: add semver module (#1058) (diff)
downloadmason-08db751ef23471a030b09e6fc16b79702f3f2f1e.tar
mason-08db751ef23471a030b09e6fc16b79702f3f2f1e.tar.gz
mason-08db751ef23471a030b09e6fc16b79702f3f2f1e.tar.bz2
mason-08db751ef23471a030b09e6fc16b79702f3f2f1e.tar.lz
mason-08db751ef23471a030b09e6fc16b79702f3f2f1e.tar.xz
mason-08db751ef23471a030b09e6fc16b79702f3f2f1e.tar.zst
mason-08db751ef23471a030b09e6fc16b79702f3f2f1e.zip
refactor(package): lazy-require modules (#1060)
The mason-core.package module is loaded whenever there's anything interfacing with Mason packages (i.e. pretty often). Some of the modules imported at the top-level is used pretty infrequently, so we lazily require these instead.
Diffstat (limited to 'lua/mason-core/package/init.lua')
-rw-r--r--lua/mason-core/package/init.lua18
1 files changed, 6 insertions, 12 deletions
diff --git a/lua/mason-core/package/init.lua b/lua/mason-core/package/init.lua
index 05d72751..5060ff5c 100644
--- a/lua/mason-core/package/init.lua
+++ b/lua/mason-core/package/init.lua
@@ -1,17 +1,11 @@
local registry = require "mason-registry"
local a = require "mason-core.async"
local _ = require "mason-core.functional"
-local installer = require "mason-core.installer"
-local InstallationHandle = require "mason-core.installer.handle"
local Optional = require "mason-core.optional"
local log = require "mason-core.log"
local EventEmitter = require "mason-core.EventEmitter"
-local receipt = require "mason-core.receipt"
local fs = require "mason-core.fs"
local path = require "mason-core.path"
-local linker = require "mason-core.installer.linker"
-
-local version_checks = require "mason-core.package.version-check"
---@class Package : EventEmitter
---@field name string
@@ -78,6 +72,7 @@ function Package:new_handle()
assert(handle:is_closed(), "Cannot create new handle because existing handle is not closed.")
end)
log.fmt_trace("Creating new handle for %s", self)
+ local InstallationHandle = require "mason-core.installer.handle"
local handle = InstallationHandle.new(self)
self.handle = handle
@@ -107,13 +102,8 @@ function Package:install(opts)
end)
:or_else_get(function()
local handle = self:new_handle()
- -- This function is not expected to be run in async scope, so we create
- -- a new scope here and handle the result callback-style.
a.run(
- function(...)
- -- we wrap installer.execute for testing purposes (to allow spy objects)
- return installer.execute(...)
- end,
+ require("mason-core.installer").execute,
---@param success boolean
---@param result Result
function(success, result)
@@ -153,6 +143,7 @@ function Package:unlink()
local install_path = self:get_install_path()
-- 1. Unlink
self:get_receipt():if_present(function(receipt)
+ local linker = require "mason-core.installer.linker"
linker.unlink(self, receipt):get_or_throw()
end)
@@ -180,6 +171,7 @@ end
function Package:get_receipt()
local receipt_path = path.concat { self:get_install_path(), "mason-receipt.json" }
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))))
end
return Optional.empty()
@@ -189,6 +181,7 @@ end
function Package:get_installed_version(callback)
a.run(function()
local receipt = self:get_receipt():or_else_throw "Unable to get receipt."
+ local version_checks = require "mason-core.package.version-check"
return version_checks.get_installed_version(receipt, self:get_install_path()):get_or_throw()
end, callback)
end
@@ -197,6 +190,7 @@ end
function Package:check_new_version(callback)
a.run(function()
local receipt = self:get_receipt():or_else_throw "Unable to get receipt."
+ local version_checks = require "mason-core.package.version-check"
return version_checks.get_new_version(receipt, self:get_install_path()):get_or_throw()
end, callback)
end