Add logging

This commit is contained in:
Raigo Jerva 2021-04-27 20:40:47 +03:00
parent 317e3a0e34
commit 8a4c443145
No known key found for this signature in database
GPG Key ID: 2156679E782853EC
4 changed files with 78 additions and 37 deletions

View File

@ -6,7 +6,25 @@
local M = {}
M.reload = function()
require("plenary.reload").reload_module("harpoon");
require("plenary.reload").reload_module("harpoon")
end
local function set_log_level()
local log_levels = { "trace", "debug", "info", "warning", "error", "fatal" }
local log_level = vim.g.harpoon_log_level
for _, level in pairs(log_levels) do
if level == log_level then
return log_level
end
end
return "warn" -- default, if user hasn't set
end
M.log = require("plenary.log").new({
plugin = "harpoon",
level = set_log_level(),
})
return M

View File

@ -1,7 +1,9 @@
local Path = require("plenary.path")
local utils = require("harpoon.utils")
local log = require("harpoon.dev").log
local config_path = vim.fn.stdpath("config")
local data_path = vim.fn.stdpath("data")
local utils = require("harpoon.utils")
local user_config = string.format("%s/harpoon.json", config_path)
local cache_config = string.format("%s/harpoon.json", data_path)
@ -26,6 +28,7 @@ local M = {}
... high level settings
}
--]]
HarpoonConfig = HarpoonConfig or {}
-- tbl_deep_extend does not work the way you would think
@ -45,7 +48,7 @@ end
local function merge_tables(...)
local out = {}
for i = 1, select("#",...) do
for i = 1, select("#", ...) do
merge_table_impl(out, select(i, ...))
end
return out
@ -54,23 +57,26 @@ end
local function ensure_correct_config(config)
local projects = config.projects
if projects[vim.loop.cwd()] == nil then
log.trace("ensure_correct_config(): No config found for:", vim.loop.cwd())
projects[vim.loop.cwd()] = {
mark = {
marks = {}
marks = {},
},
term = {
cmds = {}
cmds = {},
},
}
end
local proj = projects[vim.loop.cwd()]
if proj.mark == nil then
proj.mark = {marks = {}}
log.trace("ensure_correct_config(): No marks found for", vim.loop.cwd())
proj.mark = { marks = {} }
end
if proj.term == nil then
proj.term = {cmds = {}}
log.trace("ensure_correct_config(): No terminal commands found for", vim.loop.cwd())
proj.term = { cmds = {} }
end
local marks = proj.mark.marks
@ -78,7 +84,7 @@ local function ensure_correct_config(config)
local mark = marks[idx]
if type(mark) == "string" then
mark = {
filename = mark
filename = mark,
}
marks[idx] = mark
end
@ -103,15 +109,18 @@ local function expand_dir(config)
end
M.save = function()
Path:new(cache_config):write(vim.fn.json_encode(HarpoonConfig), 'w')
log.debug("save(): Saving cache config to", cache_config)
Path:new(cache_config):write(vim.fn.json_encode(HarpoonConfig), "w")
end
local function read_config(local_config)
log.debug("_read_config():", local_config)
return vim.fn.json_decode(Path:new(local_config):read())
end
-- 1. saved. Where do we save?
M.setup = function(config)
log.debug("setup(): Setting up...")
if not config then
config = {}
@ -121,43 +130,48 @@ M.setup = function(config)
local ok2, c_config = pcall(read_config, cache_config)
if not ok then
log.debug("setup(): No user config present at", user_config)
u_config = {}
end
if not ok2 then
log.debug("setup(): No cache config present at", cache_config)
c_config = {}
end
local complete_config =
merge_tables(
{projects = {} , global_settings = {
["save_on_toggle"] = false,
["save_on_change"] = true,
}},
expand_dir(c_config),
expand_dir(u_config),
expand_dir(config))
local complete_config = merge_tables({
projects = {},
global_settings = {
["save_on_toggle"] = false,
["save_on_change"] = true,
},
}, expand_dir(c_config), expand_dir(u_config), expand_dir(config))
-- There was this issue where the vim.loop.cwd() didn't have marks or term, but had
-- an object for vim.loop.cwd()
ensure_correct_config(complete_config)
HarpoonConfig = complete_config
log.trace("setup(): Complete config", HarpoonConfig)
end
M.get_global_settings = function()
log.trace("get_global_settings()")
return HarpoonConfig.global_settings
end
M.get_term_config = function()
log.trace("get_term_config()")
return ensure_correct_config(HarpoonConfig).projects[vim.loop.cwd()].term
end
M.get_mark_config = function()
-- log.trace("get_mark_config()")
return ensure_correct_config(HarpoonConfig).projects[vim.loop.cwd()].mark
end
M.get_menu_config = function()
log.trace("get_menu_config()")
return HarpoonConfig.menu or {}
end
@ -170,4 +184,3 @@ end
M.setup()
return M

View File

@ -1,5 +1,6 @@
local harpoon = require('harpoon')
local utils = require('harpoon.utils')
local harpoon = require("harpoon")
local utils = require("harpoon.utils")
local log = require("harpoon.dev").log
-- I think that I may have to organize this better. I am not the biggest fan
-- of procedural all the things
@ -14,6 +15,7 @@ local function emit_changed()
end
if not callbacks["changed"] then
log.debug("emit_changed(): no callbacks for 'changed', returning")
return
end
@ -81,21 +83,21 @@ end
local function validate_buf_name(buf_name)
if buf_name == "" or buf_name == nil then
error("Couldn't find a valid file name to mark, sorry.")
log.error("Couldn't find a valid file name to mark, sorry.")
return
end
end
M.get_index_of = function(item)
if item == nil then
error("You have provided a nil value to Harpoon, please provide a string rep of the file or the file idx.")
log.error("You have provided a nil value to Harpoon, please provide a string rep of the file or the file idx.")
return
end
if type(item) == 'string' then
if type(item) == "string" then
local relative_item = utils.normalize_path(item)
for idx = 1, M.get_length() do
if M.get_marked_file_name(idx) == relative_item then
if M.get_marked_file_name(idx) == relative_item then
return idx
end
end
@ -145,7 +147,7 @@ M.add_file = function(file_name_or_buf_id)
local found_idx = get_first_empty_slot()
harpoon.get_mark_config().marks[found_idx] = create_mark(buf_name)
M.remove_empty_tail(false)
emit_changed();
emit_changed()
end
-- dont_emit_on_changed should only be used internally
@ -179,13 +181,11 @@ M.store_offset = function()
return
end
harpoon.get_mark_config().marks[idx].row =
vim.fn.line(".");
harpoon.get_mark_config().marks[idx].row = vim.fn.line(".")
end)
if not ok then
-- TODO: Developer logs?
print("M.store_offset#pcall failed:", res)
log.warn("store_offset(): pcall failed:", res)
end
emit_changed()
@ -196,16 +196,19 @@ M.rm_file = function(file_name_or_buf_id)
local idx = M.get_index_of(buf_name)
if not M.valid_index(idx) then
log.debug("rm_file(): No mark exists for id", file_name_or_buf_id)
return
end
harpoon.get_mark_config().marks[idx] = create_mark("")
M.remove_empty_tail(false)
emit_changed()
log.debug("rm_file(): Removed mark at id", idx)
end
M.clear_all = function()
harpoon.get_mark_config().marks = {}
log.debug("clear_all(): Clearing all marks.")
emit_changed()
end
@ -231,6 +234,8 @@ M.set_current_at = function(idx)
local buf_name = get_buf_name()
local current_idx = M.get_index_of(buf_name)
log.debug("set_current_at(): Setting id", idx, buf_name)
-- Remove it if it already exists
if M.valid_index(current_idx) then
config.marks[current_idx] = create_mark("")
@ -260,11 +265,11 @@ M.to_quickfix_list = function()
col = mark.col,
}
end
log.debug("to_quickfix_list(): Sending marks to quickfix list.")
vim.fn.setqflist(qf_list)
end
M.set_mark_list = function(new_list)
local config = harpoon.get_mark_config()
for k, v in pairs(new_list) do
@ -285,14 +290,18 @@ end
M.toggle_file = function(file_name_or_buf_id)
local buf_name = get_buf_name(file_name_or_buf_id)
log.debug("toggle_file():", buf_name)
validate_buf_name(buf_name)
if (mark_exists(buf_name)) then
M.rm_file(buf_name)
print("Mark removed")
log.trace("toggle_file(): Mark removed")
else
M.add_file(buf_name)
print("Mark Added")
print("Mark added")
log.trace("toggle_file(): Mark added")
end
end
@ -302,6 +311,7 @@ end
M.on = function(event, cb)
if not callbacks[event] then
log.debug("on(): no callbacks yet for", event)
callbacks[event] = {}
end
@ -309,5 +319,3 @@ M.on = function(event, cb)
end
return M

View File

@ -1,6 +1,7 @@
local harpoon = require('harpoon')
local popup = require('popup')
local Marked = require('harpoon.mark')
local harpoon = require("harpoon")
local popup = require("popup")
local Marked = require("harpoon.mark")
local log = require("harpoon.dev").log
local M = {}
@ -97,6 +98,7 @@ end
M.nav_file = function(id)
local idx = Marked.get_index_of(id)
if not Marked.valid_index(idx) then
log.debug("nav_file(): No mark exists for id", id)
return
end