Skip to content

fix(#1970): additional log function gating for efficiency when not logging #1971

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Feb 5, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions lua/nvim-tree.lua
Original file line number Diff line number Diff line change
Expand Up @@ -880,8 +880,10 @@ function M.setup(conf)
require("nvim-tree.notify").setup(opts)
require("nvim-tree.log").setup(opts)

log.line("config", "default config + user")
log.raw("config", "%s\n", vim.inspect(opts))
if log.enabled "config" then
log.line("config", "default config + user")
log.raw("config", "%s\n", vim.inspect(opts))
end

require("nvim-tree.actions").setup(opts)
require("nvim-tree.keymap").setup(opts)
Expand Down
6 changes: 4 additions & 2 deletions lua/nvim-tree/actions/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -437,8 +437,10 @@ function M.setup(opts)

require("nvim-tree.actions.dispatch").setup(M.custom_keypress_funcs)

log.line("config", "active mappings")
log.raw("config", "%s\n", vim.inspect(M.mappings))
if log.enabled "config" then
log.line("config", "active mappings")
log.raw("config", "%s\n", vim.inspect(M.mappings))
end
end

return M
2 changes: 1 addition & 1 deletion lua/nvim-tree/git/runner.lua
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ function Runner:_getopts(stdout_handle, stderr_handle)
end

function Runner:_log_raw_output(output)
if output and type(output) == "string" then
if log.enabled "git" and output and type(output) == "string" then
log.raw("git", "%s", output)
log.line("git", "done")
end
Expand Down
42 changes: 29 additions & 13 deletions lua/nvim-tree/log.lua
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ local M = {
--- @param fmt string for string.format
--- @vararg any arguments for string.format
function M.raw(typ, fmt, ...)
if not M.path or not M.config.types[typ] and not M.config.types.all then
if not M.enabled(typ) then
return
end

Expand All @@ -21,32 +21,48 @@ function M.raw(typ, fmt, ...)
end
end

--- Write to log file via M.line
--- Write profile start to log file
--- START is prefixed
--- @param fmt string for string.format
--- @vararg any arguments for string.format
--- @return number nanos to pass to profile_end
function M.profile_start(fmt, ...)
if not M.path or not M.config.types.profile and not M.config.types.all then
if M.enabled "profile" then
M.line("profile", "START " .. (fmt or "???"), ...)
return vim.loop.hrtime()
else
return 0
end
M.line("profile", "START " .. (fmt or "???"), ...)
return vim.loop.hrtime()
end

--- Write to log file via M.line
--- Write profile end to log file
--- END is prefixed and duration in seconds is suffixed
--- @param start number nanos returned from profile_start
--- @param fmt string for string.format
--- @vararg any arguments for string.format
function M.profile_end(start, fmt, ...)
if not M.path or not M.config.types.profile and not M.config.types.all then
return
if M.enabled "profile" then
local millis = start and math.modf((vim.loop.hrtime() - start) / 1000000) or -1
M.line("profile", "END " .. (fmt or "???") .. " " .. millis .. "ms", ...)
end
local millis = start and math.modf((vim.loop.hrtime() - start) / 1000000) or -1
M.line("profile", "END " .. (fmt or "???") .. " " .. millis .. "ms", ...)
end

-- Write to log file via M.raw
-- time and typ are prefixed and a trailing newline is added
--- Write to log file
--- time and typ are prefixed and a trailing newline is added
--- @param typ string as per log.types config
--- @param fmt string for string.format
--- @vararg any arguments for string.format
function M.line(typ, fmt, ...)
M.raw(typ, string.format("[%s] [%s] %s\n", os.date "%Y-%m-%d %H:%M:%S", typ, fmt), ...)
if M.enabled(typ) then
M.raw(typ, string.format("[%s] [%s] %s\n", os.date "%Y-%m-%d %H:%M:%S", typ, fmt), ...)
end
end

--- Logging is enabled for typ or all
--- @param typ string as per log.types config
--- @return boolean
function M.enabled(typ)
return M.path ~= nil and (M.config.types[typ] or M.config.types.all)
end

function M.setup(opts)
Expand Down