diff options
Diffstat (limited to 'lua/lvim/core')
| -rw-r--r-- | lua/lvim/core/autocmds.lua | 55 | ||||
| -rw-r--r-- | lua/lvim/core/commands.lua | 1 | 
2 files changed, 56 insertions, 0 deletions
| diff --git a/lua/lvim/core/autocmds.lua b/lua/lvim/core/autocmds.lua index 569622be..664c1662 100644 --- a/lua/lvim/core/autocmds.lua +++ b/lua/lvim/core/autocmds.lua @@ -1,4 +1,5 @@  local M = {} +local Log = require "lvim.core.log"  --- Load the default set of autogroups and autocommands.  function M.load_augroups() @@ -58,6 +59,60 @@ function M.load_augroups()    }  end +local get_format_on_save_opts = function() +  local defaults = require("lvim.config.defaults").format_on_save +  -- accept a basic boolean `lvim.format_on_save=true` +  if type(lvim.format_on_save) ~= "table" then +    return defaults +  end + +  return { +    pattern = lvim.format_on_save.pattern or defaults.pattern, +    timeout = lvim.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 lvim.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    -- diff --git a/lua/lvim/core/commands.lua b/lua/lvim/core/commands.lua index 61148889..a9dd51c0 100644 --- a/lua/lvim/core/commands.lua +++ b/lua/lvim/core/commands.lua @@ -16,6 +16,7 @@ M.defaults = {    [[ command! LvimUpdate lua require('lvim.bootstrap').update() ]],    [[ command! LvimSyncCorePlugins lua require('lvim.plugin-loader'):sync_core_plugins() ]],    [[ command! LvimReload lua require('lvim.config'):reload() ]], +  [[ command! LvimToggleFormatOnSave lua require('lvim.core.autocmds').toggle_format_on_save() ]],  }  M.load = function(commands) | 
