feat(lua): implement Iter:join() (#26416)

This commit is contained in:
Gregory Anders 2023-12-05 18:35:22 -08:00 committed by GitHub
parent cc38086039
commit 5b40a1c09d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 30 additions and 0 deletions

View File

@ -3410,6 +3410,19 @@ Iter:fold({init}, {f}) *Iter:fold()*
Return: ~
any
Iter:join({delim}) *Iter:join()*
Collect the iterator into a delimited string.
Each element in the iterator is joined into a string separated by {delim}.
Consumes the iterator.
Parameters: ~
• {delim} (string) Delimiter
Return: ~
(string)
Iter:last() *Iter:last()*
Drains the iterator and returns the last item.

View File

@ -356,6 +356,18 @@ function ListIter.totable(self)
return self._table
end
--- Collect the iterator into a delimited string.
---
--- Each element in the iterator is joined into a string separated by {delim}.
---
--- Consumes the iterator.
---
--- @param delim string Delimiter
--- @return string
function Iter.join(self, delim)
return table.concat(self:totable(), delim)
end
--- Folds ("reduces") an iterator into a single value.
---
--- Examples:

View File

@ -91,6 +91,11 @@ describe('vim.iter', function()
end
end)
it('join()', function()
eq('1, 2, 3', vim.iter({1, 2, 3}):join(', '))
eq('a|b|c|d', vim.iter(vim.gsplit('a|b|c|d', '|')):join('|'))
end)
it('next()', function()
local it = vim.iter({1, 2, 3}):map(function(v) return 2 * v end)
eq(2, it:next())