control profiling with NVIM_PROFILE env variable or F1 key
This commit is contained in:
parent
e317dca789
commit
37309c0edd
6 changed files with 627 additions and 4 deletions
83
lua/profile/util.lua
Normal file
83
lua/profile/util.lua
Normal file
|
@ -0,0 +1,83 @@
|
|||
local M = {}
|
||||
|
||||
local MAX_ARG_LEN = 200
|
||||
local tbl_isarray = vim.isarray or vim.tbl_isarray or vim.tbl_islist
|
||||
local pack_len = vim.F.pack_len
|
||||
local split = vim.split
|
||||
|
||||
---@param glob string
|
||||
---@return string
|
||||
M.path_glob_to_regex = function(glob)
|
||||
local pattern = string.gsub(glob, "%.", "[%./]")
|
||||
pattern = string.gsub(pattern, "*", ".*")
|
||||
return "^" .. pattern .. "$"
|
||||
end
|
||||
|
||||
---@param name string
|
||||
---@return string
|
||||
M.normalize_module_name = function(name)
|
||||
local ret = string.gsub(name, "/", ".")
|
||||
return ret
|
||||
end
|
||||
|
||||
---@param haystack string
|
||||
---@param prefix string
|
||||
---@return boolean
|
||||
M.startswith = function(haystack, prefix)
|
||||
return string.find(haystack, prefix) == 1
|
||||
end
|
||||
|
||||
---@param path string
|
||||
---@return string module
|
||||
---@return string tail
|
||||
M.split_path = function(path)
|
||||
local pieces = split(path, ".", { plain = true })
|
||||
if #pieces == 1 then
|
||||
return "_G", path
|
||||
end
|
||||
local mod = table.concat(pack_len(unpack(pieces, 1, #pieces - 1)), ".")
|
||||
return mod, pieces[#pieces]
|
||||
end
|
||||
|
||||
local function sanitize(table)
|
||||
local clean = {}
|
||||
local iterfn
|
||||
if tbl_isarray(table) then
|
||||
iterfn = ipairs
|
||||
else
|
||||
iterfn = pairs
|
||||
end
|
||||
for i, v in iterfn(table) do
|
||||
local t = type(v)
|
||||
if t == "string" then
|
||||
if string.len(v) > MAX_ARG_LEN then
|
||||
clean[tostring(i)] = string.sub(v, 1, MAX_ARG_LEN - 3) .. "..."
|
||||
else
|
||||
clean[tostring(i)] = v
|
||||
end
|
||||
elseif t == "nil" or t == "boolean" or t == "number" then
|
||||
clean[tostring(i)] = v
|
||||
end
|
||||
end
|
||||
-- If no args, then return nil
|
||||
if next(clean) == nil then
|
||||
return nil
|
||||
else
|
||||
return clean
|
||||
end
|
||||
end
|
||||
|
||||
---@param ... any[]
|
||||
---@return any
|
||||
M.format_args = function(...)
|
||||
local args = pack_len(...)
|
||||
if args.n == 0 then
|
||||
return nil
|
||||
elseif args.n == 1 and type(args[1]) == "table" then
|
||||
return sanitize(args[1])
|
||||
else
|
||||
return sanitize(args)
|
||||
end
|
||||
end
|
||||
|
||||
return M
|
Loading…
Add table
Add a link
Reference in a new issue