From f92f56d42ed7ae8bc7ac96d44b0f63661131c895 Mon Sep 17 00:00:00 2001 From: Guldoman Date: Wed, 27 Apr 2022 21:53:35 +0200 Subject: [PATCH] Manage return values from "replacer" function in `Doc:replace` Before the addition of multi-cursor support, we just returned the second return value of the "replacer" function to the caller. With the introduction of multi-cursors, we naively summed the second return values for each cursor. In some cases the "replacer" function doesn't return any second value, so we tried to do math with `nil`, thus throwing errors. Now the second return value is added to a table which is then returned to the caller. --- data/core/doc/init.lua | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/data/core/doc/init.lua b/data/core/doc/init.lua index f9369a46..460e387d 100644 --- a/data/core/doc/init.lua +++ b/data/core/doc/init.lua @@ -448,7 +448,7 @@ end function Doc:replace_cursor(idx, line1, col1, line2, col2, fn) local old_text = self:get_text(line1, col1, line2, col2) - local new_text, n = fn(old_text) + local new_text, res = fn(old_text) if old_text ~= new_text then self:insert(line2, col2, new_text) self:remove(line1, col1, line2, col2) @@ -457,22 +457,22 @@ function Doc:replace_cursor(idx, line1, col1, line2, col2, fn) self:set_selections(idx, line1, col1, line2, col2) end end - return n + return res end function Doc:replace(fn) - local has_selection, n = false, 0 + local has_selection, results = false, { } for idx, line1, col1, line2, col2 in self:get_selections(true) do if line1 ~= line2 or col1 ~= col2 then - n = n + self:replace_cursor(idx, line1, col1, line2, col2, fn) + results[idx] = self:replace_cursor(idx, line1, col1, line2, col2, fn) has_selection = true end end if not has_selection then self:set_selection(table.unpack(self.selections)) - n = n + self:replace_cursor(1, 1, 1, #self.lines, #self.lines[#self.lines], fn) + results[1] = self:replace_cursor(1, 1, 1, #self.lines, #self.lines[#self.lines], fn) end - return n + return results end