optimize: streaming update buffer (#2309)
This commit is contained in:
@@ -1012,6 +1012,13 @@ end
|
|||||||
---@param new_lines avante.ui.Line[]
|
---@param new_lines avante.ui.Line[]
|
||||||
---@return { start_line: integer, end_line: integer, content: avante.ui.Line[] }[]
|
---@return { start_line: integer, end_line: integer, content: avante.ui.Line[] }[]
|
||||||
local function get_lines_diff(old_lines, new_lines)
|
local function get_lines_diff(old_lines, new_lines)
|
||||||
|
local remaining_lines = 30
|
||||||
|
local start_line = 0
|
||||||
|
if #new_lines >= #old_lines then
|
||||||
|
start_line = math.max(#old_lines - remaining_lines, 0)
|
||||||
|
old_lines = vim.list_slice(old_lines, start_line + 1)
|
||||||
|
new_lines = vim.list_slice(new_lines, start_line + 1)
|
||||||
|
end
|
||||||
local diffs = {}
|
local diffs = {}
|
||||||
local prev_diff_idx = nil
|
local prev_diff_idx = nil
|
||||||
for i, line in ipairs(new_lines) do
|
for i, line in ipairs(new_lines) do
|
||||||
@@ -1020,19 +1027,23 @@ local function get_lines_diff(old_lines, new_lines)
|
|||||||
else
|
else
|
||||||
if prev_diff_idx ~= nil then
|
if prev_diff_idx ~= nil then
|
||||||
local content = vim.list_slice(new_lines, prev_diff_idx, i - 1)
|
local content = vim.list_slice(new_lines, prev_diff_idx, i - 1)
|
||||||
table.insert(diffs, { start_line = prev_diff_idx, end_line = i, content = content })
|
table.insert(diffs, { start_line = start_line + prev_diff_idx, end_line = start_line + i, content = content })
|
||||||
prev_diff_idx = nil
|
prev_diff_idx = nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if prev_diff_idx ~= nil then
|
if prev_diff_idx ~= nil then
|
||||||
table.insert(
|
table.insert(diffs, {
|
||||||
diffs,
|
start_line = start_line + prev_diff_idx,
|
||||||
{ start_line = prev_diff_idx, end_line = #new_lines + 1, content = vim.list_slice(new_lines, prev_diff_idx) }
|
end_line = start_line + #new_lines + 1,
|
||||||
)
|
content = vim.list_slice(new_lines, prev_diff_idx),
|
||||||
|
})
|
||||||
end
|
end
|
||||||
if #new_lines < #old_lines then
|
if #new_lines < #old_lines then
|
||||||
table.insert(diffs, { start_line = #new_lines + 1, end_line = #old_lines + 1, content = {} })
|
table.insert(
|
||||||
|
diffs,
|
||||||
|
{ start_line = start_line + #new_lines + 1, end_line = start_line + #old_lines + 1, content = {} }
|
||||||
|
)
|
||||||
end
|
end
|
||||||
table.sort(diffs, function(a, b) return a.start_line > b.start_line end)
|
table.sort(diffs, function(a, b) return a.start_line > b.start_line end)
|
||||||
return diffs
|
return diffs
|
||||||
|
|||||||
Reference in New Issue
Block a user