summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorToby Vincent <tobyv13@gmail.com>2022-10-28 17:03:37 -0500
committerToby Vincent <tobyv13@gmail.com>2022-10-28 17:04:17 -0500
commitf03c075d9c7b0fe8e90e9056294a10a2b96916f0 (patch)
tree67306acfa574f9bfed30cb77311a74b264e8d357
parentbc868ccc068d1adf672c7f161c08eda19fd1cb6c (diff)
feat(nvim): add lua module auto-reloader
-rw-r--r--nvim/.config/nvim/lua/tobyvin/autocmds.lua42
-rw-r--r--nvim/.config/nvim/lua/tobyvin/utils.lua22
-rw-r--r--nvim/.config/nvim/lua/tobyvin/utils/buffer.lua2
-rw-r--r--nvim/.config/nvim/lua/tobyvin/utils/fs.lua20
-rw-r--r--nvim/.config/nvim/lua/tobyvin/utils/job.lua2
5 files changed, 49 insertions, 39 deletions
diff --git a/nvim/.config/nvim/lua/tobyvin/autocmds.lua b/nvim/.config/nvim/lua/tobyvin/autocmds.lua
index 74a8566..369b62a 100644
--- a/nvim/.config/nvim/lua/tobyvin/autocmds.lua
+++ b/nvim/.config/nvim/lua/tobyvin/autocmds.lua
@@ -1,10 +1,10 @@
+local utils = require("tobyvin.utils")
+local Path = require("plenary").path
local M = {}
M.setup = function()
- local augroup_hl = vim.api.nvim_create_augroup("tobyvin_hl", { clear = true })
-
vim.api.nvim_create_autocmd("TextYankPost", {
- group = augroup_hl,
+ group = vim.api.nvim_create_augroup("tobyvin_hl", { clear = true }),
pattern = "*",
callback = function()
vim.highlight.on_yank()
@@ -12,10 +12,20 @@ M.setup = function()
desc = "Highlight yank",
})
- local augroup_fmt = vim.api.nvim_create_augroup("tobyvin_fmt", { clear = true })
+ vim.api.nvim_create_autocmd("BufWritePre", {
+ group = vim.api.nvim_create_augroup("tobyvin_mkdir", { clear = true }),
+ callback = function(args)
+ local parent = Path:new(args.file):parent()
+ local prompt = string.format("%s does not exist. Create it?", parent:make_relative())
+ if not parent:is_dir() and vim.fn.confirm(prompt, "&Yes\n&No") == 1 then
+ parent:mkdir()
+ end
+ end,
+ desc = "Check for missing directory on write",
+ })
vim.api.nvim_create_autocmd("BufWritePre", {
- group = augroup_fmt,
+ group = vim.api.nvim_create_augroup("tobyvin_whitespace", { clear = true }),
pattern = "*",
callback = function()
local cursor = vim.api.nvim_win_get_cursor(0)
@@ -26,7 +36,7 @@ M.setup = function()
})
vim.api.nvim_create_autocmd("FileType", {
- group = augroup_fmt,
+ group = vim.api.nvim_create_augroup("tobyvin_tabstop", { clear = true }),
pattern = { "sh", "zsh", "xml", "html", "xhtml", "css", "scss", "javascript", "lua", "dart", "markdown" },
callback = function(args)
vim.bo[args.buf].tabstop = 2
@@ -34,10 +44,8 @@ M.setup = function()
desc = "Set tabstop",
})
- local augroup_view = vim.api.nvim_create_augroup("tobyvin_view", { clear = true })
-
vim.api.nvim_create_autocmd("FileType", {
- group = augroup_view,
+ group = vim.api.nvim_create_augroup("tobyvin_unlisted", { clear = true }),
pattern = { "qf", "help", "gitcommit", "gitrebase", "Neogit*" },
callback = function(args)
vim.bo[args.buf].buflisted = false
@@ -46,7 +54,7 @@ M.setup = function()
})
vim.api.nvim_create_autocmd("FileType", {
- group = augroup_view,
+ group = vim.api.nvim_create_augroup("tobyvin_help", { clear = true }),
pattern = "help",
callback = function(args)
vim.wo.wrap = true
@@ -58,16 +66,16 @@ M.setup = function()
desc = "Setup and resize help window",
})
- vim.api.nvim_create_autocmd("FileType", {
- group = vim.api.nvim_create_augroup("tobyvin_reload", { clear = true }),
- pattern = "lua",
+ vim.api.nvim_create_autocmd("BufWritePost", {
+ group = vim.api.nvim_create_augroup("tobyvin_auto_reload", { clear = true }),
+ pattern = "*.lua",
callback = function(args)
- local utils = require("tobyvin.utils")
- if utils.fs.module_from_path(args.file) then
- vim.keymap.set("n", "<leader>R", utils.fs.reload, { desc = "reload lua module" })
+ local module_name = utils.fs.module_from_path(args.match)
+ if module_name then
+ utils.fs.reload(module_name)
end
end,
- desc = "Setup lua module reloader",
+ desc = "Reload lua module on write",
})
end
diff --git a/nvim/.config/nvim/lua/tobyvin/utils.lua b/nvim/.config/nvim/lua/tobyvin/utils.lua
index 316cbae..45772fb 100644
--- a/nvim/.config/nvim/lua/tobyvin/utils.lua
+++ b/nvim/.config/nvim/lua/tobyvin/utils.lua
@@ -1,12 +1,14 @@
-local M = {
- buffer = require("tobyvin.utils.buffer"),
- debug = require("tobyvin.utils.debug"),
- diagnostic = require("tobyvin.utils.diagnostic"),
- documentation = require("tobyvin.utils.documentation"),
- fs = require("tobyvin.utils.fs"),
- job = require("tobyvin.utils.job"),
- keymap = require("tobyvin.utils.keymap"),
- status = require("tobyvin.utils.status"),
-}
+-- Lazy load
+local M = setmetatable({}, {
+ __index = function(t, k)
+ local ok, val = pcall(require, string.format("tobyvin.utils.%s", k))
+
+ if ok then
+ rawset(t, k, val)
+ end
+
+ return val
+ end,
+})
return M
diff --git a/nvim/.config/nvim/lua/tobyvin/utils/buffer.lua b/nvim/.config/nvim/lua/tobyvin/utils/buffer.lua
index 30abd09..2035fc2 100644
--- a/nvim/.config/nvim/lua/tobyvin/utils/buffer.lua
+++ b/nvim/.config/nvim/lua/tobyvin/utils/buffer.lua
@@ -1,4 +1,4 @@
-local Path = require("plenary.path")
+local Path = require("plenary").path
local M = {}
M.get_visual_range = function()
diff --git a/nvim/.config/nvim/lua/tobyvin/utils/fs.lua b/nvim/.config/nvim/lua/tobyvin/utils/fs.lua
index cef48fe..f2c2f05 100644
--- a/nvim/.config/nvim/lua/tobyvin/utils/fs.lua
+++ b/nvim/.config/nvim/lua/tobyvin/utils/fs.lua
@@ -1,6 +1,6 @@
-local Job = require("plenary.job")
-local Path = require("plenary.path")
-local Reload = require("plenary.reload")
+local Job = require("plenary").job
+local Path = require("plenary").path
+local Reload = require("plenary").reload
local M = {}
M.config_path = function(package)
@@ -18,18 +18,18 @@ M.module_from_path = function(path)
end
M.reload = function(module_name, starts_with_only)
- module_name = vim.F.if_nil(module_name, M.module_from_path())
+ module_name = vim.F.if_nil(module_name, "")
starts_with_only = vim.F.if_nil(starts_with_only, "tobyvin")
+ module = package.loaded[module_name]
+
Reload.reload_module(module_name, starts_with_only)
- local notify_opts = { title = string.format("[utils] reload: '%s'", module_name) }
- local status_ok, module = pcall(require, module_name)
- if not status_ok then
- vim.notify("Failed to require module", vim.log.levels.ERROR, notify_opts)
+ if not pcall(require, module_name) then
+ package.loaded[module_name] = module
end
- vim.notify("Reloaded module", vim.log.levels.INFO, notify_opts)
- return module
+
+ return package.loaded[module_name]
end
M.select_exe = function(cwd, callback)
diff --git a/nvim/.config/nvim/lua/tobyvin/utils/job.lua b/nvim/.config/nvim/lua/tobyvin/utils/job.lua
index d5ac03e..231a9bb 100644
--- a/nvim/.config/nvim/lua/tobyvin/utils/job.lua
+++ b/nvim/.config/nvim/lua/tobyvin/utils/job.lua
@@ -28,7 +28,7 @@ M.cmd = function(cmd, args, quiet)
end
M.with_notify = function(cmd, args, quiet)
- local Job = require("plenary.job")
+ local Job = require("plenary").job
local notification
local win, height
local output = ""