mirror of
https://github.com/neovim/neovim.git
synced 2025-09-07 11:58:17 +00:00
fix(loader): reset hashes when running the loader
This commit is contained in:
@@ -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:
|
||||
|
Reference in New Issue
Block a user