| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 | 
							- local M = {}
 
- local api = vim.api
 
- function M.print_profile(profile)
 
-   if not profile then
 
-     print "Error: profiling was not enabled"
 
-     return
 
-   end
 
-   local total_resolve = 0
 
-   local total_load = 0
 
-   local name_pad = 0
 
-   local modules = {}
 
-   local plugins = {}
 
-   for module, p in pairs(profile) do
 
-     p.resolve = p.resolve / 1000000
 
-     p.load = p.load / 1000000
 
-     p.total = p.resolve + p.load
 
-     p.module = module:gsub("/", ".")
 
-     local plugin = p.module:match "([^.]+)"
 
-     if plugin then
 
-       if not plugins[plugin] then
 
-         plugins[plugin] = {
 
-           module = plugin,
 
-           resolve = 0,
 
-           load = 0,
 
-           total = 0,
 
-         }
 
-       end
 
-       local r = plugins[plugin]
 
-       r.resolve = r.resolve + p.resolve
 
-       r.load = r.load + p.load
 
-       r.total = r.total + p.total
 
-       if not r.loader then
 
-         r.loader = p.loader
 
-       elseif r.loader ~= p.loader then
 
-         r.loader = "mixed"
 
-       end
 
-     end
 
-     total_resolve = total_resolve + p.resolve
 
-     total_load = total_load + p.load
 
-     if #module > name_pad then
 
-       name_pad = #module
 
-     end
 
-     modules[#modules + 1] = p
 
-   end
 
-   table.sort(modules, function(a, b)
 
-     return a.module > b.module
 
-   end)
 
-   do
 
-     local plugins_a = {}
 
-     for _, v in pairs(plugins) do
 
-       plugins_a[#plugins_a + 1] = v
 
-     end
 
-     plugins = plugins_a
 
-   end
 
-   table.sort(plugins, function(a, b)
 
-     return a.total > b.total
 
-   end)
 
-   local lines = {}
 
-   local function add(...)
 
-     lines[#lines + 1] = string.format(...)
 
-   end
 
-   local l = string.rep("─", name_pad + 1)
 
-   add(
 
-     "%s┬───────────┬────────────┬────────────┬────────────┐",
 
-     l
 
-   )
 
-   add("%-" .. name_pad .. "s │ Loader    │ Resolve    │ Load       │ Total      │", "")
 
-   add(
 
-     "%s┼───────────┼────────────┼────────────┼────────────┤",
 
-     l
 
-   )
 
-   add(
 
-     "%-" .. name_pad .. "s │           │ %8.4fms │ %8.4fms │ %8.4fms │",
 
-     "Total",
 
-     total_resolve,
 
-     total_load,
 
-     total_resolve + total_load
 
-   )
 
-   add(
 
-     "%s┴───────────┴────────────┴────────────┴────────────┤",
 
-     l
 
-   )
 
-   add("%-" .. name_pad .. "s                                                    │", "By Plugin")
 
-   add(
 
-     "%s┬───────────┬────────────┬────────────┬────────────┤",
 
-     l
 
-   )
 
-   for _, p in ipairs(plugins) do
 
-     add(
 
-       "%-" .. name_pad .. "s │ %9s │ %8.4fms │ %8.4fms │ %8.4fms │",
 
-       p.module,
 
-       p.loader,
 
-       p.resolve,
 
-       p.load,
 
-       p.total
 
-     )
 
-   end
 
-   add(
 
-     "%s┴───────────┴────────────┴────────────┴────────────┤",
 
-     l
 
-   )
 
-   add("%-" .. name_pad .. "s                                                    │", "By Module")
 
-   add(
 
-     "%s┬───────────┬────────────┬────────────┬────────────┤",
 
-     l
 
-   )
 
-   for _, p in pairs(modules) do
 
-     add(
 
-       "%-" .. name_pad .. "s │ %9s │ %8.4fms │ %8.4fms │ %8.4fms │",
 
-       p.module,
 
-       p.loader,
 
-       p.resolve,
 
-       p.load,
 
-       p.total
 
-     )
 
-   end
 
-   add(
 
-     "%s┴───────────┴────────────┴────────────┴────────────┘",
 
-     l
 
-   )
 
-   local bufnr = api.nvim_create_buf(false, false)
 
-   api.nvim_buf_set_lines(bufnr, 0, 0, false, lines)
 
-   api.nvim_buf_set_option(bufnr, "buftype", "nofile")
 
-   api.nvim_buf_set_name(bufnr, "Impatient Profile Report")
 
-   api.nvim_set_current_buf(bufnr)
 
- end
 
- return M
 
 
  |