Compare commits

...

7 Commits

5 changed files with 63 additions and 21 deletions

View File

@ -217,10 +217,17 @@ is equivalent to the following:
load:cmd("Command", { load:cmd("Command", {
callback = function() callback = function()
load:cleanup() load:cleanup()
if (rerun) then
vim.cmd("Command")
end
end end
}) })
< <
If you wish the second argument may be completely ommitted. If you wish the second argument may be completely ommitted. Note the inclusion
of a `rerun` field, this is a parameter which may be passed into the options table
to re-run the binding after loading the package. You may choose to disable the
built-in logic by passing false.
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
LOAD:AUTO *dep-lazy-loading-api-auto* LOAD:AUTO *dep-lazy-loading-api-auto*

View File

@ -3,10 +3,10 @@ local packager = require('dep.package')
---@class lazy_loader ---@class lazy_loader
---@field load function the function to load the plugin ---@field load function the function to load the plugin
---@field command_ids table the commands that have been registered ---@field command_ids string[] the commands that have been registered
---@field auto_ids table the auto commands that have been registered ---@field auto_ids number[] the auto commands that have been registered
---@field keybind_ids table the keybinds that have been registered ---@field keybind_ids table[] the keybinds that have been registered
---@field plugin_ids table the plugins that have been registered ---@field plugin_ids table[] the plugins that have been registered
local lazy_loader = {} local lazy_loader = {}
--- create a new instance of lazy --- create a new instance of lazy
@ -37,6 +37,11 @@ end
function lazy_loader:cmd(name, opts) function lazy_loader:cmd(name, opts)
opts = opts or {} opts = opts or {}
-- move the rerun arg to a seperate variable because keymap.set doesn't like
-- options it doesn't know of
local rerun = opts["rerun"] or true
opts['rerun'] = nil
-- load the plugin on completion -- load the plugin on completion
if not opts["complete"] then if not opts["complete"] then
opts["complete"] = function(_, line, _) opts["complete"] = function(_, line, _)
@ -52,6 +57,11 @@ function lazy_loader:cmd(name, opts)
vim.api.nvim_create_user_command(name, opts['callback'] or function(_) vim.api.nvim_create_user_command(name, opts['callback'] or function(_)
self:cleanup() self:cleanup()
-- attempt to rerun the command
if not rerun then
pcall(vim.cmd, name)
end
end, opts) end, opts)
table.insert(self.command_ids, name) table.insert(self.command_ids, name)
@ -133,29 +143,29 @@ end
--- cleanup all the callbacks, and load the plugin --- cleanup all the callbacks, and load the plugin
function lazy_loader:cleanup() function lazy_loader:cleanup()
-- cleanup user commands -- cleanup user commands
for _, command_id in pairs(self.command_ids) do for _, command_id in ipairs(self.command_ids) do
local ok, err = pcall(vim.api.nvim_del_user_command, command_id) local ok, err = pcall(vim.api.nvim_del_user_command, command_id)
if not ok then if not ok then
logger:log("lazy", err or "failed to delete user command") logger:log("lazy", err or "failed to delete user command")
end end
end end
-- cleanup auto commands -- cleanup auto commands
for _, auto_id in pairs(self.auto_ids) do for _, auto_id in ipairs(self.auto_ids) do
local ok, err = pcall(vim.api.nvim_del_autocmd, auto_id) local ok, err = pcall(vim.api.nvim_del_autocmd, auto_id)
if not ok then if not ok then
logger:log("lazy", err or "failed to delete auto command") logger:log("lazy", err or "failed to delete auto command")
end end
end end
-- cleanup keymaps -- cleanup keymaps
for _, keybind_id in pairs(self.keybind_ids) do for _, keybind_id in ipairs(self.keybind_ids) do
local ok, err = pcall(vim.keymap.del, keybind_id.mode, keybind_id.bind, {}) local ok, err = pcall(vim.keymap.del, keybind_id.mode, keybind_id.bind, {})
if not ok then if not ok then
logger:log("lazy", err or "failed to delete keymap") logger:log("lazy", err or "failed to delete keymap")
end end
end end
-- cleanup plugins -- cleanup plugins
for _, plugin_id in pairs(self.plugin_ids) do for _, plugin_id in ipairs(self.plugin_ids) do
table.remove(packager.get_packages()[plugin_id[0]], plugin_id[1]) table.remove(packager.get_packages()[plugin_id[1]].on_load, plugin_id[2])
end end
-- load the plugin -- load the plugin
self:load() self:load()

View File

@ -244,6 +244,10 @@ function package:ensureadded(force)
--- load a package --- load a package
---@param pkg package ---@param pkg package
local function loadpkg(pkg) local function loadpkg(pkg)
if not self.enabled then
return false
end
-- make sure to load the dependencies first -- make sure to load the dependencies first
for _, p in pairs(pkg.requirements) do for _, p in pairs(pkg.requirements) do
if not p.loaded then if not p.loaded then
@ -308,7 +312,7 @@ function package:ensureadded(force)
if load_cond ~= true then if load_cond ~= true then
local ok, err = pcall(load_cond, l) local ok, err = pcall(load_cond, l)
if not ok then if not ok then
logger:log("lazy", "failed to register load conditions for '%s': %s", logger:log("error", "failed to register lazy load conditions for '%s': %s",
self.name, err) self.name, err)
end end
end end

View File

@ -20,16 +20,29 @@ end
---@param log_line string log line ---@param log_line string log line
---@return chunk[] chunks ---@return chunk[] chunks
function format.log_line(log_line) function format.log_line(log_line)
local log_time = string.sub( log_line, string.find(log_line, "%[") + 1, -- make sure we don't do operations on nil values
string.find(log_line, "%]") - 1) if not log_line or log_line == "" then
local colon = string.find(log_line, ":", 11) return {}
local log_path = string.sub(log_line, string.find(log_line, "%]") + 2, end
colon - 1)
local log_path_ln = string.sub(log_line, colon + 1, -- error on any nil values, this should prevent us from parsing an incorrectly
string.find(log_line, ":", colon + 1) - 1) -- formatted log line
local level = string.sub(log_line, string.find(log_line, "%(") + 1, local log_time, colon, log_path, log_path_ln, level, rest
string.find(log_line, "%)") - 1) local ok = pcall(function()
local rest = string.sub(log_line, string.find(log_line, "%)") + 2) log_time = string.sub(log_line, string.find(log_line, "%[") + 1,
string.find(log_line, "%]") - 1)
colon = string.find(log_line, ":", 11)
log_path = string.sub(log_line, string.find(log_line, "%]") + 2,
colon - 1)
log_path_ln = string.sub(log_line, colon + 1,
string.find(log_line, ":", colon + 1) - 1)
level = string.sub(log_line, string.find(log_line, "%(") + 1,
string.find(log_line, "%)") - 1)
rest = string.sub(log_line, string.find(log_line, "%)") + 2)
end)
if not ok then
return {}
end
return { return {
{ "[", "" }, { "[", "" },

View File

@ -17,6 +17,14 @@ describe("ui log formatting", function()
}, },
dep_ui_format.log_line("[11:22:33] file.lua:1:(vim) some fancy message") dep_ui_format.log_line("[11:22:33] file.lua:1:(vim) some fancy message")
) )
-- malformed log line
assert.same({},
dep_ui_format.log_line("11:22:33] file.lua:1:(vim) some fancy message"))
-- test nil values
assert.same({}, dep_ui_format.log_line(""))
assert.same({}, dep_ui_format.log_line(nil))
end) end)
end) end)