mirror of
https://github.com/neovim/neovim.git
synced 2025-10-21 17:21:49 +00:00
feat(func): allow manual cache invalidation for _memoize
This commit also adds some tests for the existing memoization functionality.
This commit is contained in:

committed by
Christian Clason

parent
54ac406649
commit
b61051ccb4
@@ -3,9 +3,6 @@ local M = {}
|
||||
-- TODO(lewis6991): Private for now until:
|
||||
-- - There are other places in the codebase that could benefit from this
|
||||
-- (e.g. LSP), but might require other changes to accommodate.
|
||||
-- - Invalidation of the cache needs to be controllable. Using weak tables
|
||||
-- is an acceptable invalidation policy, but it shouldn't be the only
|
||||
-- one.
|
||||
-- - I don't think the story around `hash` is completely thought out. We
|
||||
-- may be able to have a good default hash by hashing each argument,
|
||||
-- so basically a better 'concat'.
|
||||
@@ -17,6 +14,10 @@ local M = {}
|
||||
--- Internally uses a |lua-weaktable| to cache the results of {fn} meaning the
|
||||
--- cache will be invalidated whenever Lua does garbage collection.
|
||||
---
|
||||
--- The cache can also be manually invalidated by calling `:clear()` on the returned object.
|
||||
--- Calling this function with no arguments clears the entire cache; otherwise, the arguments will
|
||||
--- be interpreted as function inputs, and only the cache entry at their hash will be cleared.
|
||||
---
|
||||
--- The memoized function returns shared references so be wary about
|
||||
--- mutating return values.
|
||||
---
|
||||
@@ -32,11 +33,12 @@ local M = {}
|
||||
--- first n arguments passed to {fn}.
|
||||
---
|
||||
--- @param fn F Function to memoize.
|
||||
--- @param strong? boolean Do not use a weak table
|
||||
--- @param weak? boolean Use a weak table (default `true`)
|
||||
--- @return F # Memoized version of {fn}
|
||||
--- @nodoc
|
||||
function M._memoize(hash, fn, strong)
|
||||
return require('vim.func._memoize')(hash, fn, strong)
|
||||
function M._memoize(hash, fn, weak)
|
||||
-- this is wrapped in a function to lazily require the module
|
||||
return require('vim.func._memoize')(hash, fn, weak)
|
||||
end
|
||||
|
||||
return M
|
||||
|
Reference in New Issue
Block a user