aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilliam Boman <william@redwill.se>2023-04-03 00:33:48 +0200
committerGitHub <noreply@github.com>2023-04-02 22:33:48 +0000
commit0114336145771ff7c528debba52c5ff21bf6f7a2 (patch)
tree37802cb27b602c9c3e900aec7f3ad012ed3b8719
parentchore: consolidate generate task (#1171) (diff)
downloadmason-0114336145771ff7c528debba52c5ff21bf6f7a2.tar
mason-0114336145771ff7c528debba52c5ff21bf6f7a2.tar.gz
mason-0114336145771ff7c528debba52c5ff21bf6f7a2.tar.bz2
mason-0114336145771ff7c528debba52c5ff21bf6f7a2.tar.lz
mason-0114336145771ff7c528debba52c5ff21bf6f7a2.tar.xz
mason-0114336145771ff7c528debba52c5ff21bf6f7a2.tar.zst
mason-0114336145771ff7c528debba52c5ff21bf6f7a2.zip
refactor: only schedule in a.scheduler() when in fast event (#1170)
Explicitly schedule via `a.wait(vim.schedule)` instead.
-rw-r--r--lua/mason-core/async/init.lua4
-rw-r--r--lua/mason-core/functional/init.lua21
-rw-r--r--lua/mason-core/installer/linker.lua5
-rw-r--r--lua/mason-core/installer/managers/pypi.lua4
-rw-r--r--lua/mason-core/installer/registry/init.lua6
-rw-r--r--lua/mason-core/installer/registry/link.lua4
-rw-r--r--lua/mason-core/installer/registry/providers/github.lua4
-rw-r--r--lua/mason-core/managers/cargo/init.lua8
-rw-r--r--lua/mason-core/managers/go/init.lua4
-rw-r--r--lua/mason-core/managers/pip3/init.lua4
-rw-r--r--lua/mason-core/managers/powershell/init.lua4
-rw-r--r--lua/mason-core/managers/std/init.lua8
-rw-r--r--lua/mason-core/spawn.lua4
-rw-r--r--lua/mason-registry/index/ltex-ls/init.lua4
-rw-r--r--lua/mason-registry/init.lua8
-rw-r--r--lua/mason/api/command.lua4
-rw-r--r--lua/mason/health/init.lua8
-rw-r--r--tests/mason-core/EventEmitter_spec.lua2
-rw-r--r--tests/mason-core/managers/powershell_spec.lua1
-rw-r--r--tests/mason-core/terminator_spec.lua4
-rw-r--r--tests/mason-core/ui_spec.lua10
-rw-r--r--tests/mason/api/command_spec.lua6
22 files changed, 56 insertions, 71 deletions
diff --git a/lua/mason-core/async/init.lua b/lua/mason-core/async/init.lua
index df7c996c..1b9b23a4 100644
--- a/lua/mason-core/async/init.lua
+++ b/lua/mason-core/async/init.lua
@@ -150,7 +150,9 @@ exports.sleep = function(ms)
end
exports.scheduler = function()
- await(vim.schedule)
+ if vim.in_fast_event() then
+ await(vim.schedule)
+ end
end
---@async
diff --git a/lua/mason-core/functional/init.lua b/lua/mason-core/functional/init.lua
index 5e0ac680..353c5cc1 100644
--- a/lua/mason-core/functional/init.lua
+++ b/lua/mason-core/functional/init.lua
@@ -153,4 +153,25 @@ _.lazy_when = function(condition, value)
return condition and value() or nil
end
+---@param fn fun()
+_.scheduler = function(fn)
+ if vim.in_fast_event() then
+ vim.schedule(fn)
+ else
+ fn()
+ end
+end
+
+---@generic T : fun(...)
+---@param fn T
+---@return T
+_.scheduler_wrap = function(fn)
+ return function(...)
+ local args = _.table_pack(...)
+ _.scheduler(function()
+ fn(unpack(args, 1, args.n + 1))
+ end)
+ end
+end
+
return _
diff --git a/lua/mason-core/installer/linker.lua b/lua/mason-core/installer/linker.lua
index b97dfd3d..98d1d30f 100644
--- a/lua/mason-core/installer/linker.lua
+++ b/lua/mason-core/installer/linker.lua
@@ -63,10 +63,7 @@ local function link(context, link_context, link_fn)
do
-- 1. Ensure destination directory exists
- if vim.in_fast_event() then
- a.scheduler()
- end
-
+ a.scheduler()
local dir = vim.fn.fnamemodify(dest_abs_path, ":h")
if not fs.async.dir_exists(dir) then
try(Result.pcall(fs.async.mkdirp, dir))
diff --git a/lua/mason-core/installer/managers/pypi.lua b/lua/mason-core/installer/managers/pypi.lua
index 9f71cc19..bb148013 100644
--- a/lua/mason-core/installer/managers/pypi.lua
+++ b/lua/mason-core/installer/managers/pypi.lua
@@ -55,9 +55,7 @@ function M.init(opts)
log.fmt_debug("pypi: init", opts)
local ctx = installer.context()
- if vim.in_fast_event() then
- a.scheduler()
- end
+ a.scheduler()
local executables = platform.is.win
and _.list_not_nil(
diff --git a/lua/mason-core/installer/registry/init.lua b/lua/mason-core/installer/registry/init.lua
index f03f3e31..23b1a379 100644
--- a/lua/mason-core/installer/registry/init.lua
+++ b/lua/mason-core/installer/registry/init.lua
@@ -141,10 +141,8 @@ end
function M.compile(spec, opts)
log.debug("Compiling installer.", spec.name, opts)
return Result.try(function(try)
- if vim.in_fast_event() then
- -- Parsers run synchronously and may access API functions, so we schedule before-hand.
- a.scheduler()
- end
+ -- Parsers run synchronously and may access API functions, so we schedule before-hand.
+ a.scheduler()
local map_parse_err = _.cond {
{
diff --git a/lua/mason-core/installer/registry/link.lua b/lua/mason-core/installer/registry/link.lua
index 7075163b..5d6a8f16 100644
--- a/lua/mason-core/installer/registry/link.lua
+++ b/lua/mason-core/installer/registry/link.lua
@@ -214,9 +214,7 @@ local function expand_file_spec(ctx, purl, source, file_spec_table)
return Result.failure(("Cannot link file %q to dir %q."):format(source_path, dest))
end
- if vim.in_fast_event() then
- a.scheduler()
- end
+ a.scheduler()
local glob = path.concat { cwd, source_path } .. "**/*"
log.fmt_trace("Symlink glob for %s: %s", ctx.package, glob)
diff --git a/lua/mason-core/installer/registry/providers/github.lua b/lua/mason-core/installer/registry/providers/github.lua
index 90fcbbfa..06ac0b06 100644
--- a/lua/mason-core/installer/registry/providers/github.lua
+++ b/lua/mason-core/installer/registry/providers/github.lua
@@ -113,9 +113,7 @@ local release = {
end))
for __, download in ipairs(source.downloads) do
- if vim.in_fast_event() then
- a.scheduler()
- end
+ a.scheduler()
local out_dir = vim.fn.fnamemodify(download.out_file, ":h")
local out_file = vim.fn.fnamemodify(download.out_file, ":t")
if out_dir ~= "." then
diff --git a/lua/mason-core/managers/cargo/init.lua b/lua/mason-core/managers/cargo/init.lua
index e0eec3b6..49a5841a 100644
--- a/lua/mason-core/managers/cargo/init.lua
+++ b/lua/mason-core/managers/cargo/init.lua
@@ -144,9 +144,7 @@ end
---@param receipt InstallReceipt<InstallReceiptPackageSource>
---@param install_dir string
function M.check_outdated_primary_package(receipt, install_dir)
- if vim.in_fast_event() then
- a.scheduler()
- end
+ a.scheduler()
local crate_name = vim.fn.fnamemodify(receipt.primary_source.package, ":t")
return get_installed_crates(install_dir)
:ok()
@@ -189,9 +187,7 @@ end
---@param receipt InstallReceipt<InstallReceiptPackageSource>
---@param install_dir string
function M.get_installed_primary_package_version(receipt, install_dir)
- if vim.in_fast_event() then
- a.scheduler()
- end
+ a.scheduler()
local crate_name = vim.fn.fnamemodify(receipt.primary_source.package, ":t")
return get_installed_crates(install_dir)
:ok()
diff --git a/lua/mason-core/managers/go/init.lua b/lua/mason-core/managers/go/init.lua
index 438e7785..0452400d 100644
--- a/lua/mason-core/managers/go/init.lua
+++ b/lua/mason-core/managers/go/init.lua
@@ -114,9 +114,7 @@ end
---@param receipt InstallReceipt<InstallReceiptPackageSource>
---@param install_dir string
function M.get_installed_primary_package_version(receipt, install_dir)
- if vim.in_fast_event() then
- a.scheduler()
- end
+ a.scheduler()
local normalized_pkg_name = trim_wildcard_suffix(receipt.primary_source.package)
-- trims e.g. golang.org/x/tools/gopls to gopls
local executable = vim.fn.fnamemodify(normalized_pkg_name, ":t")
diff --git a/lua/mason-core/managers/pip3/init.lua b/lua/mason-core/managers/pip3/init.lua
index 1b76e050..36ad6fc7 100644
--- a/lua/mason-core/managers/pip3/init.lua
+++ b/lua/mason-core/managers/pip3/init.lua
@@ -46,9 +46,7 @@ function M.install(packages)
pkgs[1] = ("%s==%s"):format(pkgs[1], version)
end)
- if vim.in_fast_event() then
- a.scheduler()
- end
+ a.scheduler()
local executables = platform.is.win
and _.list_not_nil(vim.g.python3_host_prog and vim.fn.expand(vim.g.python3_host_prog), "python", "python3")
diff --git a/lua/mason-core/managers/powershell/init.lua b/lua/mason-core/managers/powershell/init.lua
index 4c0ec712..66045bc4 100644
--- a/lua/mason-core/managers/powershell/init.lua
+++ b/lua/mason-core/managers/powershell/init.lua
@@ -12,9 +12,7 @@ local PWSHOPT = {
}
local powershell = _.lazy(function()
- if vim.in_fast_event() then
- a.scheduler()
- end
+ a.scheduler()
if vim.fn.executable "pwsh" == 1 then
return "pwsh"
else
diff --git a/lua/mason-core/managers/std/init.lua b/lua/mason-core/managers/std/init.lua
index dda39bac..eb7db9bb 100644
--- a/lua/mason-core/managers/std/init.lua
+++ b/lua/mason-core/managers/std/init.lua
@@ -21,9 +21,7 @@ end
function M.ensure_executable(executable, opts)
local ctx = installer.context()
opts = opts or {}
- if vim.in_fast_event() then
- a.scheduler()
- end
+ a.scheduler()
if vim.fn.executable(executable) ~= 1 then
ctx.stdio_sink.stderr(("%s was not found in path.\n"):format(executable))
if opts.help_url then
@@ -190,9 +188,7 @@ end
---@params opts
function M.select(items, opts)
assert(not platform.is_headless, "Tried to prompt for user input while in headless mode.")
- if vim.in_fast_event() then
- a.scheduler()
- end
+ a.scheduler()
local async_select = a.promisify(vim.ui.select)
return async_select(items, opts)
end
diff --git a/lua/mason-core/spawn.lua b/lua/mason-core/spawn.lua
index 50c90a38..c6f06d81 100644
--- a/lua/mason-core/spawn.lua
+++ b/lua/mason-core/spawn.lua
@@ -34,9 +34,7 @@ local function Failure(err, cmd)
end
local is_executable = _.memoize(function(cmd)
- if vim.in_fast_event() then
- a.scheduler()
- end
+ a.scheduler()
return vim.fn.executable(cmd) == 1
end, _.identity)
diff --git a/lua/mason-registry/index/ltex-ls/init.lua b/lua/mason-registry/index/ltex-ls/init.lua
index 1cd10618..6cde2e51 100644
--- a/lua/mason-registry/index/ltex-ls/init.lua
+++ b/lua/mason-registry/index/ltex-ls/init.lua
@@ -61,9 +61,7 @@ return Pkg.new {
---@async
---@param ctx InstallContext
install = function(ctx)
- if vim.in_fast_event() then
- a.scheduler()
- end
+ a.scheduler()
if vim.fn.executable "java" == 1 then
download_platform_independent()
else
diff --git a/lua/mason-registry/init.lua b/lua/mason-registry/init.lua
index 93472ef3..0f1805a4 100644
--- a/lua/mason-registry/init.lua
+++ b/lua/mason-registry/init.lua
@@ -176,15 +176,11 @@ function M.refresh(cb)
---@async
local function refresh()
- if vim.in_fast_event() then
- a.scheduler()
- end
+ a.scheduler()
local is_outdated = get_store_age(os.time()) > REGISTRY_STORE_TTL
if is_outdated or not sources.is_installed() then
if a.wait(M.update) then
- if vim.in_fast_event() then
- a.scheduler()
- end
+ a.scheduler()
update_store_timestamp(os.time())
end
end
diff --git a/lua/mason/api/command.lua b/lua/mason/api/command.lua
index 8fba7ea0..ae889e6c 100644
--- a/lua/mason/api/command.lua
+++ b/lua/mason/api/command.lua
@@ -66,8 +66,8 @@ local function join_handles(handles)
end, handles)
if _.length(failed_packages) > 0 then
- a.scheduler() -- wait for scheduler for logs to finalize
- a.scheduler() -- logs have been written
+ a.wait(vim.schedule) -- wait for scheduler for logs to finalize
+ a.wait(vim.schedule) -- logs have been written
vim.api.nvim_err_writeln ""
vim.api.nvim_err_writeln(
("The following packages failed to install: %s"):format(_.join(", ", failed_packages))
diff --git a/lua/mason/health/init.lua b/lua/mason/health/init.lua
index b4ff37a2..93fe295d 100644
--- a/lua/mason/health/init.lua
+++ b/lua/mason/health/init.lua
@@ -306,9 +306,7 @@ function M.check()
:map(
---@param rate_limit GitHubRateLimitResponse
function(rate_limit)
- if vim.in_fast_event() then
- a.scheduler()
- end
+ a.scheduler()
local remaining = rate_limit.resources.core.remaining
local used = rate_limit.resources.core.used
local limit = rate_limit.resources.core.limit
@@ -327,9 +325,7 @@ function M.check()
end
)
:on_failure(function()
- if vim.in_fast_event() then
- a.scheduler()
- end
+ a.scheduler()
health.report_warn "Failed to check GitHub API rate limit status."
end)
end)
diff --git a/tests/mason-core/EventEmitter_spec.lua b/tests/mason-core/EventEmitter_spec.lua
index fc01e3ab..caec8a80 100644
--- a/tests/mason-core/EventEmitter_spec.lua
+++ b/tests/mason-core/EventEmitter_spec.lua
@@ -49,7 +49,7 @@ describe("EventEmitter", function()
local emitter = EventEmitter.init(setmetatable({}, { __index = EventEmitter }))
emitter:on("event", mockx.throws "My error.")
emitter:emit "event"
- a.scheduler()
+ a.wait(vim.schedule)
assert.spy(vim.api.nvim_err_writeln).was_called(1)
assert.spy(vim.api.nvim_err_writeln).was_called_with "My error."
end)
diff --git a/tests/mason-core/managers/powershell_spec.lua b/tests/mason-core/managers/powershell_spec.lua
index dbec05bf..297c85ae 100644
--- a/tests/mason-core/managers/powershell_spec.lua
+++ b/tests/mason-core/managers/powershell_spec.lua
@@ -32,7 +32,6 @@ describe("powershell manager", function()
vim.fn.executable.on_call_with("pwsh").returns(0)
local powershell = powershell()
- a.scheduler()
powershell.command "echo 'Is this bash?'"
assert.spy(spawn.pwsh).was_called(0)
diff --git a/tests/mason-core/terminator_spec.lua b/tests/mason-core/terminator_spec.lua
index 6d7c1612..d8d0f2eb 100644
--- a/tests/mason-core/terminator_spec.lua
+++ b/tests/mason-core/terminator_spec.lua
@@ -27,7 +27,7 @@ describe("terminator", function()
local dummy2_handle = dummy2:install()
terminator.terminate(5000)
- a.scheduler()
+ a.wait(vim.schedule)
assert.spy(InstallHandle.terminate).was_called(2)
assert.spy(InstallHandle.terminate).was_called_with(match.is_ref(dummy_handle))
assert.spy(InstallHandle.terminate).was_called_with(match.is_ref(dummy2_handle))
@@ -67,7 +67,7 @@ describe("terminator", function()
},
}, true, {})
- a.scheduler()
+ a.wait(vim.schedule)
assert.spy(vim.api.nvim_err_writeln).was_called(1)
assert.spy(vim.api.nvim_err_writeln).was_called_with(_.dedent [[
diff --git a/tests/mason-core/ui_spec.lua b/tests/mason-core/ui_spec.lua
index 8c80cc3b..40a8b888 100644
--- a/tests/mason-core/ui_spec.lua
+++ b/tests/mason-core/ui_spec.lua
@@ -186,7 +186,7 @@ describe("integration test", function()
window.open()
-- Initial window and buffer creation + initial render
- a.scheduler()
+ a.wait(vim.schedule)
assert.spy(win_set_option).was_called(9)
assert.spy(win_set_option).was_called_with(match.is_number(), "number", false)
@@ -245,7 +245,7 @@ describe("integration test", function()
end)
assert.spy(set_lines).was_called(1)
- a.scheduler()
+ a.wait(vim.schedule)
assert.spy(set_lines).was_called(2)
assert
@@ -288,12 +288,12 @@ describe("integration test", function()
local mutate_state = window.state { show_extra_lines = false }
window.init {}
window.open()
- a.scheduler()
+ a.wait(vim.schedule)
window.set_cursor { 5, 3 } -- move cursor to sticky line
mutate_state(function(state)
state.show_extra_lines = true
end)
- a.scheduler()
+ a.wait(vim.schedule)
local cursor = window.get_cursor()
assert.same({ 8, 3 }, cursor)
end)
@@ -311,7 +311,7 @@ describe("integration test", function()
window.state {}
window.init { border = "rounded" }
window.open()
- a.scheduler()
+ a.wait(vim.schedule)
assert.spy(nvim_open_win).was_called(1)
assert.spy(nvim_open_win).was_called_with(
diff --git a/tests/mason/api/command_spec.lua b/tests/mason/api/command_spec.lua
index 7b77bae3..00dfdff8 100644
--- a/tests/mason/api/command_spec.lua
+++ b/tests/mason/api/command_spec.lua
@@ -13,7 +13,7 @@ describe(":Mason", function()
"should open the UI window",
async_test(function()
api.Mason()
- a.scheduler()
+ a.wait(vim.schedule)
local win = vim.api.nvim_get_current_win()
local buf = vim.api.nvim_win_get_buf(win)
assert.equals("mason", vim.api.nvim_buf_get_option(buf, "filetype"))
@@ -103,7 +103,7 @@ describe(":MasonUpdate", function()
assert.spy(vim.notify).was_called_with("Updating registries…", vim.log.levels.INFO, {
title = "mason.nvim",
})
- a.scheduler()
+ a.wait(vim.schedule)
assert.spy(vim.notify).was_called_with("Successfully updated 1 registry.", vim.log.levels.INFO, {
title = "mason.nvim",
})
@@ -122,7 +122,7 @@ describe(":MasonUpdate", function()
assert.spy(vim.notify).was_called_with("Updating registries…", vim.log.levels.INFO, {
title = "mason.nvim",
})
- a.scheduler()
+ a.wait(vim.schedule)
assert.spy(vim.notify).was_called_with("Failed to update registries: Some error.", vim.log.levels.ERROR, {
title = "mason.nvim",
})