irongit

A Neovim plugin enabling you to solve LeetCode problems.

refactor(picker): resolve provider

kawreauthored
parent d3e9c6acommit a3956db800a477a1ccbfb170c32c4e126d06f2f1Browse files

1 file changed, +51 -21

+51-21lua/leetcode/picker/init.lua
@@ -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