Skip to content

Commit a3956db

Browse files
committed
refactor(picker): resolve provider
1 parent d3e9c6a commit a3956db

File tree

1 file changed

+51
-21
lines changed

1 file changed

+51
-21
lines changed

lua/leetcode/picker/init.lua

Lines changed: 51 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,65 @@
11
local log = require("leetcode.logger")
22
local config = require("leetcode.config")
33

4+
local provider_order = { "snacks-picker", "fzf-lua", "telescope" }
5+
local providers = {
6+
["fzf-lua"] = {
7+
name = "fzf",
8+
is_available = function()
9+
return pcall(require, "fzf-lua")
10+
end,
11+
},
12+
["snacks-picker"] = {
13+
name = "snacks",
14+
is_available = function()
15+
return pcall(function() ---@diagnostic disable-next-line: undefined-field
16+
assert(Snacks.config["picker"].enabled)
17+
end)
18+
end,
19+
},
20+
["telescope"] = {
21+
name = "telescope",
22+
is_available = function()
23+
return pcall(require, "telescope")
24+
end,
25+
},
26+
}
27+
28+
local available_pickers = table.concat(
29+
vim.tbl_map(function(p)
30+
return providers[p].name
31+
end, provider_order),
32+
", "
33+
)
34+
435
---@return "fzf" | "telescope" | "snacks"
536
local function resolve_provider()
637
---@type string
738
local provider = config.user.picker.provider
839

940
if provider == nil then
10-
local fzf_ok = pcall(require, "fzf-lua")
11-
if fzf_ok then
12-
return "fzf"
13-
end
14-
local telescope_ok = pcall(require, "telescope")
15-
if telescope_ok then
16-
return "telescope"
17-
end
18-
local snacks_ok = pcall(require, "snacks.picker")
19-
if snacks_ok then
20-
return "snacks"
21-
end
22-
error("no supported picker provider found")
23-
else
24-
local mod = provider
25-
if provider == "snacks-picker" then
26-
provider = "snacks"
27-
mod = "snacks.picker"
41+
for _, key in ipairs(provider_order) do
42+
local picker = providers[key]
43+
44+
if picker.is_available() then
45+
return picker.name
46+
end
2847
end
29-
local provider_ok = pcall(require, mod)
30-
assert(provider_ok, ("specified picker provider not found: `%s`"):format(provider))
31-
return provider == "fzf-lua" and "fzf" or provider
48+
49+
error(("No picker is available. Please install one of the following: `%s`") --
50+
:format(available_pickers))
3251
end
52+
53+
local picker = providers[provider]
54+
assert(
55+
picker,
56+
("Picker `%s` is not supported. Available pickers: `%s`") --
57+
:format(provider, available_pickers)
58+
)
59+
60+
local ok = picker.is_available()
61+
assert(ok, ("Picker `%s` is not available. Make sure it is installed"):format(provider))
62+
return picker.name
3363
end
3464

3565
---@class leet.Picker

0 commit comments

Comments
 (0)