summaryrefslogtreecommitdiff
path: root/.config/nvim/lua/core/autocmds.lua
diff options
context:
space:
mode:
Diffstat (limited to '.config/nvim/lua/core/autocmds.lua')
-rw-r--r--.config/nvim/lua/core/autocmds.lua58
1 files changed, 58 insertions, 0 deletions
diff --git a/.config/nvim/lua/core/autocmds.lua b/.config/nvim/lua/core/autocmds.lua
index 1f50308..ecdcf36 100644
--- a/.config/nvim/lua/core/autocmds.lua
+++ b/.config/nvim/lua/core/autocmds.lua
@@ -1,4 +1,5 @@
local M = {}
+local Log = require "core.log"
--- Load the default set of autogroups and autocommands.
function M.load_augroups()
@@ -62,6 +63,63 @@ function M.load_augroups()
}
end
+local get_format_on_save_opts = function()
+ local defaults = require("config.defaults").format_on_save
+ -- accept a basic boolean `format_on_save=true`
+ if type(options.format_on_save) ~= "table" then
+ return defaults
+ end
+
+ return {
+ pattern = options.format_on_save.pattern or defaults.pattern,
+ timeout = options.format_on_save.timeout or defaults.timeout,
+ }
+end
+
+function M.enable_format_on_save(opts)
+ local fmd_cmd = string.format(
+ ":silent lua vim.lsp.buf.formatting_sync({}, %s)",
+ opts.timeout_ms
+ )
+ M.define_augroups {
+ format_on_save = { { "BufWritePre", opts.pattern, fmd_cmd } },
+ }
+ Log:debug "enabled format-on-save"
+end
+
+function M.disable_format_on_save()
+ M.remove_augroup "format_on_save"
+ Log:debug "disabled format-on-save"
+end
+
+function M.configure_format_on_save()
+ if options.format_on_save then
+ if vim.fn.exists "#format_on_save#BufWritePre" == 1 then
+ M.remove_augroup "format_on_save"
+ Log:debug "reloading format-on-save configuration"
+ end
+ local opts = get_format_on_save_opts()
+ M.enable_format_on_save(opts)
+ else
+ M.disable_format_on_save()
+ end
+end
+
+function M.toggle_format_on_save()
+ if vim.fn.exists "#format_on_save#BufWritePre" == 0 then
+ local opts = get_format_on_save_opts()
+ M.enable_format_on_save(opts)
+ else
+ M.disable_format_on_save()
+ end
+end
+
+function M.remove_augroup(name)
+ if vim.fn.exists("#" .. name) == 1 then
+ vim.cmd("au! " .. name)
+ end
+end
+
function M.define_augroups(definitions) -- {{{1
-- Create autocommand groups based on the passed definitions
--