diff options
Diffstat (limited to 'lua/utils')
| -rw-r--r-- | lua/utils/hooks.lua | 33 | ||||
| -rw-r--r-- | lua/utils/init.lua | 121 | ||||
| -rw-r--r-- | lua/utils/table.lua | 24 | 
3 files changed, 170 insertions, 8 deletions
diff --git a/lua/utils/hooks.lua b/lua/utils/hooks.lua new file mode 100644 index 00000000..fa667cfd --- /dev/null +++ b/lua/utils/hooks.lua @@ -0,0 +1,33 @@ +local M = {} + +local Log = require "core.log" +local in_headless = #vim.api.nvim_list_uis() == 0 + +function M.run_pre_update() +  Log:debug "Starting pre-update hook" +end + +---Reset any startup cache files used by Packer and Impatient +---Tip: Useful for clearing any outdated settings +function M.reset_cache() +  _G.__luacache.clear_cache() +  require("plugin-loader"):cache_reset() +end + +function M.run_post_update() +  M.reset_cache() +  Log:debug "Starting post-update hook" +  package.loaded["lsp.templates"] = nil +  require("lsp.templates").generate_templates() + +  if not in_headless then +    vim.schedule(function() +      require("packer").install() +      -- TODO: add a changelog +      vim.notify("Update complete", vim.log.levels.INFO) +      vim.cmd "LspStart" +    end) +  end +end + +return M diff --git a/lua/utils/init.lua b/lua/utils/init.lua index 8ea842ca..eaac54f4 100644 --- a/lua/utils/init.lua +++ b/lua/utils/init.lua @@ -90,16 +90,16 @@ function utils.reload_lv_config()    config:load()    require("keymappings").setup() -- this should be done before loading the plugins -  vim.cmd "source ~/.local/share/lunarvim/lvim/lua/plugins.lua" +  vim.cmd("source " .. utils.join_paths(get_runtime_dir(), "lvim", "lua", "plugins.lua"))    local plugins = require "plugins" -  local plugin_loader = require("plugin-loader").init()    utils.toggle_autoformat() +  local plugin_loader = require "plugin-loader" +  plugin_loader:cache_reset()    plugin_loader:load { plugins, lvim.plugins } -  vim.cmd ":PackerCompile"    vim.cmd ":PackerInstall" +  vim.cmd ":PackerCompile"    -- vim.cmd ":PackerClean" -  local null_ls = require "lsp.null-ls" -  null_ls.setup(vim.bo.filetype, { force_reload = true }) +  require("lsp").setup()    Log:info "Reloaded configuration"  end @@ -119,14 +119,119 @@ function utils.gsub_args(args)    return args  end +--- Returns a table with the default values that are missing. +--- either paramter can be empty. +--@param config (table) table containing entries that take priority over defaults +--@param default_config (table) table contatining default values if found +function utils.apply_defaults(config, default_config) +  config = config or {} +  default_config = default_config or {} +  local new_config = vim.tbl_deep_extend("keep", vim.empty_dict(), config) +  new_config = vim.tbl_deep_extend("keep", new_config, default_config) +  return new_config +end +  --- Checks whether a given path exists and is a file. ---@param filename (string) path to check +--@param path (string) path to check  --@returns (bool) -function utils.is_file(filename) -  local stat = uv.fs_stat(filename) +function utils.is_file(path) +  local stat = uv.fs_stat(path)    return stat and stat.type == "file" or false  end +--- Checks whether a given path exists and is a directory +--@param path (string) path to check +--@returns (bool) +function utils.is_directory(path) +  local stat = uv.fs_stat(path) +  return stat and stat.type == "directory" or false +end + +function utils.write_file(path, txt, flag) +  uv.fs_open(path, flag, 438, function(open_err, fd) +    assert(not open_err, open_err) +    uv.fs_write(fd, txt, -1, function(write_err) +      assert(not write_err, write_err) +      uv.fs_close(fd, function(close_err) +        assert(not close_err, close_err) +      end) +    end) +  end) +end + +utils.join_paths = _G.join_paths + +function utils.write_file(path, txt, flag) +  uv.fs_open(path, flag, 438, function(open_err, fd) +    assert(not open_err, open_err) +    uv.fs_write(fd, txt, -1, function(write_err) +      assert(not write_err, write_err) +      uv.fs_close(fd, function(close_err) +        assert(not close_err, close_err) +      end) +    end) +  end) +end + +function utils.debounce(ms, fn) +  local timer = vim.loop.new_timer() +  return function(...) +    local argv = { ... } +    timer:start(ms, 0, function() +      timer:stop() +      vim.schedule_wrap(fn)(unpack(argv)) +    end) +  end +end + +function utils.search_file(file, args) +  local Job = require "plenary.job" +  local stderr = {} +  local stdout, ret = Job +    :new({ +      command = "grep", +      args = { args, file }, +      cwd = get_cache_dir(), +      on_stderr = function(_, data) +        table.insert(stderr, data) +      end, +    }) +    :sync() +  return stdout, ret, stderr +end + +function utils.file_contains(file, query) +  local stdout, ret, stderr = utils.search_file(file, query) +  if ret == 0 then +    return true +  end +  if not vim.tbl_isempty(stderr) then +    error(vim.inspect(stderr)) +  end +  if not vim.tbl_isempty(stdout) then +    error(vim.inspect(stdout)) +  end +  return false +end + +function utils.log_contains(query) +  local logfile = require("core.log"):get_path() +  local stdout, ret, stderr = utils.search_file(logfile, query) +  if ret == 0 then +    return true +  end +  if not vim.tbl_isempty(stderr) then +    error(vim.inspect(stderr)) +  end +  if not vim.tbl_isempty(stdout) then +    error(vim.inspect(stdout)) +  end +  if not vim.tbl_isempty(stderr) then +    error(vim.inspect(stderr)) +  end +  return false +end +  return utils  -- TODO: find a new home for these autocommands diff --git a/lua/utils/table.lua b/lua/utils/table.lua new file mode 100644 index 00000000..1ac5949e --- /dev/null +++ b/lua/utils/table.lua @@ -0,0 +1,24 @@ +local Table = {} + +--- Find the first entry for which the predicate returns true. +-- @param t The table +-- @param predicate The function called for each entry of t +-- @return The entry for which the predicate returned True or nil +function Table.find_first(t, predicate) +  for _, entry in pairs(t) do +    if predicate(entry) then +      return entry +    end +  end +  return nil +end + +--- Check if the predicate returns True for at least one entry of the table. +-- @param t The table +-- @param predicate The function called for each entry of t +-- @return True if predicate returned True at least once, false otherwise +function Table.contains(t, predicate) +  return Table.find_first(t, predicate) ~= nil +end + +return Table  | 
