From 0d48b8f8e55864e1e174864a10b108b8b96df6ff Mon Sep 17 00:00:00 2001 From: yetone Date: Sat, 25 Jan 2025 01:37:39 +0800 Subject: [PATCH] fix(telescope): handle file listing in non-Git repositories --- lua/avante/file_selector.lua | 14 +++++++++----- lua/avante/utils/init.lua | 7 +++++++ 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/lua/avante/file_selector.lua b/lua/avante/file_selector.lua index c1c8977..e6ea3a2 100644 --- a/lua/avante/file_selector.lua +++ b/lua/avante/file_selector.lua @@ -136,7 +136,7 @@ function FileSelector:fzf_ui(handler) end local close_action = function() handler(nil) end - fzf_lua.files(vim.tbl_deep_extend("force", Config.file_selector.provider_opts, { + fzf_lua.files(vim.tbl_deep_extend("force", { file_ignore_patterns = self.selected_filepaths, prompt = string.format("%s> ", PROMPT_TITLE), fzf_opts = {}, @@ -156,7 +156,7 @@ function FileSelector:fzf_ui(handler) ["esc"] = close_action, ["ctrl-c"] = close_action, }, - })) + }, Config.file_selector.provider_opts)) end function FileSelector:mini_pick_ui(handler) @@ -194,13 +194,17 @@ function FileSelector:telescope_ui(handler) local action_state = require("telescope.actions.state") local action_utils = require("telescope.actions.utils") + local project_root = Utils.get_project_root() + local files = Utils.scan_directory_respect_gitignore(project_root) + files = vim.iter(files):map(function(filepath) return Path:new(filepath):make_relative(project_root) end):totable() + pickers .new( {}, - vim.tbl_extend("force", Config.file_selector.provider_opts, { + vim.tbl_extend("force", { file_ignore_patterns = self.selected_filepaths, prompt_title = string.format("%s> ", PROMPT_TITLE), - finder = finders.new_oneshot_job({ "git", "ls-files" }, { cwd = Utils.get_project_root() }), + finder = finders.new_table(files), sorter = conf.file_sorter(), attach_mappings = function(prompt_bufnr, map) map("i", "", require("telescope.actions").close) @@ -224,7 +228,7 @@ function FileSelector:telescope_ui(handler) end) return true end, - }) + }, Config.file_selector.provider_opts) ) :find() end diff --git a/lua/avante/utils/init.lua b/lua/avante/utils/init.lua index 80cded3..642e8c9 100644 --- a/lua/avante/utils/init.lua +++ b/lua/avante/utils/init.lua @@ -643,6 +643,13 @@ function M.is_ignored(file, ignore_patterns, negate_patterns) return false end +function M.scan_directory_respect_gitignore(directory) + local gitignore_path = directory .. "/.gitignore" + local gitignore_patterns, gitignore_negate_patterns = M.parse_gitignore(gitignore_path) + gitignore_patterns = vim.list_extend(gitignore_patterns, { "%.git", "%.worktree", "__pycache__", "node_modules" }) + return M.scan_directory(directory, gitignore_patterns, gitignore_negate_patterns) +end + function M.scan_directory(directory, ignore_patterns, negate_patterns) local files = {} local handle = vim.loop.fs_scandir(directory)