diff options
| author | kylo252 <[email protected]> | 2021-12-09 17:08:53 +0100 | 
|---|---|---|
| committer | GitHub <[email protected]> | 2021-12-09 17:08:53 +0100 | 
| commit | 307db8936b291b82124f05bdcfeb85be5464f21d (patch) | |
| tree | cdc0ccdf8e9d58be61b61b78fffa012ed758f33d /lua | |
| parent | 68cdb62f87543d5420e70c241ebd5942ed9c7b0e (diff) | |
feat: multiple enhancements to lvim-reload (#2054)
Diffstat (limited to 'lua')
| -rw-r--r-- | lua/lvim/config/init.lua | 22 | ||||
| -rw-r--r-- | lua/lvim/lsp/utils.lua | 7 | ||||
| -rw-r--r-- | lua/lvim/plugin-loader.lua | 17 | ||||
| -rw-r--r-- | lua/lvim/utils/hooks.lua | 50 | 
4 files changed, 64 insertions, 32 deletions
| diff --git a/lua/lvim/config/init.lua b/lua/lvim/config/init.lua index a3c5af24..fba6213d 100644 --- a/lua/lvim/config/init.lua +++ b/lua/lvim/config/init.lua @@ -98,28 +98,20 @@ end  --- Override the configuration with a user provided one  -- @param config_path The path to the configuration overrides  function M:reload() -  local lvim_modules = {} -  for module, _ in pairs(package.loaded) do -    if module:match "lvim.core" then -      package.loaded[module] = nil -      table.insert(lvim_modules, module) -    end -  end +  package.loaded["lvim.utils.hooks"] = nil +  local _, hooks = pcall(require, "lvim.utils.hooks") +  hooks.run_pre_reload()    M:init()    M:load() +  require("lvim.core.autocmds").configure_format_on_save() +    local plugins = require "lvim.plugins" -  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 } -  vim.cmd ":PackerInstall" -  vim.cmd ":PackerCompile" -  -- vim.cmd ":PackerClean" -  require("lvim.lsp").setup() -  Log:info "Reloaded configuration" +  hooks.run_post_reload()  end  return M diff --git a/lua/lvim/lsp/utils.lua b/lua/lvim/lsp/utils.lua index 7cc8f54f..7659972e 100644 --- a/lua/lvim/lsp/utils.lua +++ b/lua/lvim/lsp/utils.lua @@ -22,11 +22,12 @@ function M.get_active_clients_by_ft(filetype)  end  function M.get_client_capabilities(client_id) +  local client    if not client_id then      local buf_clients = vim.lsp.buf_get_clients() -    for _, buf_client in ipairs(buf_clients) do +    for _, buf_client in pairs(buf_clients) do        if buf_client.name ~= "null-ls" then -        client_id = buf_client.id +        client = buf_client          break        end      end @@ -36,8 +37,6 @@ function M.get_client_capabilities(client_id)      return    end -  local client = vim.lsp.get_client_by_id(tonumber(client_id)) -    local enabled_caps = {}    for capability, status in pairs(client.resolved_capabilities) do      if status == true then diff --git a/lua/lvim/plugin-loader.lua b/lua/lvim/plugin-loader.lua index 5bde8b1b..c5220d59 100644 --- a/lua/lvim/plugin-loader.lua +++ b/lua/lvim/plugin-loader.lua @@ -28,7 +28,13 @@ function plugin_loader.init(opts)      package_root = package_root,      compile_path = compile_path,      log = { level = log_level }, -    git = { clone_timeout = 300 }, +    git = { +      clone_timeout = 300, +      subcommands = { +        -- this is more efficient than what Packer is using +        fetch = "fetch --no-tags --no-recurse-submodules --update-shallow --progress", +      }, +    },      max_jobs = 50,      display = {        open_fn = function() @@ -36,6 +42,8 @@ function plugin_loader.init(opts)        end,      },    } + +  vim.cmd [[autocmd User PackerComplete lua require('lvim.utils.hooks').run_on_packer_complete()]]  end  -- packer expects a space separated list @@ -104,4 +112,11 @@ function plugin_loader.sync_core_plugins()    pcall_packer_command("sync", core_plugins)  end +function plugin_loader.ensure_installed() +  plugin_loader.cache_clear() +  local all_plugins = _G.packer_plugins or plugin_loader.get_core_plugins() +  Log:trace(string.format("Syncing core plugins: [%q]", table.concat(all_plugins, ", "))) +  pcall_packer_command("install", all_plugins) +end +  return plugin_loader diff --git a/lua/lvim/utils/hooks.lua b/lua/lvim/utils/hooks.lua index 1d265482..9b02b958 100644 --- a/lua/lvim/utils/hooks.lua +++ b/lua/lvim/utils/hooks.lua @@ -1,38 +1,64 @@  local M = {} -local plugin_loader = require "lvim.plugin-loader"  local Log = require "lvim.core.log"  local in_headless = #vim.api.nvim_list_uis() == 0  function M.run_pre_update()    Log:debug "Starting pre-update hook" -  _G.__luacache.clear_cache()    if package.loaded["lspconfig"] then      vim.cmd [[ LspStop ]]    end  end +function M.run_pre_reload() +  Log:debug "Starting pre-reload hook" +  if package.loaded["lspconfig"] then +    vim.cmd [[ LspStop ]] +  end +end + +function M.run_on_packer_complete() +  require("lvim.plugin-loader").recompile() +  -- forcefully activate nvim-web-devicons +  require("nvim-web-devicons").set_up_highlights() +  Log:info "Reloaded configuration" +end + +function M.run_post_reload() +  Log:debug "Starting post-reload hook" +  if package.loaded["lspconfig"] then +    vim.cmd [[ LspRestart ]] +  end + +  M.reset_cache() +  require("lvim.plugin-loader").ensure_installed() +end +  ---Reset any startup cache files used by Packer and Impatient  ---It also forces regenerating any template ftplugin files  ---Tip: Useful for clearing any outdated settings  function M.reset_cache() -  _G.__luacache.clear_cache() -  require("lvim.plugin-loader").recompile() -  package.loaded["lvim.lsp.templates"] = nil - -  Log:debug "Re-generatring ftplugin template files" +  local impatient = _G.__luacache +  if impatient then +    impatient.clear_cache() +  end +  local lvim_modules = {} +  for module, _ in pairs(package.loaded) do +    if module:match "lvim.core" or module:match "lvim.lsp" then +      package.loaded[module] = nil +      table.insert(lvim_modules, module) +    end +  end +  Log:trace(string.format("Cache invalidated for core modules: { %s }", table.concat(lvim_modules, ", ")))    require("lvim.lsp.templates").generate_templates()  end  function M.run_post_update()    Log:debug "Starting post-update hook" - -  Log:debug "Re-generatring ftplugin template files" -  package.loaded["lvim.lsp.templates"] = nil -  require("lvim.lsp.templates").generate_templates() +  M.reset_cache()    Log:debug "Updating core plugins" -  plugin_loader:sync_core_plugins() +  require("lvim.plugin-loader").ensure_installed()    if not in_headless then      vim.schedule(function() | 
