feat(file_selector): support customized filepaths resolver (#1294)

This commit is contained in:
guanghechen
2025-02-18 22:57:59 +08:00
committed by GitHub
parent b09de37b7f
commit 63194b5208
3 changed files with 31 additions and 0 deletions

View File

@@ -417,6 +417,24 @@ To create a customized file_selector, you can specify a customized function to l
end
})
end,
---below is optional
provider_opts = {
---@param params avante.file_selector.opts.IGetFilepathsParams
get_filepaths = function(params)
local cwd = params.cwd ---@type string
local selected_filepaths = params.selected_filepaths ---@type string[]
local cmd = string.format("fd --base-directory '%s' --hidden", vim.fn.fnameescape(cwd))
local output = vim.fn.system(cmd)
local filepaths = vim.split(output, "\n", { trimempty = true })
return vim
.iter(filepaths)
:filter(function(filepath)
return not vim.tbl_contains(selected_filepaths, filepath)
end)
:totable()
end
}
end
}
```

View File

@@ -10,6 +10,10 @@ local Utils = require("avante.utils")
---@field public filepaths string[]
---@field public handler fun(filepaths: string[]|nil): nil
---@class avante.file_selector.opts.IGetFilepathsParams
---@field public cwd string
---@field public selected_filepaths string[]
---@class avante.CoreConfig: avante.Config
local M = {}
---@class avante.Config

View File

@@ -166,6 +166,15 @@ end
function FileSelector:open() self:show_select_ui() end
function FileSelector:get_filepaths()
if type(Config.file_selector.provider_opts.get_filepaths) == "function" then
---@type avante.file_selector.opts.IGetFilepathsParams
local params = {
cwd = Utils.get_project_root(),
selected_filepaths = self.selected_filepaths,
}
return Config.file_selector.provider_opts.get_filepaths(params)
end
local filepaths = get_project_filepaths()
table.sort(filepaths, function(a, b)