diff options
| author | William Boman <william@redwill.se> | 2023-03-05 03:21:03 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-03-05 03:21:03 +0100 |
| commit | 08db751ef23471a030b09e6fc16b79702f3f2f1e (patch) | |
| tree | da71eda21387072c1fede9e5ae7e351b69977959 | |
| parent | feat: add semver module (#1058) (diff) | |
| download | mason-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.
| -rw-r--r-- | lua/mason-core/package/init.lua | 18 |
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 |
