aboutsummaryrefslogtreecommitdiff
path: root/runtime/doc
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/doc')
-rw-r--r--runtime/doc/lua.txt13
-rw-r--r--runtime/doc/news.txt2
2 files changed, 13 insertions, 2 deletions
diff --git a/runtime/doc/lua.txt b/runtime/doc/lua.txt
index 9c9a9db175..e01e16b8f4 100644
--- a/runtime/doc/lua.txt
+++ b/runtime/doc/lua.txt
@@ -1905,15 +1905,24 @@ vim.deep_equal({a}, {b}) *vim.deep_equal()*
Return: ~
(boolean) `true` if values are equals, else `false`
-vim.deepcopy({orig}) *vim.deepcopy()*
+vim.deepcopy({orig}, {noref}) *vim.deepcopy()*
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.
Functions are naively copied, so functions in the copied table point to
the same functions as those in the input table. Userdata and threads are
not copied and will throw an error.
+ Note: `noref=true` is much more performant on tables with unique table
+ fields, while `noref=false` is more performant on tables that reuse table
+ fields.
+
Parameters: ~
- • {orig} (table) Table to copy
+ • {orig} (table) Table to copy
+ • {noref} (boolean|nil) When `false` (default) a contained table is
+ only copied once and all references point to this single
+ copy. When `true` every occurrence of a table results in a
+ new copy. This also means that a cyclic reference can cause
+ `deepcopy()` to fail.
Return: ~
(table) Table of copied keys and (nested) values.
diff --git a/runtime/doc/news.txt b/runtime/doc/news.txt
index 03e1989e62..d3ace5f33b 100644
--- a/runtime/doc/news.txt
+++ b/runtime/doc/news.txt
@@ -282,6 +282,8 @@ The following new APIs and features were added.
|vim.diagnostic.get()| when only the number of diagnostics is needed, but
not the diagnostics themselves.
+• |vim.deepcopy()| has a `noref` argument to avoid hashing table values.
+
==============================================================================
CHANGED FEATURES *news-changed*