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 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 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 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