diff --git a/lua/frecency/async_finder.lua b/lua/frecency/async_finder.lua index a087261..12a4654 100644 --- a/lua/frecency/async_finder.lua +++ b/lua/frecency/async_finder.lua @@ -36,12 +36,12 @@ AsyncFinder.new = function(fs, path, entry_maker, initial_results) if self.closed then break end - local fullpath = fs:joinpath(path, name) + local fullpath = fs.joinpath(path, name) if not seen[fullpath] then seen[fullpath] = true index = index + 1 count = count + 1 - local entry = entry_maker { id = 0, count = 0, path = fs:joinpath(path, name), score = 0 } + local entry = entry_maker { id = 0, count = 0, path = fs.joinpath(path, name), score = 0 } if entry then entry.index = index table.insert(self.entries, entry) diff --git a/lua/frecency/fs.lua b/lua/frecency/fs.lua index a0f9df0..6bf7162 100644 --- a/lua/frecency/fs.lua +++ b/lua/frecency/fs.lua @@ -5,6 +5,7 @@ local uv = vim.uv or vim.loop ---@class FrecencyFS ---@field os_homedir string +---@field joinpath fun(...: string): string ---@field private config FrecencyFSConfig ---@field private ignore_regexes string[] local FS = {} @@ -26,20 +27,11 @@ FS.new = function(config) local regex = escaped:gsub("%%%*", ".*"):gsub("%%%?", ".") return "^" .. regex .. "$" end, self.config.ignore_patterns) - return self -end - ----This is needed for Neovim v0.9.0. ----@param ... string ----@return string -function FS:joinpath(...) - if vim.fs.joinpath then - return vim.fs.joinpath(...) - end - local function join_paths(...) + ---This is needed for Neovim v0.9.0. + self.joinpath = vim.fs.joinpath or function(...) return (table.concat({ ... }, "/"):gsub("//+", "/")) end - return join_paths(...) + return self end ---@param path string @@ -58,13 +50,13 @@ function FS:scan_dir(path) vim.fs.dir(path, { depth = self.config.scan_depth, skip = function(dirname) - if self:is_ignored(self:joinpath(path, dirname)) then + if self:is_ignored(self.joinpath(path, dirname)) then return false end end, }) do - local fullpath = self:joinpath(path, name) + local fullpath = self.joinpath(path, name) if type == "file" and not self:is_ignored(fullpath) and gitignore({ path }, fullpath) then coroutine.yield(name) end