From cf9b36f3d97b6f9c66ffff008bc1b5a5dd14ca98 Mon Sep 17 00:00:00 2001 From: Lewis Russell Date: Fri, 25 Jul 2025 15:12:23 +0100 Subject: feat(lua): add vim.list.unique() Problem: No way to deduplicate values in a list in-place Solution: Add `vim.list.unique()` --- test/functional/lua/vim_spec.lua | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'test/functional/lua/vim_spec.lua') diff --git a/test/functional/lua/vim_spec.lua b/test/functional/lua/vim_spec.lua index 9372f5c7b7..14e08cffba 100644 --- a/test/functional/lua/vim_spec.lua +++ b/test/functional/lua/vim_spec.lua @@ -1260,6 +1260,28 @@ describe('lua stdlib', function() eq({ 2 }, exec_lua [[ return vim.list_extend({}, {2;a=1}, -1, 2) ]]) end) + it('vim.list.unique', function() + eq({ 1, 2, 3, 4, 5 }, vim.list.unique({ 1, 2, 2, 3, 4, 4, 5 })) + eq({ 1, 2, 3, 4, 5 }, vim.list.unique({ 1, 2, 3, 4, 4, 5, 1, 2, 3, 2, 1, 2, 3, 4, 5 })) + eq({ 1, 2, 3, 4, 5, field = 1 }, vim.list.unique({ 1, 2, 2, 3, 4, 4, 5, field = 1 })) + + -- Not properly defined, but test anyway + -- luajit evaluates #t as 7, whereas Lua 5.1 evaluates it as 12 + local r = vim.list.unique({ 1, 2, 2, 3, 4, 4, 5, nil, 6, 6, 7, 7 }) + if jit then + eq({ 1, 2, 3, 4, 5, nil, nil, nil, 6, 6, 7, 7 }, r) + else + eq({ 1, 2, 3, 4, 5, nil, 6, 7 }, r) + end + + eq( + { { 1 }, { 2 }, { 3 } }, + vim.list.unique({ { 1 }, { 1 }, { 2 }, { 2 }, { 3 }, { 3 } }, function(x) + return x[1] + end) + ) + end) + it('vim.tbl_add_reverse_lookup', function() eq( true, -- cgit