mirror of
				https://github.com/folke/lazy.nvim.git
				synced 2025-10-31 14:31:04 +00:00 
			
		
		
		
	feat: keep track what loaded a plugin
This commit is contained in:
		
					parent
					
						
							
								e59dc377d5
							
						
					
				
			
			
				commit
				
					
						4df73f167d
					
				
			
		
					 2 changed files with 35 additions and 11 deletions
				
			
		|  | @ -15,6 +15,8 @@ M.types = { | |||
| 
 | ||||
| ---@type table<LoaderType, table<string, string[]>>|{init: string[]} | ||||
| M.loaders = nil | ||||
| ---@type LazyPlugin[] | ||||
| M.loading = {} | ||||
| 
 | ||||
| ---@param plugin LazyPlugin | ||||
| function M.add(plugin) | ||||
|  | @ -59,7 +61,7 @@ function M.setup() | |||
|   Util.track("loader_events") | ||||
|   for event, plugins in pairs(M.loaders.event) do | ||||
|     if event == "VimEnter" and vim.v.vim_did_enter == 1 then | ||||
|       M.load(plugins) | ||||
|       M.load(plugins, { event = event }) | ||||
|     else | ||||
|       local user_event = event:match("User (.*)") | ||||
|       vim.api.nvim_create_autocmd(user_event and "User" or event, { | ||||
|  | @ -68,7 +70,7 @@ function M.setup() | |||
|         pattern = user_event, | ||||
|         callback = function() | ||||
|           Util.track("event: " .. (user_event or event)) | ||||
|           M.load(plugins) | ||||
|           M.load(plugins, { event = event }) | ||||
|           Util.track() | ||||
|         end, | ||||
|       }) | ||||
|  | @ -85,7 +87,7 @@ function M.setup() | |||
|       group = group, | ||||
|       callback = function() | ||||
|         Util.track("filetype: " .. ft) | ||||
|         M.load(plugins) | ||||
|         M.load(plugins, { ft = ft }) | ||||
|         Util.track() | ||||
|       end, | ||||
|     }) | ||||
|  | @ -98,7 +100,7 @@ function M.setup() | |||
|     vim.keymap.set("n", keys, function() | ||||
|       vim.keymap.del("n", keys) | ||||
|       Util.track("keys: " .. keys) | ||||
|       M.load(plugins) | ||||
|       M.load(plugins, { keys = keys }) | ||||
|       vim.api.nvim_input(keys) | ||||
|       Util.track() | ||||
|     end) | ||||
|  | @ -140,7 +142,7 @@ function M.init_plugins() | |||
|       Util.track() | ||||
|     end | ||||
|     if plugin.opt == false then | ||||
|       M.load(plugin) | ||||
|       M.load(plugin, { package = "start" }) | ||||
|     end | ||||
|   end | ||||
|   Util.track() | ||||
|  | @ -154,7 +156,21 @@ function M.module(modname) | |||
|     local name = modname:sub(1, idx - 1) | ||||
|     local plugins = M.loaders.module[name] | ||||
|     if plugins then | ||||
|       M.load(plugins) | ||||
|       local reason = { require = modname } | ||||
|       if #M.loading == 0 then | ||||
|         local f = 3 | ||||
|         while not reason.source do | ||||
|           local info = debug.getinfo(f, "S") | ||||
|           f = f + 1 | ||||
|           if not info then | ||||
|             break | ||||
|           end | ||||
|           if info.what ~= "C" then | ||||
|             reason.source = info.source:sub(2) | ||||
|           end | ||||
|         end | ||||
|       end | ||||
|       M.load(plugins, reason) | ||||
|       -- M.loaders.module[name] = nil | ||||
|     end | ||||
|     idx = modname:find(".", idx + 1, true) | ||||
|  | @ -170,7 +186,8 @@ function M.module(modname) | |||
| end | ||||
| 
 | ||||
| ---@param plugins string|LazyPlugin|string[]|LazyPlugin[] | ||||
| function M.load(plugins) | ||||
| ---@param reason {[string]:string} | ||||
| function M.load(plugins, reason) | ||||
|   if type(plugins) == "string" or plugins.name then | ||||
|     ---@diagnostic disable-next-line: assign-type-mismatch | ||||
|     plugins = { plugins } | ||||
|  | @ -183,20 +200,26 @@ function M.load(plugins) | |||
|     end | ||||
| 
 | ||||
|     if not plugin.loaded then | ||||
|       plugin.loaded = true | ||||
|       plugin.loaded = vim.deepcopy(reason or {}) | ||||
|       if #M.loading > 0 then | ||||
|         plugin.loaded.plugin = M.loading[#M.loading].name | ||||
|       end | ||||
| 
 | ||||
|       table.insert(M.loading, plugin) | ||||
| 
 | ||||
|       Util.track(plugin.name) | ||||
|       M.packadd(plugin) | ||||
| 
 | ||||
|       if plugin.requires then | ||||
|         M.load(plugin.requires) | ||||
|         M.load(plugin.requires, {}) | ||||
|       end | ||||
| 
 | ||||
|       if plugin.config then | ||||
|         plugin.config() | ||||
|       end | ||||
| 
 | ||||
|       Util.track() | ||||
|       plugin.loaded.time = Util.track().time | ||||
|       table.remove(M.loading) | ||||
|       vim.schedule(function() | ||||
|         vim.cmd("do User LazyRender") | ||||
|       end) | ||||
|  |  | |||
|  | @ -21,11 +21,12 @@ local M = {} | |||
| ---@field module? string|string[] | ||||
| ---@field keys? string|string[] | ||||
| ---@field requires? string[] | ||||
| ---@field loaded? boolean | ||||
| ---@field loaded? {[string]:string, time:number} | ||||
| ---@field installed? boolean | ||||
| ---@field run? string|fun() | ||||
| ---@field tasks? LazyTask[] | ||||
| ---@field dirty? boolean | ||||
| ---@field updated? {from:string, to:string} | ||||
| 
 | ||||
| ---@param plugin LazyPlugin | ||||
| function M.plugin(plugin) | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue