diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2023-04-21 07:26:44 +0200 |
---|---|---|
committer | Justin M. Keyes <justinkz@gmail.com> | 2023-04-21 13:50:22 +0200 |
commit | 824766612d4e7d53b717bd1e2b0d1d895054accd (patch) | |
tree | b056ee5f2a46fb376d19166504331c83356ba6a4 /runtime/lua/vim/shared.lua | |
parent | 622b1ae38a36c3d26fad19faa788d622f7835921 (diff) | |
download | rneovim-824766612d4e7d53b717bd1e2b0d1d895054accd.tar.gz rneovim-824766612d4e7d53b717bd1e2b0d1d895054accd.tar.bz2 rneovim-824766612d4e7d53b717bd1e2b0d1d895054accd.zip |
refactor(lua): simplify vim.gsplit impl
Diffstat (limited to 'runtime/lua/vim/shared.lua')
-rw-r--r-- | runtime/lua/vim/shared.lua | 31 |
1 files changed, 13 insertions, 18 deletions
diff --git a/runtime/lua/vim/shared.lua b/runtime/lua/vim/shared.lua index 08f8afd087..5f4ea8822b 100644 --- a/runtime/lua/vim/shared.lua +++ b/runtime/lua/vim/shared.lua @@ -100,10 +100,9 @@ function vim.gsplit(s, sep, opts) local start = 1 local done = false - -- For `trimempty`: + -- For `trimempty`: queue of collected segments, to be emitted at next pass. + local segs = {} local empty_start = true -- Only empty segments seen so far. - local empty_segs = 0 -- Empty segments found between non-empty segments. - local nonemptyseg = nil local function _pass(i, j, ...) if i then @@ -118,14 +117,9 @@ function vim.gsplit(s, sep, opts) end return function() - if trimempty and empty_segs > 0 then - -- trimempty: Pop the collected empty segments. - empty_segs = empty_segs - 1 - return '' - elseif trimempty and nonemptyseg then - local seg = nonemptyseg - nonemptyseg = nil - return seg + if trimempty and #segs > 0 then + -- trimempty: Pop the collected segments. + return table.remove(segs) elseif done or (s == '' and sep == '') then return nil elseif sep == '' then @@ -138,23 +132,24 @@ function vim.gsplit(s, sep, opts) local seg = _pass(s:find(sep, start, plain)) -- Trim empty segments from start/end. - if seg ~= '' then + if trimempty and seg ~= '' then empty_start = false - elseif trimempty then + elseif trimempty and seg == '' then while not done and seg == '' do - empty_segs = empty_segs + 1 + table.insert(segs, 1, '') seg = _pass(s:find(sep, start, plain)) end if done and seg == '' then return nil elseif empty_start then empty_start = false - empty_segs = 0 + segs = {} return seg end - nonemptyseg = seg ~= '' and seg or nil - seg = '' - empty_segs = empty_segs - 1 + if seg ~= '' then + table.insert(segs, 1, seg) + end + return table.remove(segs) end return seg |