Skip to content

Commit 8f0969d

Browse files
pkazmierechasnovski
andcommitted
fix(align): update default_merge to work with edge caes
Details: - After b83127c, `default_merge()` doesn't work with some edge cases which affects `align_strings()`. Co-authored-by: Evgeni Chasnovski <[email protected]>
1 parent b6ac552 commit 8f0969d

File tree

2 files changed

+18
-4
lines changed

2 files changed

+18
-4
lines changed

lua/mini/align.lua

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1611,19 +1611,19 @@ H.default_action_merge = function(parts, opts)
16111611

16121612
-- Precompute combination strings (recycle `merge` array)
16131613
local dims = parts.get_dims()
1614-
local delimiter_arr = {}
1614+
local delim_arr = {}
16151615
for j = 1, dims.col - 1 do
1616-
delimiter_arr[j] = H.slice_mod(delimiter, j)
1616+
delim_arr[j] = H.slice_mod(delimiter, j)
16171617
end
16181618

16191619
-- Do not change indentation
16201620
local first_parts_are_indent = true
16211621
for i = 1, dims.row do
16221622
first_parts_are_indent = first_parts_are_indent and H.is_whitespace(parts[i][1])
16231623
end
1624-
delimiter_arr[1] = first_parts_are_indent and delimiter_arr[1]:gsub('^%s*', '') or delimiter_arr[1]
1624+
delim_arr[1] = (first_parts_are_indent and delim_arr[1] ~= nil) and delim_arr[1]:gsub('^%s*', '') or delim_arr[1]
16251625

1626-
return vim.tbl_map(function(row) return H.concat_array(row, delimiter_arr) end, parts)
1626+
return vim.tbl_map(function(row) return H.concat_array(row, delim_arr) end, parts)
16271627
end
16281628

16291629
-- Work with modifiers --------------------------------------------------------

tests/test_align.lua

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -442,6 +442,13 @@ T['align_strings()']['works with multibyte characters'] = function()
442442
)
443443
end
444444

445+
T['align_strings()']['works in edge cases'] = function()
446+
validate_align_strings({}, {}, {})
447+
validate_align_strings({ '' }, {}, { '' })
448+
validate_align_strings({ '', '' }, {}, { '', '' })
449+
validate_align_strings({ '', ' ' }, {}, { '', ' ' })
450+
end
451+
445452
T['align_strings()']['does not affect input array'] = function()
446453
child.lua([[strings = { 'a=b', 'aa=b' }]])
447454
child.lua([[pre_split = { MiniAlign.new_step('aaa', function(s, _) s[1] = 'xxx' end) }]])
@@ -953,6 +960,13 @@ T['gen_step']['default_merge()']['works'] = function()
953960
)
954961
end
955962

963+
T['gen_step']['default_merge()']['works in edge cases'] = function()
964+
validate_align_strings({}, {}, {})
965+
validate_align_strings({ '' }, {}, { '' })
966+
validate_align_strings({ '', '' }, {}, { '', '' })
967+
validate_align_strings({ '', ' ' }, {}, { '', ' ' })
968+
end
969+
956970
T['gen_step']['default_merge()']['verifies relevant options'] = function()
957971
expect.error(
958972
function() child.lua([[MiniAlign.align_strings({ 'a' }, { merge_delimiter = 1 }, {})]]) end,

0 commit comments

Comments
 (0)