|
1 | | -local n_ok, notify = pcall(require, "notify") |
2 | | -if n_ok then |
3 | | - vim.notify = notify |
4 | | -end |
5 | | - |
6 | 1 | local config = require("leetcode.config") |
7 | | -local t = require("leetcode.translator") |
8 | 2 | local lvls = vim.log.levels |
9 | 3 |
|
10 | | ----@class lc.Logger |
| 4 | +---@class leet.Logger |
| 5 | +---@field trace fun(...) |
| 6 | +---@field debug fun(...) |
| 7 | +---@field info fun(...) |
| 8 | +---@field warn fun(...) |
| 9 | +---@field error fun(...) |
| 10 | +---@field off fun(...) |
11 | 11 | local logger = {} |
12 | 12 |
|
13 | 13 | local function normalize(msg) |
14 | | - return type(msg) == "string" and t(msg) or vim.inspect(msg) |
| 14 | + if type(msg) == "string" then |
| 15 | + return msg |
| 16 | + else |
| 17 | + return vim.inspect(msg, { depth = 3 }) |
| 18 | + end |
15 | 19 | end |
16 | 20 |
|
17 | | --- ---@private |
18 | | --- ---@param msg any |
19 | | --- ---@param lvl? integer |
20 | | --- ---@return any |
21 | | --- logger.log = vim.schedule_wrap(function(msg, lvl) |
22 | | --- end) |
23 | | - |
24 | | -function logger.log(msg, lvl) |
25 | | - if not config.user.logging then |
| 21 | +---@private |
| 22 | +---@param lvl number |
| 23 | +---@param ... any |
| 24 | +function logger.log(lvl, ...) |
| 25 | + if not config.debug and (lvl == lvls.DEBUG or lvl == lvls.TRACE) then |
26 | 26 | return |
27 | 27 | end |
28 | 28 |
|
29 | | - local title = config.name |
30 | | - lvl = lvl or lvls.INFO |
31 | | - msg = normalize(msg) |
32 | | - |
33 | | - if lvl == lvls.DEBUG then |
34 | | - msg = debug.traceback(msg .. "\n") |
35 | | - end |
36 | | - |
37 | | - vim.notify(msg, lvl, { title = title }) |
38 | | -end |
39 | | - |
40 | | ----@param msg any |
41 | | -logger.info = function(msg) |
42 | | - logger.log(msg) |
43 | | -end |
44 | | - |
45 | | ----@param msg any |
46 | | -logger.warn = function(msg) |
47 | | - logger.log(msg, lvls.WARN) |
48 | | -end |
49 | | - |
50 | | ----@param msg any |
51 | | -logger.error = function(msg) |
52 | | - logger.log(msg, lvls.ERROR) |
53 | | - logger.debug(msg) |
| 29 | + local msg = table.concat(vim.tbl_map(normalize, { ... }), " ") |
| 30 | + vim.notify(msg, lvl, { |
| 31 | + title = config.name, |
| 32 | + on_open = function(win) |
| 33 | + local buf = vim.api.nvim_win_get_buf(win) |
| 34 | + vim.api.nvim_set_option_value("filetype", "markdown", { buf = buf }) |
| 35 | + vim.api.nvim_set_option_value("spell", false, { win = win }) |
| 36 | + end, |
| 37 | + }) |
54 | 38 | end |
55 | 39 |
|
56 | 40 | ---@param err lc.err |
57 | 41 | logger.err = function(err) |
58 | | - if not err then |
59 | | - return logger.error("error") |
| 42 | + if not err or not err.msg then |
| 43 | + return logger.error("unknown error") |
60 | 44 | end |
61 | 45 |
|
62 | | - local msg = err.msg or "" |
63 | | - local lvl = err.lvl or lvls.ERROR |
64 | | - |
65 | | - logger.log(msg, lvl) |
66 | | -end |
67 | | - |
68 | | ----@param msg any |
69 | | ----@param show? boolean |
70 | | ----@return any |
71 | | -logger.debug = function(msg, show) |
72 | | - if not config.debug then |
73 | | - return msg |
74 | | - end |
75 | | - |
76 | | - local lvl = (show == nil or not show) and lvls.DEBUG or lvls.ERROR |
77 | | - logger.log(msg, lvl) |
78 | | - |
79 | | - return msg |
80 | | -end |
81 | | - |
82 | | -return logger |
| 46 | + logger.error(err.msg) |
| 47 | +end |
| 48 | + |
| 49 | +return setmetatable(logger, { |
| 50 | + __index = function(_, key) |
| 51 | + return function(...) |
| 52 | + local lvl = lvls[key:upper()] |
| 53 | + if lvl then |
| 54 | + return logger.log(lvl, ...) |
| 55 | + else |
| 56 | + return logger.error("Invalid log level:", key) |
| 57 | + end |
| 58 | + end |
| 59 | + end, |
| 60 | +}) |
0 commit comments