From 9ab306169060eeab7ebca00653318683e72ab62d Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 29 Jun 2024 11:44:31 +0200 Subject: [PATCH] perf(rocks): `vim.fn.executable` is slow on WSL2, so only check for `luarocks` when needed. Closes #1585 --- lua/lazy/core/config.lua | 14 ++++++++++++-- lua/lazy/core/plugin.lua | 8 ++++---- lua/lazy/health.lua | 4 ++-- lua/lazy/pkg/rockspec.lua | 6 +++--- 4 files changed, 21 insertions(+), 11 deletions(-) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index f3ce188..cb360ec 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -49,8 +49,11 @@ M.defaults = { enabled = true, root = vim.fn.stdpath("data") .. "/lazy-rocks", server = "https://nvim-neorocks.github.io/rocks-binaries/", - -- use hererocks to install luarocks. - hererocks = vim.fn.executable("luarocks") == 0, + -- use hererocks to install luarocks? + -- set to `nil` to use hererocks when luarocks is not found + -- set to `true` to always use hererocks + -- set to `false` to always use luarocks + hererocks = nil, }, dev = { ---@type string | fun(plugin: LazyPlugin): string directory where you store your local plugin projects @@ -218,6 +221,13 @@ M.defaults = { debug = false, } +function M.hererocks() + if M.options.rocks.hererocks == nil then + M.options.rocks.hererocks = vim.fn.executable("luarocks") == 0 + end + return M.options.rocks.hererocks +end + M.version = "11.8.1" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index f917b19..26b3f6e 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -336,16 +336,16 @@ function M.load() end -- add hererocks when enabled and needed - if Config.options.rocks.hererocks then - for _, plugin in pairs(Config.spec.plugins) do - if plugin.build == "rockspec" then + for _, plugin in pairs(Config.spec.plugins) do + if plugin.build == "rockspec" then + if Config.hererocks() then Config.spec.meta:add({ "luarocks/hererocks", build = "rockspec", lazy = true, }) - break end + break end end diff --git a/lua/lazy/health.lua b/lua/lazy/health.lua index 60cb61e..b3bf6f2 100644 --- a/lua/lazy/health.lua +++ b/lua/lazy/health.lua @@ -125,7 +125,7 @@ function M.check() start("luarocks") if Config.options.rocks.enabled then - if Config.options.rocks.hererocks then + if Config.hererocks() then info("checking `hererocks` installation") else info("checking `luarocks` installation") @@ -155,7 +155,7 @@ function M.check() "Lazy won't be able to install plugins that require `luarocks`.", "Here's what you can do:", " - fix your `luarocks` installation", - Config.options.rocks.hererocks and " - disable *hererocks* with `opts.rocks.hererocks = false`" + Config.hererocks() and " - disable *hererocks* with `opts.rocks.hererocks = false`" or " - enable `hererocks` with `opts.rocks.hererocks = true`", " - disable `luarocks` support completely with `opts.rocks.enabled = false`", }, "\n")) diff --git a/lua/lazy/pkg/rockspec.lua b/lua/lazy/pkg/rockspec.lua index c89ab3c..e1d2c6e 100644 --- a/lua/lazy/pkg/rockspec.lua +++ b/lua/lazy/pkg/rockspec.lua @@ -72,7 +72,7 @@ function M.check(opts) }, opts or {}) local ok = false - if Config.options.rocks.hererocks then + if Config.hererocks() then if M.hererocks.building() then ok = true else @@ -119,7 +119,7 @@ function M.build(task) "", "This plugin requires `luarocks`. Try one of the following:", " - fix your `luarocks` installation", - Config.options.rocks.hererocks and " - disable *hererocks* with `opts.rocks.hererocks = false`" + Config.hererocks() and " - disable *hererocks* with `opts.rocks.hererocks = false`" or " - enable `hererocks` with `opts.rocks.hererocks = true`", " - disable `luarocks` support completely with `opts.rocks.enabled = false`", }) @@ -132,7 +132,7 @@ function M.build(task) local env = {} local luarocks = "luarocks" - if Config.options.rocks.hererocks then + if Config.hererocks() then -- hererocks is still building, so skip for now -- a new build will happen in the next round if M.hererocks.building() then