diff --git a/lua/forge/health.lua b/lua/forge/health.lua index 7581ab5..da9b093 100644 --- a/lua/forge/health.lua +++ b/lua/forge/health.lua @@ -24,11 +24,9 @@ function M.check() local picker_mod = require('forge.picker') local backend = picker_mod.backend() - local picker_backends = { 'fzf-lua', 'telescope', 'snacks' } local found_any = false - for _, name in ipairs(picker_backends) do - local mod = name == 'fzf-lua' and 'fzf-lua' or name - if pcall(require, mod) then + for _, name in ipairs(picker_mod.detect_order) do + if pcall(require, name) then local suffix = backend == name and ' (active)' or '' vim.health.ok(name .. ' found' .. suffix) found_any = true diff --git a/lua/forge/init.lua b/lua/forge/init.lua index d8085d1..d26df49 100644 --- a/lua/forge/init.lua +++ b/lua/forge/init.lua @@ -725,8 +725,9 @@ function M.config() cfg.keys = false end + local picker_backends = require('forge.picker').backends vim.validate('forge.picker', cfg.picker, function(v) - return v == 'auto' or v == 'fzf-lua' or v == 'telescope' or v == 'snacks' + return v == 'auto' or picker_backends[v] ~= nil end, "'auto', 'fzf-lua', 'telescope', or 'snacks'") vim.validate('forge.sources', cfg.sources, 'table') vim.validate('forge.keys', cfg.keys, function(v) diff --git a/lua/forge/picker/init.lua b/lua/forge/picker/init.lua index 8956791..7ce309d 100644 --- a/lua/forge/picker/init.lua +++ b/lua/forge/picker/init.lua @@ -17,13 +17,14 @@ local M = {} ---@field actions forge.PickerActionDef[] ---@field picker_name string ----@type table -local backends = { +M.backends = { ['fzf-lua'] = 'forge.picker.fzf', telescope = 'forge.picker.telescope', snacks = 'forge.picker.snacks', } +M.detect_order = { 'fzf-lua', 'snacks', 'telescope' } + ---@return string local function detect() local cfg = require('forge').config() @@ -31,16 +32,12 @@ local function detect() if name ~= 'auto' then return name end - if pcall(require, 'fzf-lua') then - return 'fzf-lua' + for _, backend in ipairs(M.detect_order) do + if pcall(require, backend) then + return backend + end end - if pcall(require, 'snacks') then - return 'snacks' - end - if pcall(require, 'telescope') then - return 'telescope' - end - return 'fzf-lua' + return M.detect_order[1] end ---@param entry forge.PickerEntry @@ -64,7 +61,7 @@ end ---@param opts forge.PickerOpts function M.pick(opts) local name = detect() - local mod_path = backends[name] + local mod_path = M.backends[name] if not mod_path then vim.notify('[forge]: unknown picker backend: ' .. name, vim.log.levels.ERROR) return