diff options
Diffstat (limited to 'lua/lvim/utils')
-rw-r--r-- | lua/lvim/utils/hooks.lua | 61 | ||||
-rw-r--r-- | lua/lvim/utils/init.lua | 62 |
2 files changed, 81 insertions, 42 deletions
diff --git a/lua/lvim/utils/hooks.lua b/lua/lvim/utils/hooks.lua index 0fe4a7fd..9b02b958 100644 --- a/lua/lvim/utils/hooks.lua +++ b/lua/lvim/utils/hooks.lua @@ -1,42 +1,75 @@ 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() - vim.cmd "LspStop" + 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() + if package.loaded["nvim-treesitter"] then + vim.cmd [[ TSUpdateSync ]] + end -- TODO: add a changelog vim.notify("Update complete", vim.log.levels.INFO) - vim.cmd "LspRestart" + if package.loaded["lspconfig"] then + vim.cmd [[ LspRestart ]] + end end) end end diff --git a/lua/lvim/utils/init.lua b/lua/lvim/utils/init.lua index cebbe75c..cafcf506 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 @@ -200,6 +174,38 @@ function utils.log_contains(query) return false end -return utils +function utils.generate_plugins_sha(output) + local list = {} + output = output or "commits.lua" + + local function git_cmd(args) + local Job = require "plenary.job" + local stderr = {} + local stdout, ret = Job + :new({ + command = "git", + args = args, + on_stderr = function(_, data) + table.insert(stderr, data) + end, + }) + :sync() + return ret, stdout + end + + local core_plugins = require "lvim.plugins" + for _, plugin in pairs(core_plugins) do + local name = plugin[1]:match "/(%S*)" + local url = "https://github.com/" .. plugin[1] + print("checking: " .. name .. ", at: " .. url) + local retval, latest_sha = git_cmd { "ls-remote", url, "origin", "HEAD" } + if retval == 0 then + -- replace dashes, remove postfixes and use lowercase + local normalize_name = (name:gsub("-", "_"):gsub("%.%S+", "")):lower() + list[normalize_name] = latest_sha[1]:gsub("\tHEAD", "") + end + end + utils.write_file(output, "local commit = " .. vim.inspect(list), "w") +end --- TODO: find a new home for these autocommands +return utils |