aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--runtime/lua/vim/shared.lua40
-rw-r--r--test/functional/helpers.lua8
-rw-r--r--test/functional/options/defaults_spec.lua4
-rw-r--r--test/helpers.lua36
4 files changed, 44 insertions, 44 deletions
diff --git a/runtime/lua/vim/shared.lua b/runtime/lua/vim/shared.lua
index 9c49d93596..9dca51ce9a 100644
--- a/runtime/lua/vim/shared.lua
+++ b/runtime/lua/vim/shared.lua
@@ -3,14 +3,27 @@
-- - Can run in vanilla Lua (do not require a running instance of Nvim)
---- Merge map-like tables.
+-- Checks if a list-like (vector) table contains `value`.
+local function tbl_contains(t, value)
+ if type(t) ~= 'table' then
+ error('t must be a table')
+ end
+ for _,v in ipairs(t) do
+ if v == value then
+ return true
+ end
+ end
+ return false
+end
+
+--- Merges two or more map-like tables.
--
--@see |extend()|
--
-- behavior: Decides what to do if a key is found in more than one map:
-- "error": raise an error
--- "keep": skip
--- "force": set the item again
+-- "keep": use value from the leftmost map
+-- "force": use value from the rightmost map
local function tbl_extend(behavior, ...)
if (behavior ~= 'error' and behavior ~= 'keep' and behavior ~= 'force') then
error('invalid "behavior": '..tostring(behavior))
@@ -33,7 +46,28 @@ local function tbl_extend(behavior, ...)
return ret
end
+-- Flattens a list-like table: unrolls and appends nested tables to table `t`.
+local function tbl_flatten(t)
+ -- From https://github.com/premake/premake-core/blob/master/src/base/table.lua
+ local result = {}
+ local function _tbl_flatten(_t)
+ local n = #_t
+ for i = 1, n do
+ local v = _t[i]
+ if type(v) == "table" then
+ _tbl_flatten(v)
+ elseif v then
+ table.insert(result, v)
+ end
+ end
+ end
+ _tbl_flatten(t)
+ return result
+end
+
local module = {
+ tbl_contains = tbl_contains,
tbl_extend = tbl_extend,
+ tbl_flatten = tbl_flatten,
}
return module
diff --git a/test/functional/helpers.lua b/test/functional/helpers.lua
index d0dd634c8c..35084f6cff 100644
--- a/test/functional/helpers.lua
+++ b/test/functional/helpers.lua
@@ -15,7 +15,7 @@ local dedent = global_helpers.dedent
local eq = global_helpers.eq
local ok = global_helpers.ok
local sleep = global_helpers.sleep
-local table_contains = global_helpers.table_contains
+local tbl_contains = global_helpers.tbl_contains
local write_file = global_helpers.write_file
local start_dir = lfs.currentdir()
@@ -165,7 +165,7 @@ local function expect_msg_seq(...)
error(cat_err(final_error,
string.format('got %d messages (ignored %d), expected %d',
#actual_seq, nr_ignored, #expected_seq)))
- elseif table_contains(ignore, msg_type) then
+ elseif tbl_contains(ignore, msg_type) then
nr_ignored = nr_ignored + 1
else
table.insert(actual_seq, msg)
@@ -339,9 +339,9 @@ local function remove_args(args, args_rm)
end
local last = ''
for _, arg in ipairs(args) do
- if table_contains(skip_following, last) then
+ if tbl_contains(skip_following, last) then
last = ''
- elseif table_contains(args_rm, arg) then
+ elseif tbl_contains(args_rm, arg) then
last = arg
else
table.insert(new_args, arg)
diff --git a/test/functional/options/defaults_spec.lua b/test/functional/options/defaults_spec.lua
index 9ff2666ad4..415b526051 100644
--- a/test/functional/options/defaults_spec.lua
+++ b/test/functional/options/defaults_spec.lua
@@ -15,7 +15,7 @@ local neq = helpers.neq
local mkdir = helpers.mkdir
local rmdir = helpers.rmdir
local alter_slashes = helpers.alter_slashes
-local table_contains = helpers.table_contains
+local tbl_contains = helpers.tbl_contains
describe('startup defaults', function()
describe(':filetype', function()
@@ -261,7 +261,7 @@ describe('XDG-based defaults', function()
for _,v in ipairs(rtp) do
local m = string.match(v, [=[[/\]nvim[^/\]*[/\]site.*$]=])
- if m and not table_contains(rv, m) then
+ if m and not tbl_contains(rv, m) then
table.insert(rv, m)
end
end
diff --git a/test/helpers.lua b/test/helpers.lua
index e987fa69db..cc5f05bdee 100644
--- a/test/helpers.lua
+++ b/test/helpers.lua
@@ -612,37 +612,6 @@ local function fixtbl_rec(tbl)
return fixtbl(tbl)
end
--- From https://github.com/premake/premake-core/blob/master/src/base/table.lua
-local function table_flatten(arr)
- local result = {}
- local function _table_flatten(_arr)
- local n = #_arr
- for i = 1, n do
- local v = _arr[i]
- if type(v) == "table" then
- _table_flatten(v)
- elseif v then
- table.insert(result, v)
- end
- end
- end
- _table_flatten(arr)
- return result
-end
-
--- Checks if a list-like (vector) table contains `value`.
-local function table_contains(t, value)
- if type(t) ~= 'table' then
- error('t must be a table')
- end
- for _,v in ipairs(t) do
- if v == value then
- return true
- end
- end
- return false
-end
-
local function hexdump(str)
local len = string.len(str)
local dump = ""
@@ -787,15 +756,12 @@ local module = {
repeated_read_cmd = repeated_read_cmd,
shallowcopy = shallowcopy,
sleep = sleep,
- table_contains = table_contains,
- tbl_extend = shared.tbl_extend,
- table_flatten = table_flatten,
tmpname = tmpname,
uname = uname,
updated = updated,
which = which,
write_file = write_file,
}
-module = shared.tbl_extend('error', module, Paths)
+module = shared.tbl_extend('error', module, Paths, shared)
return module