From 76fe3f615a23b2ec5b039c0b90d0d3408fcb8c67 Mon Sep 17 00:00:00 2001 From: Dmitry Torokhov Date: Fri, 25 Jul 2025 22:24:58 -0700 Subject: [PATCH] refactor(utils): switch debounce() and throttle() to use vim.defer_fn() vim.defer_fn() does exactly what half of Utils.debounce() and Utils.throttle() code does, so use it. While at it add function annotations. --- lua/avante/utils/init.lua | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/lua/avante/utils/init.lua b/lua/avante/utils/init.lua index f40801a..d85fa12 100644 --- a/lua/avante/utils/init.lua +++ b/lua/avante/utils/init.lua @@ -736,6 +736,10 @@ function M.trim_line_numbers(content) return vim.iter(content):map(function(line) return (line:gsub("^L%d+: ", "")) end):totable() end +---Debounce a function call +---@param func fun(...) function to debounce +---@param delay integer delay in milliseconds +---@return fun(...): uv.uv_timer_t debounced function function M.debounce(func, delay) local timer = nil @@ -747,35 +751,31 @@ function M.debounce(func, delay) timer:close() end - timer = vim.loop.new_timer() - if not timer then return end - - timer:start(delay, 0, function() - vim.schedule(function() func(unpack(args)) end) - timer:close() + timer = vim.defer_fn(function() + func(unpack(args)) timer = nil - end) + end, delay) return timer end end +---Throttle a function call +---@param func fun(...) function to throttle +---@param delay integer delay in milliseconds +---@return fun(...): nil throttled function function M.throttle(func, delay) local timer = nil - local args return function(...) - args = { ... } - if timer then return end - timer = vim.loop.new_timer() - if not timer then return end - timer:start(delay, 0, function() - vim.schedule(function() func(unpack(args)) end) - timer:close() + local args = { ... } + + timer = vim.defer_fn(function() + func(unpack(args)) timer = nil - end) + end, delay) end end