From e64b5f054cd0a3f2eb84bd7935981afb473aa209 Mon Sep 17 00:00:00 2001 From: yetone Date: Sat, 28 Jun 2025 20:07:25 +0800 Subject: [PATCH] fix: selector preview (#2362) --- lua/avante/file_selector.lua | 10 ++++++++++ lua/avante/model_selector.lua | 6 ++++++ lua/avante/ui/selector/providers/snacks.lua | 2 ++ lua/avante/utils/init.lua | 19 +++++++++++++++++++ 4 files changed, 37 insertions(+) diff --git a/lua/avante/file_selector.lua b/lua/avante/file_selector.lua index 52f0530..e408914 100644 --- a/lua/avante/file_selector.lua +++ b/lua/avante/file_selector.lua @@ -221,6 +221,11 @@ function FileSelector:show_selector_ui() selected_item_ids = self.selected_filepaths, provider_opts = Config.file_selector.provider_opts, on_select = function(item_ids) self:handle_path_selection(item_ids) end, + get_preview_content = function(item_id) + local content = Utils.read_file_from_buf_or_disk(item_id) + local filetype = Utils.get_filetype(item_id) + return table.concat(content or {}, "\n"), filetype + end, }) selector:open() end @@ -233,6 +238,11 @@ function FileSelector:show_selector_ui() selected_item_ids = self.selected_filepaths, provider_opts = Config.selector.provider_opts, on_select = function(item_ids) self:handle_path_selection(item_ids) end, + get_preview_content = function(item_id) + local content = Utils.read_file_from_buf_or_disk(item_id) + local filetype = Utils.get_filetype(item_id) + return table.concat(content or {}, "\n"), filetype + end, }) selector:open() end diff --git a/lua/avante/model_selector.lua b/lua/avante/model_selector.lua index f2fff4a..f80d0c5 100644 --- a/lua/avante/model_selector.lua +++ b/lua/avante/model_selector.lua @@ -53,6 +53,7 @@ local function create_model_entries(provider_name, provider_cfg) and { { name = provider_cfg.display_name or (provider_name .. "/" .. provider_cfg.model), + display_name = provider_cfg.display_name or (provider_name .. "/" .. provider_cfg.model), provider_name = provider_name, model = provider_cfg.model, }, @@ -127,6 +128,11 @@ function M.open() provider = Config.selector.provider, provider_opts = Config.selector.provider_opts, on_select = on_select, + get_preview_content = function(item_id) + local model = vim.iter(models):find(function(item) return item.name == item_id end) + if not model then return "", "markdown" end + return model.name, "markdown" + end, }) selector:open() diff --git a/lua/avante/ui/selector/providers/snacks.lua b/lua/avante/ui/selector/providers/snacks.lua index 4bb3a1e..5670763 100644 --- a/lua/avante/ui/selector/providers/snacks.lua +++ b/lua/avante/ui/selector/providers/snacks.lua @@ -26,7 +26,9 @@ function M.show(selector) }) end end + local completed = false + ---@diagnostic disable-next-line: undefined-global Snacks.picker.pick(vim.tbl_deep_extend("force", { source = "select", diff --git a/lua/avante/utils/init.lua b/lua/avante/utils/init.lua index c5fcff3..42bb5b8 100644 --- a/lua/avante/utils/init.lua +++ b/lua/avante/utils/init.lua @@ -570,6 +570,11 @@ function M.trim_space(text) return text:gsub("%s*", "") end +function M.trim_slashes(text) + if not text then return text end + return text:gsub("//n", "/n"):gsub("//r", "/r"):gsub("//t", "/t"):gsub('/"', '"') +end + ---@param original_lines string[] ---@param target_lines string[] ---@param compare_fn fun(line_a: string, line_b: string): boolean @@ -620,6 +625,20 @@ function M.fuzzy_match(original_lines, target_lines) target_lines, function(line_a, line_b) return M.trim_space(line_a) == M.trim_space(line_b) end ) + if start_line ~= nil and end_line ~= nil then return start_line, end_line end + ---trim slashes match + start_line, end_line = M.try_find_match( + original_lines, + target_lines, + function(line_a, line_b) return line_a == M.trim_slashes(line_b) end + ) + if start_line ~= nil and end_line ~= nil then return start_line, end_line end + ---trim slashes and trim_space match + start_line, end_line = M.try_find_match( + original_lines, + target_lines, + function(line_a, line_b) return M.trim_space(line_a) == M.trim_space(M.trim_slashes(line_b)) end + ) return start_line, end_line end