aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--runtime/doc/if_lua.txt37
-rw-r--r--runtime/lua/vim/shared.lua56
-rw-r--r--src/nvim/lua/vim.lua41
-rw-r--r--test/helpers.lua25
4 files changed, 78 insertions, 81 deletions
diff --git a/runtime/doc/if_lua.txt b/runtime/doc/if_lua.txt
index 32751de3a2..e7e28e041d 100644
--- a/runtime/doc/if_lua.txt
+++ b/runtime/doc/if_lua.txt
@@ -472,37 +472,52 @@ trim({s}) *vim.trim()*
The string with all whitespaces trimmed from its beginning
and end
+
+
+
deepcopy({orig}) *vim.deepcopy()*
- Performs a deep copy of the given object, and returns that
- copy. For a non-table object, that just means a usual copy of
- the object, while for a table all subtables are copied
- recursively.
+ Returns a deep copy of the given object. Non-table objects are
+ copied as in a typical Lua assignment, whereas table objects
+ are copied recursively.
Parameters: ~
- {orig} Table The table to copy
+ {orig} Table to copy
Return: ~
- A new table where the keys and values are deepcopies of
- the keys and values from the original table.
-
+ New table of copied keys and (nested) values.
+tbl_contains({t}, {value}) *vim.tbl_contains()*
+ Checks if a list-like (vector) table contains `value` .
+ Parameters: ~
+ {t} Table to check
+ {value} Value to compare
-tbl_contains({t}, {value}) *vim.tbl_contains()*
- TODO: Documentation
+ Return: ~
+ true if `t` contains `value`
tbl_extend({behavior}, {...}) *vim.tbl_extend()*
+ Merges two or more map-like tables.
+
Parameters: ~
{behavior} Decides what to do if a key is found in more
than one map:
- "error": raise an error
- "keep": use value from the leftmost map
- "force": use value from the rightmost map
+ {...} Two or more map-like tables.
See also: ~
|extend()|
tbl_flatten({t}) *vim.tbl_flatten()*
- TODO: Documentation
+ Creates a copy of a list-like table such that any nested
+ tables are "unrolled" and appended to the result.
+
+ Parameters: ~
+ {t} List-like table
+
+ Return: ~
+ Flattened copy of the given list-like table.
vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/lua/vim/shared.lua b/runtime/lua/vim/shared.lua
index ec0c74e257..f5d7a51724 100644
--- a/runtime/lua/vim/shared.lua
+++ b/runtime/lua/vim/shared.lua
@@ -1,9 +1,43 @@
---- Shared functions
--- - Used by Nvim and tests
--- - Can run in vanilla Lua (do not require a running instance of Nvim)
+-- Functions shared by Nvim and its test-suite.
+--
+-- The singular purpose of this module is to share code with the Nvim
+-- test-suite. If, in the future, Nvim itself is used to run the test-suite
+-- instead of "vanilla Lua", these functions could move to src/nvim/lua/vim.lua
--- Checks if a list-like (vector) table contains `value`.
+--- Returns a deep copy of the given object. Non-table objects are copied as
+--- in a typical Lua assignment, whereas table objects are copied recursively.
+---
+--@param orig Table to copy
+--@returns New table of copied keys and (nested) values.
+local function deepcopy(orig)
+ error()
+end
+local function _id(v)
+ return v
+end
+local deepcopy_funcs = {
+ table = function(orig)
+ local copy = {}
+ for k, v in pairs(orig) do
+ copy[deepcopy(k)] = deepcopy(v)
+ end
+ return copy
+ end,
+ number = _id,
+ string = _id,
+ ['nil'] = _id,
+ boolean = _id,
+}
+deepcopy = function(orig)
+ return deepcopy_funcs[type(orig)](orig)
+end
+
+--- Checks if a list-like (vector) table contains `value`.
+---
+--@param t Table to check
+--@param value Value to compare
+--@returns true if `t` contains `value`
local function tbl_contains(t, value)
if type(t) ~= 'table' then
error('t must be a table')
@@ -16,14 +50,15 @@ local function tbl_contains(t, value)
return false
end
--- Merges two or more map-like tables.
---
+--- Merges two or more map-like tables.
+---
--@see |extend()|
---
+---
--@param behavior Decides what to do if a key is found in more than one map:
--- - "error": raise an error
--- - "keep": use value from the leftmost map
--- - "force": use value from the rightmost map
+--@param ... Two or more map-like tables.
local function tbl_extend(behavior, ...)
if (behavior ~= 'error' and behavior ~= 'keep' and behavior ~= 'force') then
error('invalid "behavior": '..tostring(behavior))
@@ -46,7 +81,11 @@ local function tbl_extend(behavior, ...)
return ret
end
--- Flattens a list-like table: unrolls and appends nested tables to table `t`.
+--- Creates a copy of a list-like table such that any nested tables are
+--- "unrolled" and appended to the result.
+---
+--@param t List-like table
+--@returns Flattened copy of the given list-like table.
local function tbl_flatten(t)
-- From https://github.com/premake/premake-core/blob/master/src/base/table.lua
local result = {}
@@ -66,6 +105,7 @@ local function tbl_flatten(t)
end
local module = {
+ deepcopy = deepcopy,
tbl_contains = tbl_contains,
tbl_extend = tbl_extend,
tbl_flatten = tbl_flatten,
diff --git a/src/nvim/lua/vim.lua b/src/nvim/lua/vim.lua
index 69038f8c89..3c1a9a86d0 100644
--- a/src/nvim/lua/vim.lua
+++ b/src/nvim/lua/vim.lua
@@ -1,10 +1,10 @@
-- Nvim-Lua stdlib: the `vim` module (:help lua-stdlib)
--
-- Lua code lives in one of three places:
--- 1. The runtime (`runtime/lua/vim/`). For "nice to have" features, e.g.
--- the `inspect` and `lpeg` modules.
--- 2. The `vim.shared` module: code shared between Nvim and its test-suite.
--- 3. Compiled-into Nvim itself (`src/nvim/lua/`).
+-- 1. runtime/lua/vim/ (the runtime): For "nice to have" features, e.g. the
+-- `inspect` and `lpeg` modules.
+-- 2. runtime/lua/vim/shared.lua: Code shared between Nvim and tests.
+-- 3. src/nvim/lua/: Compiled-into Nvim itself.
--
-- Guideline: "If in doubt, put it in the runtime".
--
@@ -231,38 +231,6 @@ local function trim(s)
return result
end
---- Performs a deep copy of the given object, and returns that copy.
---- For a non-table object, that just means a usual copy of the object,
---- while for a table all subtables are copied recursively.
---@param orig Table The table to copy
---@returns A new table where the keys and values are deepcopies of the keys
---- and values from the original table.
-local function deepcopy(orig)
- error()
-end
-
-local function _id(v)
- return v
-end
-
-local deepcopy_funcs = {
- table = function(orig)
- local copy = {}
- for k, v in pairs(orig) do
- copy[deepcopy(k)] = deepcopy(v)
- end
- return copy
- end,
- number = _id,
- string = _id,
- ['nil'] = _id,
- boolean = _id,
-}
-
-deepcopy = function(orig)
- return deepcopy_funcs[type(orig)](orig)
-end
-
local function __index(t, key)
if key == 'inspect' then
t.inspect = require('vim.inspect')
@@ -282,7 +250,6 @@ local module = {
trim = trim,
split = split,
gsplit = gsplit,
- deepcopy = deepcopy,
}
setmetatable(module, {
diff --git a/test/helpers.lua b/test/helpers.lua
index cc5f05bdee..3311f3ef97 100644
--- a/test/helpers.lua
+++ b/test/helpers.lua
@@ -336,30 +336,6 @@ local function shallowcopy(orig)
return copy
end
-local deepcopy
-
-local function id(v)
- return v
-end
-
-local deepcopy_funcs = {
- table = function(orig)
- local copy = {}
- for k, v in pairs(orig) do
- copy[deepcopy(k)] = deepcopy(v)
- end
- return copy
- end,
- number = id,
- string = id,
- ['nil'] = id,
- boolean = id,
-}
-
-deepcopy = function(orig)
- return deepcopy_funcs[type(orig)](orig)
-end
-
local REMOVE_THIS = {}
local function mergedicts_copy(d1, d2)
@@ -728,7 +704,6 @@ local module = {
check_logs = check_logs,
concat_tables = concat_tables,
dedent = dedent,
- deepcopy = deepcopy,
dictdiff = dictdiff,
eq = eq,
expect_err = expect_err,