mirror of
				https://github.com/neovim/neovim.git
				synced 2025-10-26 12:27:24 +00:00 
			
		
		
		
	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
(cherry picked from commit 622b1ae38a)
			
			
This commit is contained in:
		 Justin M. Keyes
					Justin M. Keyes
				
			
				
					committed by
					
						![github-actions[bot]](/assets/img/avatar_default.png) github-actions[bot]
						github-actions[bot]
					
				
			
			
				
	
			
			
			![github-actions[bot]](/assets/img/avatar_default.png) github-actions[bot]
						github-actions[bot]
					
				
			
						parent
						
							5cb6c44e30
						
					
				
				
					commit
					2363d44d5a
				
			| @@ -138,7 +138,9 @@ function vim.gsplit(s, sep, opts) | |||||||
|     local seg = _pass(s:find(sep, start, plain)) |     local seg = _pass(s:find(sep, start, plain)) | ||||||
|  |  | ||||||
|     -- Trim empty segments from start/end. |     -- 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 |       while not done and seg == '' do | ||||||
|         empty_segs = empty_segs + 1 |         empty_segs = empty_segs + 1 | ||||||
|         seg = _pass(s:find(sep, start, plain)) |         seg = _pass(s:find(sep, start, plain)) | ||||||
|   | |||||||
| @@ -294,9 +294,11 @@ describe('lua stdlib', function() | |||||||
|  |  | ||||||
|   it('vim.gsplit, vim.split', function() |   it('vim.gsplit, vim.split', function() | ||||||
|     local tests = { |     local tests = { | ||||||
|  |       --                            plain  trimempty | ||||||
|       { 'a,b',             ',',     false, false, { 'a', 'b' } }, |       { 'a,b',             ',',     false, false, { 'a', 'b' } }, | ||||||
|       { ':aa::::bb:',      ':',     false, false, { '', 'aa', '', '', '', 'bb', '' } }, |       { ':aa::::bb:',      ':',     false, false, { '', 'aa', '', '', '', 'bb', '' } }, | ||||||
|       { ':aa::::bb:',      ':',     false, true,  { 'aa', '', '', '', 'bb' } }, |       { ':aa::::bb:',      ':',     false, true,  { '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/' } }, |       { '/a/b:/b/\n',      '[:\n]', false, true,  { '/a/b', '/b/' } }, | ||||||
|       { '::ee::ff:',       ':',     false, false, { '', '', 'ee', '', 'ff', '' } }, |       { '::ee::ff:',       ':',     false, false, { '', '', 'ee', '', 'ff', '' } }, | ||||||
| @@ -315,7 +317,7 @@ describe('lua stdlib', function() | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     for _, t in ipairs(tests) do |     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 |     end | ||||||
|  |  | ||||||
|     -- Test old signature |     -- Test old signature | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user