diff options
| -rw-r--r-- | lua/lvim/config/defaults.lua | 7 | ||||
| -rw-r--r-- | lua/lvim/config/init.lua | 5 | ||||
| -rw-r--r-- | lua/lvim/core/autocmds.lua | 55 | ||||
| -rw-r--r-- | lua/lvim/core/commands.lua | 1 | ||||
| -rw-r--r-- | lua/lvim/lsp/init.lua | 2 | ||||
| -rw-r--r-- | lua/lvim/utils/init.lua | 26 | 
6 files changed, 66 insertions, 30 deletions
| diff --git a/lua/lvim/config/defaults.lua b/lua/lvim/config/defaults.lua index a20e34e1..a5c81a01 100644 --- a/lua/lvim/config/defaults.lua +++ b/lua/lvim/config/defaults.lua @@ -3,7 +3,12 @@ return {    colorscheme = "onedarker",    line_wrap_cursor_movement = true,    transparent_window = false, -  format_on_save = true, +  format_on_save = { +    ---@usage pattern string pattern used for the autocommand (Default: '*') +    pattern = "*", +    ---@usage timeout number timeout in ms for the format request (Default: 1000) +    timeout = 1000, +  },    keys = {},    builtin = {}, diff --git a/lua/lvim/config/init.lua b/lua/lvim/config/init.lua index 20bc4c81..8359ff18 100644 --- a/lua/lvim/config/init.lua +++ b/lua/lvim/config/init.lua @@ -20,7 +20,7 @@ end  -- Define lvim global variable  function M:init()    if vim.tbl_isempty(lvim or {}) then -    lvim = require "lvim.config.defaults" +    lvim = vim.deepcopy(require "lvim.config.defaults")      local home_dir = vim.loop.os_homedir()      lvim.vsnip_dir = utils.join_paths(home_dir, ".config", "snippets")      lvim.database = { save_location = utils.join_paths(home_dir, ".config", "lunarvim_db"), auto_execute = 1 } @@ -114,7 +114,8 @@ function M:reload()    M:load()    local plugins = require "lvim.plugins" -  utils.toggle_autoformat() +  local autocmds = require "lvim.core.autocmds" +  autocmds.configure_format_on_save()    local plugin_loader = require "lvim.plugin-loader"    plugin_loader.cache_clear()    plugin_loader.load { plugins, lvim.plugins } 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) diff --git a/lua/lvim/lsp/init.lua b/lua/lvim/lsp/init.lua index d00f75c6..9764950d 100644 --- a/lua/lvim/lsp/init.lua +++ b/lua/lvim/lsp/init.lua @@ -171,7 +171,7 @@ function M.setup()    require("lvim.lsp.null-ls").setup() -  require("lvim.utils").toggle_autoformat() +  require("lvim.core.autocmds").configure_format_on_save()  end  return M diff --git a/lua/lvim/utils/init.lua b/lua/lvim/utils/init.lua index cebbe75c..bf04e149 100644 --- a/lua/lvim/utils/init.lua +++ b/lua/lvim/utils/init.lua @@ -1,5 +1,4 @@  local utils = {} -local Log = require "lvim.core.log"  local uv = vim.loop  -- recursive Print (structure, limit, separator) @@ -58,31 +57,6 @@ function utils.generate_settings()    io.close(file)  end --- autoformat -function utils.toggle_autoformat() -  if lvim.format_on_save then -    require("lvim.core.autocmds").define_augroups { -      autoformat = { -        { -          "BufWritePre", -          "*", -          ":silent lua vim.lsp.buf.formatting_sync()", -        }, -      }, -    } -    Log:debug "Format on save active" -  end - -  if not lvim.format_on_save then -    vim.cmd [[ -      if exists('#autoformat#BufWritePre') -        :autocmd! autoformat -      endif -    ]] -    Log:debug "Format on save off" -  end -end -  function utils.unrequire(m)    package.loaded[m] = nil    _G[m] = nil | 
