aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/vim/shared.lua
diff options
context:
space:
mode:
authorJustin M. Keyes <justinkz@gmail.com>2024-04-16 07:31:43 -0700
committerGitHub <noreply@github.com>2024-04-16 07:31:43 -0700
commitfe4583127f0aaf631b05ad3dff7ebb0126314cf2 (patch)
tree9c2ff3fd0d9cc3705969bc12f5147f9565fa51e5 /runtime/lua/vim/shared.lua
parent5cfdaaaeac0f53a621696d8eb6b5a3ba90438c98 (diff)
downloadrneovim-fe4583127f0aaf631b05ad3dff7ebb0126314cf2.tar.gz
rneovim-fe4583127f0aaf631b05ad3dff7ebb0126314cf2.tar.bz2
rneovim-fe4583127f0aaf631b05ad3dff7ebb0126314cf2.zip
fix: vim.validate() order is not deterministic #28377
Problem: The order of the validation performed by vim.validate() is unpredictable. - harder to write reliable tests. - confusing UX because validation result might return different errors randomly. Solution: Iterate the input using `vim.spairs()`. Future: Ideally, the caller could provide an "ordered dict".
Diffstat (limited to 'runtime/lua/vim/shared.lua')
-rw-r--r--runtime/lua/vim/shared.lua7
1 files changed, 4 insertions, 3 deletions
diff --git a/runtime/lua/vim/shared.lua b/runtime/lua/vim/shared.lua
index a9eebf36da..eb51c244ef 100644
--- a/runtime/lua/vim/shared.lua
+++ b/runtime/lua/vim/shared.lua
@@ -578,7 +578,7 @@ end
---@return fun(table: table<K, V>, index?: K):K, V # |for-in| iterator over sorted keys and their values
---@return T
function vim.spairs(t)
- vim.validate({ t = { t, 't' } })
+ assert(type(t) == 'table', ('expected table, got %s'):format(type(t)))
--- @cast t table<any,any>
-- collect the keys
@@ -795,7 +795,7 @@ do
return false, string.format('opt: expected table, got %s', type(opt))
end
- for param_name, spec in pairs(opt) do
+ for param_name, spec in vim.spairs(opt) do
if type(spec) ~= 'table' then
return false, string.format('opt[%s]: expected table, got %s', param_name, type(spec))
end
@@ -851,7 +851,8 @@ do
return true
end
- --- Validates a parameter specification (types and values).
+ --- Validates a parameter specification (types and values). Specs are evaluated in alphanumeric
+ --- order, until the first failure.
---
--- Usage example:
---