157 lines
4.7 KiB
Lua
157 lines
4.7 KiB
Lua
|
local Plugin = require("lazy.core.plugin")
|
||
|
local Util = require("lazyvim.util")
|
||
|
|
||
|
---@class lazyvim.util.plugin
|
||
|
local M = {}
|
||
|
|
||
|
M.use_lazy_file = true
|
||
|
M.lazy_file_events = { "BufReadPost", "BufNewFile", "BufWritePre" }
|
||
|
|
||
|
---@type table<string, string>
|
||
|
M.deprecated_extras = {
|
||
|
["lazyvim.plugins.extras.formatting.conform"] = "`conform.nvim` is now the default **LazyVim** formatter.",
|
||
|
["lazyvim.plugins.extras.linting.nvim-lint"] = "`nvim-lint` is now the default **LazyVim** linter.",
|
||
|
["lazyvim.plugins.extras.ui.dashboard"] = "`dashboard.nvim` is now the default **LazyVim** starter.",
|
||
|
}
|
||
|
|
||
|
M.deprecated_modules = {
|
||
|
["null-ls"] = "lsp.none-ls",
|
||
|
["nvim-navic.lib"] = "editor.navic",
|
||
|
["nvim-navic"] = "editor.navic",
|
||
|
}
|
||
|
|
||
|
---@type table<string, string>
|
||
|
M.renames = {
|
||
|
["windwp/nvim-spectre"] = "nvim-pack/nvim-spectre",
|
||
|
["jose-elias-alvarez/null-ls.nvim"] = "nvimtools/none-ls.nvim",
|
||
|
["null-ls.nvim"] = "none-ls.nvim",
|
||
|
["romgrk/nvim-treesitter-context"] = "nvim-treesitter/nvim-treesitter-context",
|
||
|
["glepnir/dashboard-nvim"] = "nvimdev/dashboard-nvim",
|
||
|
}
|
||
|
|
||
|
function M.setup()
|
||
|
M.fix_imports()
|
||
|
M.fix_renames()
|
||
|
M.lazy_file()
|
||
|
table.insert(package.loaders, function(module)
|
||
|
if M.deprecated_modules[module] then
|
||
|
Util.warn(
|
||
|
("`%s` is no longer included by default in **LazyVim**.\nPlease install the `%s` extra if you still want to use it."):format(
|
||
|
module,
|
||
|
M.deprecated_modules[module]
|
||
|
),
|
||
|
{ title = "LazyVim" }
|
||
|
)
|
||
|
return function() end
|
||
|
end
|
||
|
end)
|
||
|
end
|
||
|
|
||
|
function M.extra_idx(name)
|
||
|
local Config = require("lazy.core.config")
|
||
|
for i, extra in ipairs(Config.spec.modules) do
|
||
|
if extra == "lazyvim.plugins.extras." .. name then
|
||
|
return i
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
-- Properly load file based plugins without blocking the UI
|
||
|
function M.lazy_file()
|
||
|
M.use_lazy_file = M.use_lazy_file and vim.fn.argc(-1) > 0
|
||
|
|
||
|
-- Add support for the LazyFile event
|
||
|
local Event = require("lazy.core.handler.event")
|
||
|
|
||
|
if M.use_lazy_file then
|
||
|
-- We'll handle delayed execution of events ourselves
|
||
|
Event.mappings.LazyFile = { id = "LazyFile", event = "User", pattern = "LazyFile" }
|
||
|
Event.mappings["User LazyFile"] = Event.mappings.LazyFile
|
||
|
else
|
||
|
-- Don't delay execution of LazyFile events, but let lazy know about the mapping
|
||
|
Event.mappings.LazyFile = { id = "LazyFile", event = { "BufReadPost", "BufNewFile", "BufWritePre" } }
|
||
|
Event.mappings["User LazyFile"] = Event.mappings.LazyFile
|
||
|
return
|
||
|
end
|
||
|
|
||
|
local events = {} ---@type {event: string, buf: number, data?: any}[]
|
||
|
|
||
|
local done = false
|
||
|
local function load()
|
||
|
if #events == 0 or done then
|
||
|
return
|
||
|
end
|
||
|
done = true
|
||
|
vim.api.nvim_del_augroup_by_name("lazy_file")
|
||
|
|
||
|
---@type table<string,string[]>
|
||
|
local skips = {}
|
||
|
for _, event in ipairs(events) do
|
||
|
skips[event.event] = skips[event.event] or Event.get_augroups(event.event)
|
||
|
end
|
||
|
|
||
|
vim.api.nvim_exec_autocmds("User", { pattern = "LazyFile", modeline = false })
|
||
|
for _, event in ipairs(events) do
|
||
|
if vim.api.nvim_buf_is_valid(event.buf) then
|
||
|
Event.trigger({
|
||
|
event = event.event,
|
||
|
exclude = skips[event.event],
|
||
|
data = event.data,
|
||
|
buf = event.buf,
|
||
|
})
|
||
|
if vim.bo[event.buf].filetype then
|
||
|
Event.trigger({
|
||
|
event = "FileType",
|
||
|
buf = event.buf,
|
||
|
})
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
vim.api.nvim_exec_autocmds("CursorMoved", { modeline = false })
|
||
|
events = {}
|
||
|
end
|
||
|
|
||
|
-- schedule wrap so that nested autocmds are executed
|
||
|
-- and the UI can continue rendering without blocking
|
||
|
load = vim.schedule_wrap(load)
|
||
|
|
||
|
vim.api.nvim_create_autocmd(M.lazy_file_events, {
|
||
|
group = vim.api.nvim_create_augroup("lazy_file", { clear = true }),
|
||
|
callback = function(event)
|
||
|
table.insert(events, event)
|
||
|
load()
|
||
|
end,
|
||
|
})
|
||
|
end
|
||
|
|
||
|
function M.fix_imports()
|
||
|
Plugin.Spec.import = Util.inject.args(Plugin.Spec.import, function(_, spec)
|
||
|
local dep = M.deprecated_extras[spec and spec.import]
|
||
|
if dep then
|
||
|
dep = dep .. "\n" .. "Please remove the extra to hide this warning."
|
||
|
Util.warn(dep, { title = "LazyVim", once = true, stacktrace = true, stacklevel = 6 })
|
||
|
return false
|
||
|
end
|
||
|
end)
|
||
|
end
|
||
|
|
||
|
function M.fix_renames()
|
||
|
Plugin.Spec.add = Util.inject.args(Plugin.Spec.add, function(self, plugin)
|
||
|
if type(plugin) == "table" then
|
||
|
if M.renames[plugin[1]] then
|
||
|
Util.warn(
|
||
|
("Plugin `%s` was renamed to `%s`.\nPlease update your config for `%s`"):format(
|
||
|
plugin[1],
|
||
|
M.renames[plugin[1]],
|
||
|
self.importing or "LazyVim"
|
||
|
),
|
||
|
{ title = "LazyVim" }
|
||
|
)
|
||
|
plugin[1] = M.renames[plugin[1]]
|
||
|
end
|
||
|
end
|
||
|
end)
|
||
|
end
|
||
|
|
||
|
return M
|