fix(lua): vim.split may trim inner empty items

Problem:
`vim.split('a:::', ':', {trimempty=true})` trims inner empty items.
Regression from 9c49c10470

Solution:
Set `empty_start=false` when first non-empty item is found.
close #23212
This commit is contained in:
Justin M. Keyes 2023-04-21 06:46:18 +02:00
parent 9e79f7433e
commit 622b1ae38a
2 changed files with 6 additions and 2 deletions

View File

@ -138,7 +138,9 @@ function vim.gsplit(s, sep, opts)
local seg = _pass(s:find(sep, start, plain))
-- Trim empty segments from start/end.
if trimempty and seg == '' then
if seg ~= '' then
empty_start = false
elseif trimempty then
while not done and seg == '' do
empty_segs = empty_segs + 1
seg = _pass(s:find(sep, start, plain))

View File

@ -294,9 +294,11 @@ describe('lua stdlib', function()
it('vim.gsplit, vim.split', function()
local tests = {
-- plain trimempty
{ 'a,b', ',', false, false, { 'a', 'b' } },
{ ':aa::::bb:', ':', false, false, { '', 'aa', '', '', '', 'bb', '' } },
{ ':aa::::bb:', ':', false, true, { 'aa', '', '', '', 'bb' } },
{ 'aa::::bb:', ':', false, true, { 'aa', '', '', '', 'bb' } },
{ ':aa::bb:', ':', false, true, { 'aa', '', 'bb' } },
{ '/a/b:/b/\n', '[:\n]', false, true, { '/a/b', '/b/' } },
{ '::ee::ff:', ':', false, false, { '', '', 'ee', '', 'ff', '' } },
@ -315,7 +317,7 @@ describe('lua stdlib', function()
}
for _, t in ipairs(tests) do
eq(t[5], vim.split(t[1], t[2], {plain=t[3], trimempty=t[4]}))
eq(t[5], vim.split(t[1], t[2], {plain=t[3], trimempty=t[4]}), t[1])
end
-- Test old signature