From 247fabd6940b285e34cd4c3d30e4012e39274311 Mon Sep 17 00:00:00 2001 From: yetone Date: Fri, 6 Jun 2025 00:02:58 +0800 Subject: [PATCH] fix: the issue of losing the last line and diff performance problems when replace_in_file (#2171) --- lua/avante/llm_tools/replace_in_file.lua | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/lua/avante/llm_tools/replace_in_file.lua b/lua/avante/llm_tools/replace_in_file.lua index 4269805..2119617 100644 --- a/lua/avante/llm_tools/replace_in_file.lua +++ b/lua/avante/llm_tools/replace_in_file.lua @@ -114,6 +114,15 @@ function M.func(opts, on_log, on_complete, session_ctx) local is_streaming = opts.streaming or false if is_streaming then + session_ctx.prev_streaming_diff_timestamp_map = session_ctx.prev_streaming_diff_timestamp_map or {} + local prev_streaming_diff_timestamp = session_ctx.prev_streaming_diff_timestamp_map[opts.tool_use_id] + local current_timestamp = os.time() + if prev_streaming_diff_timestamp ~= nil then + if current_timestamp - prev_streaming_diff_timestamp < 2 then + return false, "Diff hasn't changed in the last 2 seconds" + end + end + session_ctx.prev_streaming_diff_timestamp_map[opts.tool_use_id] = current_timestamp local streaming_diff_lines_count = Utils.count_lines(opts.diff) session_ctx.streaming_diff_lines_count_history = session_ctx.streaming_diff_lines_count_history or {} local prev_streaming_diff_lines_count = session_ctx.streaming_diff_lines_count_history[opts.tool_use_id] @@ -286,7 +295,9 @@ function M.func(opts, on_log, on_complete, session_ctx) base_line_ = base_line_ + distance - old_distance - rough_diff_blocks_to_diff_blocks_cache[cache_key] = { diff_blocks = diff_blocks_, base_line = base_line_ } + if not rough_diff_block.is_replacing then + rough_diff_blocks_to_diff_blocks_cache[cache_key] = { diff_blocks = diff_blocks_, base_line = base_line_ } + end res = vim.list_extend(res, diff_blocks_)