diff options
author | LostNeophyte <[email protected]> | 2023-01-10 21:18:17 +0100 |
---|---|---|
committer | GitHub <[email protected]> | 2023-01-10 21:18:17 +0100 |
commit | ccb80e41ee929505c97e682749c74f8db4609d61 (patch) | |
tree | 7fa9c9e025ce17e9c41563940b1f39fa3357d67c /lua/lvim/impatient.lua | |
parent | fc6873809934917b470bff1b072171879899a36b (diff) |
refactor: migrate to lazy.nvim (#3647)
* refactor: convert plugins spec to lazy
* refactor(lazy): remove impatient
* fix(telescope): no more errors if theme is nil
* refactor(lazy): use lazy in plugin_loader
* refactor(lazy): pin plugins with packer's snapshot
* fix: add plugins to rtp before config:init
* fix: fs_stat nil check
* feat: lazy cache
* feat(lazy): reloading
* refactor(lazy): plugin-loader functions
* feat(lazy): cache reset
* refactor: set runtimepath manually
* fix: runtimepath
* refactor(rtp)
* refactor(lazy): packer -> lazy in various places
* fix(lazy): disable tree-sitter ensure installed
* refactor(lazy): restore order to bootstrap
* refactor(lazy): remove unused impatient profiler
* small fixes
* `lvim.plugins` deprecation handling
* fix: deprecation of `requires` in plugin specs
* feat: core plugins pinning
* refactor(lazy): plugin loader tests
* refactor(lazy): use lazy in scripts
* refactor(lazy): which-key keybinds
* chore: format
* fix: installer
* fix: first time setup
* feat: changes required for packaging
commit 951ac2b7c01b5200b973660c967852d1706cce28
Author: LostNeophyte <[email protected]>
Date: Wed Dec 28 13:49:44 2022 +0100
fix: clean folder before copying plugins
commit 64e9afa44b8e528ba527e0510d0d8c2d2237a095
Author: LostNeophyte <[email protected]>
Date: Wed Dec 28 13:35:41 2022 +0100
feat: copy core plugins on first run
commit 2d8e72090c7624f68c09a9aa6582223373a810c1
Author: LostNeophyte <[email protected]>
Date: Wed Dec 28 13:11:22 2022 +0100
feat(utils): fs_copy
commit 85c1f025a6ba13183e85141f75f60e2eefc77bb5
Author: LostNeophyte <[email protected]>
Date: Wed Dec 28 13:04:38 2022 +0100
fix: copy correct example config
* fix: packer specs deprecation handling
* fix: plugin specs deprecation
* feat: pin lazy's version
* fix: remove plugins form rtp before loading lazy
* fix: plugin-loader test
* feat(lazy): add keymappings for profile, log, and debug (#3665)
* feat(lazy): Add keymappings for profile, log, and debug
* feat(lazy): Add keymap for cleaning
* chore: format
* pref: lazy load many plugins
Co-authored-by: Uzair Aftab <[email protected]>
* fix: bootstrap correct version of lazy
* fix: also use CmdLineEnter event for cmp
* fix: don't use lazy's modules before it's set up
* perf: (hack) enable lazy's cache before loading lazy
* fix: plugins.lua
* fix: plugins bump script
* chore: remove debug print
* feat: add rounded border for `:Lazy`
* fix: bufferline flashing
* fix: don't close lazy on startup
* fix: load breadcrumbs on startup
* fix: don't lazy load bufferline
* chore: bump lazy's version
* fix: remove site from rtp (fixes treesitter issues)
* revert default config copying changes
* fix(bootstrap): actually remove plugins dir on windows
* chore: bump lazy's version
* chore: bump lazy's version
Co-authored-by: kylo252 <[email protected]>
Co-authored-by: Uzair Aftab <[email protected]>
Co-authored-by: Uzair Aftab <[email protected]>
Co-authored-by: opalmay <[email protected]>
Diffstat (limited to 'lua/lvim/impatient.lua')
-rw-r--r-- | lua/lvim/impatient.lua | 477 |
1 files changed, 0 insertions, 477 deletions
diff --git a/lua/lvim/impatient.lua b/lua/lvim/impatient.lua deleted file mode 100644 index beb3862a..00000000 --- a/lua/lvim/impatient.lua +++ /dev/null @@ -1,477 +0,0 @@ --- modified version from https://github.com/lewis6991/impatient.nvim -local vim = vim -local api = vim.api -local uv = vim.loop -local _loadfile = loadfile -local get_runtime = api.nvim__get_runtime -local fs_stat = uv.fs_stat -local mpack = vim.mpack -local loadlib = package.loadlib - -local std_cache = vim.fn.stdpath "cache" - -local sep -if jit.os == "Windows" then - sep = "\\" -else - sep = "/" -end - -local std_dirs = { - ["<APPDIR>"] = os.getenv "APPDIR", - ["<VIMRUNTIME>"] = os.getenv "VIMRUNTIME", - ["<STD_DATA>"] = vim.fn.stdpath "data", - ["<STD_CONFIG>"] = vim.fn.stdpath "config", - ["<LVIM_BASE>"] = get_lvim_base_dir(), - ["<LVIM_RUNTIME>"] = get_runtime_dir(), - ["<LVIM_CONFIG>"] = get_config_dir(), -} - -local function modpath_mangle(modpath) - for name, dir in pairs(std_dirs) do - modpath = modpath:gsub(dir, name) - end - return modpath -end - -local function modpath_unmangle(modpath) - for name, dir in pairs(std_dirs) do - modpath = modpath:gsub(name, dir) - end - return modpath -end - --- Overridable by user -local default_config = { - chunks = { - enable = true, - path = std_cache .. sep .. "luacache_chunks", - }, - modpaths = { - enable = true, - path = std_cache .. sep .. "luacache_modpaths", - }, -} - --- State used internally -local default_state = { - chunks = { - cache = {}, - profile = nil, - dirty = false, - get = function(self, path) - return self.cache[modpath_mangle(path)] - end, - set = function(self, path, chunk) - self.cache[modpath_mangle(path)] = chunk - end, - }, - modpaths = { - cache = {}, - profile = nil, - dirty = false, - get = function(self, mod) - if self.cache[mod] then - return modpath_unmangle(self.cache[mod]) - end - end, - set = function(self, mod, path) - self.cache[mod] = modpath_mangle(path) - end, - }, - log = {}, -} - ----@diagnostic disable-next-line: undefined-field -local M = vim.tbl_deep_extend("keep", _G.__luacache_config or {}, default_config, default_state) -_G.__luacache = M - -local function log(...) - M.log[#M.log + 1] = table.concat({ string.format(...) }, " ") -end - -local function print_log() - for _, l in ipairs(M.log) do - print(l) - end -end - -local function hash(modpath) - local stat = fs_stat(modpath) - if stat then - return stat.mtime.sec .. stat.mtime.nsec .. stat.size - end - error("Could not hash " .. modpath) -end - -local function profile(m, entry, name, loader) - if m.profile then - local mp = m.profile - mp[entry] = mp[entry] or {} - if not mp[entry].loader and loader then - mp[entry].loader = loader - end - if not mp[entry][name] then - mp[entry][name] = uv.hrtime() - end - end -end - -local function mprofile(mod, name, loader) - profile(M.modpaths, mod, name, loader) -end - -local function cprofile(path, name, loader) - if M.chunks.profile then - path = modpath_mangle(path) - end - profile(M.chunks, path, name, loader) -end - -function M.enable_profile() - local P = require "lvim.impatient.profile" - - M.chunks.profile = {} - M.modpaths.profile = {} - - loadlib = function(path, fun) - cprofile(path, "load_start") - local f, err = package.loadlib(path, fun) - cprofile(path, "load_end", "standard") - return f, err - end - - P.setup(M.modpaths.profile) - - api.nvim_create_user_command("LuaCacheProfile", function() - P.print_profile(M, std_dirs) - end, {}) -end - -local function get_runtime_file_from_parent(basename, paths) - -- Look in the cache to see if we have already loaded a parent module. - -- If we have then try looking in the parents directory first. - local parents = vim.split(basename, sep) - for i = #parents, 1, -1 do - local parent = table.concat(vim.list_slice(parents, 1, i), sep) - local ppath = M.modpaths:get(parent) - if ppath then - if ppath:sub(-9) == (sep .. "init.lua") then - ppath = ppath:sub(1, -10) -- a/b/init.lua -> a/b - else - ppath = ppath:sub(1, -5) -- a/b.lua -> a/b - end - - for _, path in ipairs(paths) do - -- path should be of form 'a/b/c.lua' or 'a/b/c/init.lua' - local modpath = ppath .. sep .. path:sub(#("lua" .. sep .. parent) + 2) - if fs_stat(modpath) then - return modpath, "cache(p)" - end - end - end - end -end - -local rtp = vim.split(vim.o.rtp, ",") - --- Make sure modpath is in rtp and that modpath is in paths. -local function validate_modpath(modpath, paths) - local match = false - for _, p in ipairs(paths) do - if vim.endswith(modpath, p) then - match = true - break - end - end - if not match then - return false - end - for _, dir in ipairs(rtp) do - if vim.startswith(modpath, dir) then - return fs_stat(modpath) ~= nil - end - end - return false -end - -local function get_runtime_file_cached(basename, paths) - local modpath, loader - local mp = M.modpaths - if mp.enable then - local modpath_cached = mp:get(basename) - if modpath_cached then - modpath, loader = modpath_cached, "cache" - else - modpath, loader = get_runtime_file_from_parent(basename, paths) - end - - if modpath and not validate_modpath(modpath, paths) then - modpath = nil - - -- Invalidate - mp.cache[basename] = nil - mp.dirty = true - end - end - - if not modpath then - -- What Neovim does by default; slowest - modpath, loader = get_runtime(paths, false, { is_lua = true })[1], "standard" - end - - if modpath then - mprofile(basename, "resolve_end", loader) - if mp.enable and loader ~= "cache" then - log("Creating cache for module %s", basename) - mp:set(basename, modpath) - mp.dirty = true - end - end - - return modpath -end - -local function extract_basename(pats) - local basename - - -- Deconstruct basename from pats - for _, pat in ipairs(pats) do - for i, npat in ipairs { - -- Ordered by most specific - "lua" - .. sep - .. "(.*)" - .. sep - .. "init%.lua", - "lua" .. sep .. "(.*)%.lua", - } do - local m = pat:match(npat) - if i == 2 and m and m:sub(-4) == "init" then - m = m:sub(0, -6) - end - if not basename then - if m then - basename = m - end - elseif m and m ~= basename then - -- matches are inconsistent - return - end - end - end - - return basename -end - -local function get_runtime_cached(pats, all, opts) - local fallback = false - if all or not opts or not opts.is_lua then - -- Fallback - fallback = true - end - - local basename - - if not fallback then - basename = extract_basename(pats) - end - - if fallback or not basename then - return get_runtime(pats, all, opts) - end - - return { get_runtime_file_cached(basename, pats) } -end - --- Copied from neovim/src/nvim/lua/vim.lua with two lines changed -local function load_package(name) - local basename = name:gsub("%.", sep) - local paths = { "lua" .. sep .. basename .. ".lua", "lua" .. sep .. basename .. sep .. "init.lua" } - - -- Original line: - -- local found = vim.api.nvim__get_runtime(paths, false, {is_lua=true}) - local found = { get_runtime_file_cached(basename, paths) } - if #found > 0 then - local f, err = loadfile(found[1]) - return f or error(err) - end - - local so_paths = {} - for _, trail in ipairs(vim._so_trails) do - local path = "lua" .. trail:gsub("?", basename) -- so_trails contains a leading slash - table.insert(so_paths, path) - end - - -- Original line: - -- found = vim.api.nvim__get_runtime(so_paths, false, {is_lua=true}) - found = { get_runtime_file_cached(basename, so_paths) } - if #found > 0 then - -- Making function name in Lua 5.1 (see src/loadlib.c:mkfuncname) is - -- a) strip prefix up to and including the first dash, if any - -- b) replace all dots by underscores - -- c) prepend "luaopen_" - -- So "foo-bar.baz" should result in "luaopen_bar_baz" - local dash = name:find("-", 1, true) - local modname = dash and name:sub(dash + 1) or name - local f, err = loadlib(found[1], "luaopen_" .. modname:gsub("%.", "_")) - return f or error(err) - end - return nil -end - -local function load_from_cache(path) - local mc = M.chunks - - local cache = mc:get(path) - - if not cache then - return nil, string.format("No cache for path %s", path) - end - - local mhash, codes = unpack(cache) - - if mhash ~= hash(path) then - mc:set(path) - mc.dirty = true - return nil, string.format("Stale cache for path %s", path) - end - - local chunk = loadstring(codes) - - if not chunk then - mc:set(path) - mc.dirty = true - return nil, string.format("Cache error for path %s", path) - end - - return chunk -end - -local function loadfile_cached(path) - cprofile(path, "load_start") - - local chunk, err - - if M.chunks.enable then - chunk, err = load_from_cache(path) - if chunk and not err then - log("Loaded cache for path %s", path) - cprofile(path, "load_end", "cache") - return chunk - end - log(err) - end - - chunk, err = _loadfile(path) - - if not err and M.chunks.enable then - log("Creating cache for path %s", path) - M.chunks:set(path, { hash(path), string.dump(chunk) }) - M.chunks.dirty = true - end - - cprofile(path, "load_end", "standard") - return chunk, err -end - -function M.save_cache() - local function _save_cache(t) - if not t.enable then - return - end - if t.dirty then - log("Updating chunk cache file: %s", t.path) - local f = assert(io.open(t.path, "w+b")) - f:write(mpack.encode(t.cache)) - f:flush() - t.dirty = false - end - end - _save_cache(M.chunks) - _save_cache(M.modpaths) -end - -local function clear_cache() - local function _clear_cache(t) - t.cache = {} - os.remove(t.path) - end - _clear_cache(M.chunks) - _clear_cache(M.modpaths) -end - -local function init_cache() - local function _init_cache(t) - if not t.enable then - return - end - if fs_stat(t.path) then - log("Loading cache file %s", t.path) - local f = assert(io.open(t.path, "rb")) - local ok - ok, t.cache = pcall(function() - return mpack.decode(f:read "*a") - end) - - if not ok then - log("Corrupted cache file, %s. Invalidating...", t.path) - os.remove(t.path) - t.cache = {} - end - t.dirty = not ok - end - end - - if not uv.fs_stat(std_cache) then - vim.fn.mkdir(std_cache, "p") - end - - _init_cache(M.chunks) - _init_cache(M.modpaths) -end - -local function setup() - init_cache() - - -- Usual package loaders - -- 1. package.preload - -- 2. vim._load_package - -- 3. package.path - -- 4. package.cpath - -- 5. all-in-one - - -- Override default functions - for i, loader in ipairs(package.loaders) do - if loader == vim._load_package then - package.loaders[i] = load_package - break - end - end - vim._load_package = load_package - - vim.api.nvim__get_runtime = get_runtime_cached - loadfile = loadfile_cached - - local augroup = api.nvim_create_augroup("impatient", {}) - - api.nvim_create_user_command("LuaCacheClear", clear_cache, {}) - api.nvim_create_user_command("LuaCacheLog", print_log, {}) - - api.nvim_create_autocmd({ "VimEnter", "VimLeave" }, { - group = augroup, - callback = M.save_cache, - }) - - api.nvim_create_autocmd("OptionSet", { - group = augroup, - pattern = "runtimepath", - callback = function() - rtp = vim.split(vim.o.rtp, ",") - end, - }) -end - -setup() - -return M |