snacks.nvim/lua/snacks/picker/source/lazy.lua

41 lines
1.1 KiB
Lua

local M = {}
---@type snacks.picker.finder
function M.spec(opts, ctx)
local spec = require("lazy.core.config").spec
local Util = require("lazy.core.util")
local paths = {} ---@type string[]
for _, import in ipairs(spec.modules) do
Util.lsmod(import, function(_, modpath)
paths[#paths + 1] = modpath
end)
end
local names = {} ---@type string[]
for _, frag in pairs(spec.meta.fragments.fragments) do
local name = frag.spec[1] or frag.name
if not vim.tbl_contains(names, name) then
names[#names + 1] = name
end
end
local regex = "\\M\\['\"]\\(" .. table.concat(names, "\\|") .. "\\)\\['\"]"
local re = vim.regex(regex)
local ret = {} ---@type snacks.picker.finder.Item[]
for _, path in ipairs(paths) do
local lines = Snacks.picker.util.lines(path)
for l, line in ipairs(lines) do
local from, to = re:match_str(line)
if from then
ret[#ret + 1] = {
file = path,
line = line,
text = line,
pos = { l, from },
end_pos = { l, to },
}
end
end
end
return ret
end
return M