Some checks failed
NeoVim tests / code-quality (push) Failing after 1m17s
For text changes, we want to fire for any tag that the cursor is adjacent to.
74 lines
2.0 KiB
Lua
74 lines
2.0 KiB
Lua
local M = {}
|
|
|
|
local LOG_ROOT = vim.fs.joinpath(vim.fn.stdpath 'cache', 'u.log')
|
|
|
|
--- @params name string
|
|
function M.file_for_name(name) return vim.fs.joinpath(LOG_ROOT, name .. '.log.jsonl') end
|
|
|
|
--------------------------------------------------------------------------------
|
|
-- Logger class
|
|
--------------------------------------------------------------------------------
|
|
|
|
--- @class u.Logger
|
|
--- @field name string
|
|
local Logger = {}
|
|
Logger.__index = Logger
|
|
M.Logger = Logger
|
|
|
|
--- @param name string
|
|
function Logger.new(name)
|
|
local file_path = M.file_for_name(name)
|
|
vim.fn.mkdir(vim.fs.dirname(file_path), 'p')
|
|
local self = setmetatable({ name = name }, Logger)
|
|
return self
|
|
end
|
|
|
|
--- @private
|
|
--- @param level string
|
|
function Logger:write(level, ...)
|
|
local data = { ... }
|
|
if #data == 1 then data = data[1] end
|
|
local f = assert(io.open(M.file_for_name(self.name), 'a'), 'could not open file')
|
|
assert(
|
|
f:write(vim.json.encode { ts = os.date(), level = level, data = data } .. '\n'),
|
|
'could not write to file'
|
|
)
|
|
f:close()
|
|
end
|
|
|
|
function Logger:trace(...) self:write('INFO', ...) end
|
|
function Logger:debug(...) self:write('DEBUG', ...) end
|
|
function Logger:info(...) self:write('INFO', ...) end
|
|
function Logger:warn(...) self:write('WARN', ...) end
|
|
function Logger:error(...) self:write('ERROR', ...) end
|
|
|
|
function M.setup()
|
|
vim.api.nvim_create_user_command('Logfollow', function(args)
|
|
if #args.fargs == 0 then
|
|
vim.print 'expected log name'
|
|
return
|
|
end
|
|
|
|
local log_file_path = M.file_for_name(args.fargs[1])
|
|
vim.fn.mkdir(vim.fs.dirname(log_file_path), 'p')
|
|
vim.system({ 'touch', log_file_path }):wait()
|
|
|
|
vim.cmd.new()
|
|
|
|
local winnr = vim.api.nvim_get_current_win()
|
|
vim.wo[winnr][0].number = false
|
|
vim.wo[winnr][0].relativenumber = false
|
|
|
|
vim.cmd.terminal('tail -f "' .. log_file_path .. '"')
|
|
vim.cmd.startinsert()
|
|
end, { nargs = '*' })
|
|
|
|
vim.api.nvim_create_user_command(
|
|
'Logroot',
|
|
function() vim.api.nvim_echo({ { LOG_ROOT } }, false, {}) end,
|
|
{}
|
|
)
|
|
end
|
|
|
|
return M
|