Initial commit
This commit is contained in:
46
lua/cave/log/class_logger.lua
Normal file
46
lua/cave/log/class_logger.lua
Normal file
@@ -0,0 +1,46 @@
|
||||
local Logger = require "cave.log.logger"
|
||||
local FunctionLogger = require "cave.log.function_logger"
|
||||
local Meta = require "cave.meta"
|
||||
|
||||
local validate = Meta.validate
|
||||
local Table = Meta.Table
|
||||
|
||||
---@class cave.ClassLogger : cave.Logger
|
||||
local ClassLogger = Meta.derive("ClassLogger", Logger)
|
||||
|
||||
---@param cls_name string
|
||||
function ClassLogger:init(cls_name)
|
||||
local prefix = cls_name
|
||||
Logger.init(self, prefix)
|
||||
end
|
||||
|
||||
---@param cls_mt table
|
||||
---@return cave.ClassLogger
|
||||
function ClassLogger.new(cls_mt)
|
||||
validate { cls_mt = { cls_mt, Table } }
|
||||
local cls_name = Meta.like(cls_mt).repr
|
||||
local logger = setmetatable({}, ClassLogger)
|
||||
logger:init(cls_name)
|
||||
return logger
|
||||
end
|
||||
|
||||
---@param args_fmt string?
|
||||
---@param ... any
|
||||
---@return cave.FunctionLogger
|
||||
function ClassLogger:call(args_fmt, ...)
|
||||
local dbg_info
|
||||
local fn_name
|
||||
for l = 2, 1, -1 do
|
||||
dbg_info = debug.getinfo(l, "n")
|
||||
fn_name = dbg_info.name
|
||||
if fn_name then break end
|
||||
end
|
||||
if dbg_info.namewhat == "method" then
|
||||
fn_name = self.prefix .. ":" .. fn_name
|
||||
elseif dbg_info.namewhat == "field" then
|
||||
fn_name = self.prefix .. "." .. fn_name
|
||||
end
|
||||
return FunctionLogger.new(fn_name, args_fmt, ...):call()
|
||||
end
|
||||
|
||||
return ClassLogger
|
||||
65
lua/cave/log/function_logger.lua
Normal file
65
lua/cave/log/function_logger.lua
Normal file
@@ -0,0 +1,65 @@
|
||||
local Log = require "cave.log"
|
||||
local Meta = require "cave.meta"
|
||||
|
||||
local Str = Meta.String
|
||||
local validate = Meta.validate
|
||||
local Optional = Meta.Optional
|
||||
|
||||
---@class cave.FunctionLogger
|
||||
---@field fn_repr string
|
||||
local FunctionLogger = Meta.derive "FuncLogger"
|
||||
|
||||
---@param fn_name string
|
||||
---@param args_fmt string?
|
||||
---@param ... any
|
||||
function FunctionLogger:init(fn_name, args_fmt, ...)
|
||||
local args_repr = (args_fmt and args_fmt:format(...)) or ""
|
||||
self.fn_repr = ("%s(%s)"):format(fn_name, args_repr)
|
||||
end
|
||||
|
||||
---@param fn_name string
|
||||
---@param args_fmt string?
|
||||
---@param ... any
|
||||
---@return cave.FunctionLogger
|
||||
function FunctionLogger.new(fn_name, args_fmt, ...)
|
||||
validate { fn_name = { fn_name, Str }, args_fmt = { args_fmt, Optional(Str) } }
|
||||
local logger = setmetatable({}, FunctionLogger)
|
||||
logger:init(fn_name, args_fmt, ...)
|
||||
return logger
|
||||
end
|
||||
|
||||
---@return cave.FunctionLogger
|
||||
function FunctionLogger:call()
|
||||
Log.dbg("> %s", self.fn_repr)
|
||||
return self
|
||||
end
|
||||
|
||||
---@param err_fmt string?
|
||||
---@param ... any
|
||||
function FunctionLogger:err(err_fmt, ...)
|
||||
validate { err = { err_fmt, Optional(Str) } }
|
||||
local res_msg = "err"
|
||||
if err_fmt ~= nil then res_msg = res_msg .. " " .. err_fmt:format(...) end
|
||||
Log.err(("< %s - %s"):format(self.fn_repr, res_msg))
|
||||
end
|
||||
|
||||
--
|
||||
---@param warn_fmt string?
|
||||
---@param ... any
|
||||
function FunctionLogger:warn(warn_fmt, ...)
|
||||
validate { err = { warn_fmt, Optional(Str) } }
|
||||
local res_msg = "warn"
|
||||
if warn_fmt ~= nil then res_msg = res_msg .. " " .. warn_fmt:format(...) end
|
||||
Log.err(("~ %s - %s"):format(self.fn_repr, res_msg))
|
||||
end
|
||||
|
||||
---@param res_fmt string?
|
||||
---@param ... any
|
||||
function FunctionLogger:ok(res_fmt, ...)
|
||||
validate { results = { res_fmt, Optional(Str) } }
|
||||
local res_msg = "ok"
|
||||
if res_fmt ~= nil then res_msg = res_msg .. " " .. res_fmt:format(...) end
|
||||
Log.dbg(("< %s - %s"):format(self.fn_repr, res_msg))
|
||||
end
|
||||
|
||||
return FunctionLogger
|
||||
25
lua/cave/log/init.lua
Normal file
25
lua/cave/log/init.lua
Normal file
@@ -0,0 +1,25 @@
|
||||
---@class cave.Log
|
||||
local Log = {}
|
||||
|
||||
---@param msg string
|
||||
---@param level integer
|
||||
---@param ...? any
|
||||
local function notify(msg, level, ...) vim.notify(msg:format(...), level, { title = "cave.nvim" }) end
|
||||
|
||||
---@param msg string
|
||||
---@param ...? any
|
||||
function Log.dbg(msg, ...) notify(msg, vim.log.levels.DEBUG, ...) end
|
||||
|
||||
---@param msg string
|
||||
---@param ...? any
|
||||
function Log.err(msg, ...) notify(msg, vim.log.levels.ERROR, ...) end
|
||||
|
||||
---@param msg string
|
||||
---@param ...? any
|
||||
function Log.inf(msg, ...) notify(msg, vim.log.levels.INFO, ...) end
|
||||
|
||||
---@param msg string
|
||||
---@param ...? any
|
||||
function Log.warn(msg, ...) notify(msg, vim.log.levels.WARN, ...) end
|
||||
|
||||
return Log
|
||||
39
lua/cave/log/logger.lua
Normal file
39
lua/cave/log/logger.lua
Normal file
@@ -0,0 +1,39 @@
|
||||
local Log = require "cave.log"
|
||||
local Meta = require "cave.meta"
|
||||
|
||||
local validate = Meta.validate
|
||||
local Str = Meta.String
|
||||
|
||||
---@class cave.Logger
|
||||
---@field prefix string
|
||||
local Logger = Meta.derive "Logger"
|
||||
|
||||
---@param prefix string
|
||||
function Logger:init(prefix) self.prefix = prefix end
|
||||
|
||||
---@param prefix string
|
||||
---@return cave.Logger
|
||||
function Logger.new(prefix)
|
||||
validate { prefix = { prefix, Str } }
|
||||
local logger = setmetatable({}, Logger)
|
||||
logger:init(prefix)
|
||||
return logger
|
||||
end
|
||||
|
||||
---@param msg string
|
||||
---@param ...? any
|
||||
function Logger:dbg(msg, ...) Log.dbg(self.prefix .. msg, ...) end
|
||||
|
||||
---@param msg string
|
||||
---@param ...? any
|
||||
function Logger:err(msg, ...) Log.err(self.prefix .. msg, ...) end
|
||||
|
||||
---@param msg string
|
||||
---@param ...? any
|
||||
function Logger:inf(msg, ...) Log.inf(self.prefix .. msg, ...) end
|
||||
|
||||
---@param msg string
|
||||
---@param ...? any
|
||||
function Logger:warn(msg, ...) Log.warn(self.prefix .. msg, ...) end
|
||||
|
||||
return Logger
|
||||
Reference in New Issue
Block a user