Skip to content

Commit

Permalink
perf(loader): re-use topmod cache to find setup() module
Browse files Browse the repository at this point in the history
  • Loading branch information
folke committed Dec 30, 2022
1 parent 887c602 commit 730bb84
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 10 deletions.
12 changes: 9 additions & 3 deletions lua/lazy/core/cache.lua
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@ M.me = debug.getinfo(1, "S").source:sub(2)
M.me = vim.fn.fnamemodify(M.me, ":p:h:h:h:h"):gsub("\\", "/")
---@type table<string, table<string,string>>
M.topmods = { lazy = { [M.me] = M.me } }
---@type table<string, true>
M.indexed = { [M.me] = true }
---@type table<string, string[]>
M.indexed = { [M.me] = { "lazy" } }
M.indexed_unloaded = false
M.indexed_rtp = 0
-- selene:allow(global_usage)
Expand Down Expand Up @@ -219,7 +219,7 @@ function M._index(path)
if not Util then
return false
end
M.indexed[path] = true
M.indexed[path] = {}
Util.ls(path .. "/lua", function(_, name, t)
local topname
if name:sub(-4) == ".lua" then
Expand All @@ -230,13 +230,19 @@ function M._index(path)
if topname then
M.topmods[topname] = M.topmods[topname] or {}
M.topmods[topname][path] = path
table.insert(M.indexed[path], topname)
end
end)
return true
end
return false
end

function M.get_topmods(path)
M._index(path)
return M.indexed[path] or {}
end

---@param modname string
---@return string?
function M.find(modname)
Expand Down
13 changes: 6 additions & 7 deletions lua/lazy/core/loader.lua
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
local Util = require("lazy.core.util")
local Config = require("lazy.core.config")
local Handler = require("lazy.core.handler")
local Cache = require("lazy.core.cache")

local M = {}

Expand Down Expand Up @@ -204,19 +205,17 @@ function M.config(plugin)
end
else
local normname = Util.normname(plugin.name)
---@type table<string, string>
---@type string[]
local mods = {}
Util.ls(plugin.dir .. "/lua", function(_, modname)
modname = modname:gsub("%.lua$", "")
mods[modname] = modname
for _, modname in ipairs(Cache.get_topmods(plugin.dir)) do
mods[#mods + 1] = modname
local modnorm = Util.normname(modname)
-- if we found an exact match, then use that
if modnorm == normname then
mods = { modname }
return false
break
end
end)
mods = vim.tbl_values(mods)
end
if #mods == 1 then
fn = function()
local opts = plugin.config
Expand Down

0 comments on commit 730bb84

Please sign in to comment.