Skip to content

Commit d224ffb

Browse files
committed
feat: picker provider resolver
1 parent 9362606 commit d224ffb

File tree

3 files changed

+29
-10
lines changed

3 files changed

+29
-10
lines changed

Diff for: README.md

+4-2
Original file line numberDiff line numberDiff line change
@@ -278,11 +278,13 @@ injector = { ---@type table<lc.lang, lc.inject>
278278

279279
### picker
280280

281-
Supported picker providers are `telescope` and `fzf-lua`
281+
Supported picker providers are `telescope` and `fzf-lua`.
282+
When provider is `nil`, [leetcode.nvim] will first try to use `fzf-lua`,
283+
if not found it will fallback to `telescope`.
282284

283285
```lua
284286
---@type lc.picker
285-
picker = { provider = "telescope" },
287+
picker = { provider = nil },
286288
```
287289

288290
### hooks

Diff for: lua/leetcode/config/template.lua

+2-2
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838

3939
---@alias lc.storage table<"cache"|"home", string>
4040

41-
---@alias lc.picker { provider: "fzf-lua" | "telescope" }
41+
---@alias lc.picker { provider?: "fzf-lua" | "telescope" }
4242

4343
---@class lc.UserConfig
4444
local M = {
@@ -104,7 +104,7 @@ local M = {
104104
},
105105

106106
---@type lc.picker
107-
picker = { provider = "telescope" },
107+
picker = { provider = nil },
108108

109109
hooks = {
110110
---@type fun()[]

Diff for: lua/leetcode/picker/init.lua

+23-6
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,31 @@
11
local log = require("leetcode.logger")
22
local config = require("leetcode.config")
33

4-
---@type string
5-
local provider = config.user.picker.provider
6-
assert(pcall(require, provider), ("specified picker provider not found: `%s`"):format(provider))
7-
provider = provider == "fzf-lua" and "fzf" or provider
8-
---@cast provider "fzf" | "telescope"
4+
---@return "fzf" | "telescope"
5+
local function resolve_provider()
6+
---@type string
7+
local provider = config.user.picker.provider
8+
9+
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+
error("no supported picker provider found")
19+
else
20+
local provider_ok = pcall(require, provider)
21+
assert(provider_ok, ("specified picker provider not found: `%s`"):format(provider))
22+
return provider == "fzf-lua" and "fzf" or provider
23+
end
24+
end
925

1026
---@class leet.Picker
1127
local P = {}
28+
P.provider = resolve_provider()
1229

1330
function P.hl_to_ansi(hl_group)
1431
local color = vim.api.nvim_get_hl(0, { name = hl_group })
@@ -46,7 +63,7 @@ function P.normalize(items)
4663
end
4764

4865
function P.pick(path, ...)
49-
local rpath = table.concat({ "leetcode.picker", path, provider }, ".")
66+
local rpath = table.concat({ "leetcode.picker", path, P.provider }, ".")
5067
return require(rpath)(...)
5168
end
5269

0 commit comments

Comments
 (0)