diff options
Diffstat (limited to 'runtime/lua/vim/loader.lua')
| -rw-r--r-- | runtime/lua/vim/loader.lua | 22 | 
1 files changed, 15 insertions, 7 deletions
| diff --git a/runtime/lua/vim/loader.lua b/runtime/lua/vim/loader.lua index 38b1e9fc0f..66627fe4e7 100644 --- a/runtime/lua/vim/loader.lua +++ b/runtime/lua/vim/loader.lua @@ -5,7 +5,7 @@ local loaders = package.loaders  local M = {} ----@alias CacheHash {mtime: {sec:number, nsec:number}, size:number, type: string} +---@alias CacheHash {mtime: {nsec: integer, sec: integer}, size: integer, type?: uv.aliases.fs_stat_types}  ---@alias CacheEntry {hash:CacheHash, chunk:string}  ---@class ModuleFindOpts @@ -28,12 +28,11 @@ M.enabled = false  ---@field _rtp string[]  ---@field _rtp_pure string[]  ---@field _rtp_key string +---@field _hashes? table<string, CacheHash>  local Loader = {    VERSION = 3,    ---@type table<string, table<string,ModuleInfo>>    _indexed = {}, -  ---@type table<string, CacheHash> -  _hashes = {},    ---@type table<string, string[]>    _topmods = {},    _loadfile = loadfile, @@ -44,9 +43,13 @@ local Loader = {  }  --- @param path string ---- @return uv.fs_stat.result +--- @return CacheHash  --- @private  function Loader.get_hash(path) +  if not Loader._hashes then +    return uv.fs_stat(path) --[[@as CacheHash]] +  end +    if not Loader._hashes[path] then      -- Note we must never save a stat for a non-existent path.      -- For non-existent paths fs_stat() will return nil. @@ -163,13 +166,16 @@ end  ---@return string|function  ---@private  function Loader.loader(modname) +  Loader._hashes = {}    local ret = M.find(modname)[1]    if ret then      -- Make sure to call the global loadfile so we respect any augmentations done elsewhere.      -- E.g. profiling      local chunk, err = loadfile(ret.modpath) +    Loader._hashes = nil      return chunk or error(err)    end +  Loader._hashes = nil    return '\ncache_loader: module ' .. modname .. ' not found'  end @@ -373,7 +379,9 @@ function M.reset(path)    end    -- Path could be a directory so just clear all the hashes. -  Loader._hashes = {} +  if Loader._hashes then +    Loader._hashes = {} +  end  end  --- Enables the experimental Lua module loader: @@ -441,7 +449,7 @@ function Loader.lsmod(path)        if topname then          Loader._indexed[path][topname] = { modpath = modpath, modname = topname }          Loader._topmods[topname] = Loader._topmods[topname] or {} -        if not vim.tbl_contains(Loader._topmods[topname], path) then +        if not vim.list_contains(Loader._topmods[topname], path) then            table.insert(Loader._topmods[topname], path)          end        end @@ -515,7 +523,7 @@ function M._inspect(opts)          { ms(Loader._stats[stat].time / Loader._stats[stat].total) .. '\n', 'Bold' },        })        for k, v in pairs(Loader._stats[stat]) do -        if not vim.tbl_contains({ 'time', 'total' }, k) then +        if not vim.list_contains({ 'time', 'total' }, k) then            chunks[#chunks + 1] = { '* ' .. k .. ':' .. string.rep(' ', 9 - #k) }            chunks[#chunks + 1] = { tostring(v) .. '\n', 'Number' }          end | 
