mirror of
https://github.com/nvim-treesitter/nvim-treesitter.git
synced 2026-07-01 19:17:02 -04:00
100 lines
2.4 KiB
Lua
100 lines
2.4 KiB
Lua
local echo = vim.api.nvim_echo
|
|
|
|
-- TODO(lewis6991): write these out to a file
|
|
local messages = {} --- @type {[1]: string, [2]: string?, [3]: string}[]
|
|
|
|
local sev_to_hl = {
|
|
trace = 'DiagnosticHint',
|
|
debug = 'Normal',
|
|
info = 'MoreMsg',
|
|
warn = 'WarningMsg',
|
|
error = 'ErrorMsg',
|
|
}
|
|
|
|
---@param ctx string?
|
|
---@return string
|
|
local function mkpfx(ctx)
|
|
return ctx and string.format('[nvim-treesitter/%s]', ctx) or '[nvim-treesitter]'
|
|
end
|
|
|
|
---@class TSLogModule
|
|
---@field trace fun(fmt: string, ...: any)
|
|
---@field debug fun(fmt: string, ...: any)
|
|
---@field info fun(fmt: string, ...: any)
|
|
---@field warn fun(fmt: string, ...: any)
|
|
---@field error fun(fmt: string, ...: any)
|
|
local M = {}
|
|
|
|
---@class Logger
|
|
---@field ctx? string
|
|
local Logger = {}
|
|
|
|
M.Logger = Logger
|
|
|
|
---@param ctx? string
|
|
---@return Logger
|
|
function M.new(ctx)
|
|
return setmetatable({ ctx = ctx }, { __index = Logger })
|
|
end
|
|
|
|
---@param m string
|
|
---@param ... any
|
|
function Logger:trace(m, ...)
|
|
messages[#messages + 1] = { 'trace', self.ctx, m:format(...) }
|
|
end
|
|
|
|
---@param m string
|
|
---@param ... any
|
|
function Logger:debug(m, ...)
|
|
messages[#messages + 1] = { 'debug', self.ctx, m:format(...) }
|
|
end
|
|
|
|
---@param m string
|
|
---@param ... any
|
|
function Logger:info(m, ...)
|
|
local m1 = m:format(...)
|
|
messages[#messages + 1] = { 'info', self.ctx, m1 }
|
|
echo({ { mkpfx(self.ctx) .. ': ' .. m1, sev_to_hl.info } }, true, {})
|
|
end
|
|
|
|
---@param m string
|
|
---@param ... any
|
|
function Logger:warn(m, ...)
|
|
local m1 = m:format(...)
|
|
messages[#messages + 1] = { 'warn', self.ctx, m1 }
|
|
echo({ { mkpfx(self.ctx) .. ' warning: ' .. m1, sev_to_hl.warn } }, true, {})
|
|
end
|
|
|
|
---@param m string
|
|
---@param ... any
|
|
---@return string
|
|
function Logger:error(m, ...)
|
|
local m1 = m:format(...)
|
|
messages[#messages + 1] = { 'error', self.ctx, m1 }
|
|
echo({ { mkpfx(self.ctx) .. ' error: ' .. m1, sev_to_hl.error } }, true, {})
|
|
return m1
|
|
end
|
|
|
|
local noctx_logger = M.new()
|
|
|
|
setmetatable(M, {
|
|
__index = function(t, k)
|
|
--- @diagnostic disable-next-line:no-unknown
|
|
t[k] = function(...)
|
|
return noctx_logger[k](noctx_logger, ...)
|
|
end
|
|
return t[k]
|
|
end,
|
|
})
|
|
|
|
function M.show()
|
|
for _, l in ipairs(messages) do
|
|
local sev, ctx, msg = l[1], l[2], l[3]
|
|
local hl = sev_to_hl[sev]
|
|
local text = ctx and string.format('%s(%s): %s', sev, ctx, msg)
|
|
or string.format('%s: %s', sev, msg)
|
|
echo({ { text, hl } }, false, {})
|
|
end
|
|
end
|
|
|
|
return M
|