feat: allow function passed to defaulttable to take an argument (#22839)

Pass the value of the key being accessed to the create function, to
allow users to dynamically generate default values.
This commit is contained in:
Gregory Anders
2023-04-01 08:02:58 -06:00
committed by GitHub
parent 6a4ebf894f
commit 643c0ed571
3 changed files with 16 additions and 5 deletions

View File

@@ -796,13 +796,15 @@ end
--- a.b.c = 1
--- </pre>
---
---@param create function|nil The function called to create a missing value.
---@param create function?(key:any):any The function called to create a missing value.
---@return table Empty table with metamethod
function vim.defaulttable(create)
create = create or vim.defaulttable
create = create or function(_)
return vim.defaulttable()
end
return setmetatable({}, {
__index = function(tbl, key)
rawset(tbl, key, create())
rawset(tbl, key, create(key))
return rawget(tbl, key)
end,
})