lazyvim/lua/lazyvim/plugins/xtras.lua
2026-01-14 14:14:41 +08:00

104 lines
3.1 KiB
Lua

-- Some extras need to be loaded before others
local prios = {
["lazyvim.plugins.extras.test.core"] = 1,
["lazyvim.plugins.extras.dap.core"] = 1,
["lazyvim.plugins.extras.coding.nvim-cmp"] = 2,
["lazyvim.plugins.extras.editor.neo-tree"] = 2,
["lazyvim.plugins.extras.ui.edgy"] = 3,
["lazyvim.plugins.extras.ai.copilot-native"] = 4,
["lazyvim.plugins.extras.coding.blink"] = 5,
["lazyvim.plugins.extras.lang.typescript"] = 5,
["lazyvim.plugins.extras.formatting.prettier"] = 10,
["lazyvim.plugins.extras.editor.aerial"] = 100,
["lazyvim.plugins.extras.editor.outline"] = 100,
["lazyvim.plugins.extras.ui.alpha"] = 19,
["lazyvim.plugins.extras.ui.dashboard-nvim"] = 19,
["lazyvim.plugins.extras.ui.mini-starter"] = 19,
}
local default_core_extra_prio = 20
local default_prio = 50
if vim.g.xtras_prios then
prios = vim.tbl_deep_extend("force", prios, vim.g.xtras_prios or {})
end
local extras = {} ---@type string[]
local defaults = LazyVim.config.get_defaults()
local changed = false
local updated = {} ---@type string[]
-- Add extras from LazyExtras that are not disabled
for _, extra in ipairs(LazyVim.config.json.data.extras) do
if LazyVim.plugin.renamed_extras[extra] then
extra = LazyVim.plugin.renamed_extras[extra]
changed = true
end
if LazyVim.plugin.deprecated_extras[extra] then
changed = true
else
updated[#updated + 1] = extra
local def = defaults[extra]
if not (def and def.enabled == false) then
extras[#extras + 1] = extra
end
end
end
if changed then
LazyVim.config.json.data.extras = updated
LazyVim.json.save()
end
-- Add default extras
for name, extra in pairs(defaults) do
if extra.enabled then
prios[name] = prios[name] or default_core_extra_prio
extras[#extras + 1] = name
end
end
-- Add user defined extras via `vim.g.lazyvim_user_extras`
local user_defined_extras = vim.g.lazyvim_user_extras or {}
for k, v in pairs(user_defined_extras) do
local is_atomic_value = type(k) == "number"
local name = is_atomic_value and v or k
local priority = is_atomic_value and default_prio or v
-- Validation logic: Check for existing priority conflict
if prios[name] and prios[name] ~= priority then
local msg = {
"Extras: you are not allowed to override priorities of either core default extras or extras defined in `lazyvim.json`",
string.format("- name of extras: %s", name),
string.format("- existing priority: %d", prios[name]),
string.format("- custom priority: %d", priority),
}
vim.notify(table.concat(msg, "\n"), vim.log.levels.WARN, { title = "LazyVim" })
else
prios[name] = priority
extras[#extras + 1] = name
end
end
---@type string[]
extras = LazyVim.dedup(extras)
LazyVim.plugin.save_core()
if vim.g.vscode then
table.insert(extras, 1, "lazyvim.plugins.extras.vscode")
end
table.sort(extras, function(a, b)
local pa = prios[a] or default_prio
local pb = prios[b] or default_prio
if pa == pb then
return a < b
end
return pa < pb
end)
---@param extra string
return vim.tbl_map(function(extra)
return { import = extra }
end, extras)