diff options
-rw-r--r-- | runtime/lua/vim/shared.lua | 40 | ||||
-rw-r--r-- | test/functional/helpers.lua | 8 | ||||
-rw-r--r-- | test/functional/options/defaults_spec.lua | 4 | ||||
-rw-r--r-- | test/helpers.lua | 36 |
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 |