Skip to content

Commit e1f118e

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

File tree

3 files changed

+33
-12
lines changed

3 files changed

+33
-12
lines changed

Diff for: README.md

+8-4
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ https://github.com/kawre/leetcode.nvim/assets/69250723/aee6584c-e099-4409-b114-1
2828

2929
- [telescope.nvim] or [fzf-lua]
3030

31+
- [plenary.nvim]
32+
3133
- [nui.nvim]
3234

3335
- [tree-sitter-html] _**(optional, but highly recommended)**_
@@ -47,7 +49,6 @@ https://github.com/kawre/leetcode.nvim/assets/69250723/aee6584c-e099-4409-b114-1
4749
dependencies = {
4850
"nvim-telescope/telescope.nvim",
4951
-- "ibhagwan/fzf-lua",
50-
5152
"nvim-lua/plenary.nvim",
5253
"MunifTanjim/nui.nvim",
5354
},
@@ -127,7 +128,7 @@ To see full configuration types see [template.lua](./lua/leetcode/config/templat
127128
},
128129

129130
---@type lc.picker
130-
picker = { provider = "telescope" },
131+
picker = { provider = nil },
131132

132133
hooks = {
133134
---@type fun()[]
@@ -278,11 +279,13 @@ injector = { ---@type table<lc.lang, lc.inject>
278279

279280
### picker
280281

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

283286
```lua
284287
---@type lc.picker
285-
picker = { provider = "telescope" },
288+
picker = { provider = nil },
286289
```
287290

288291
### hooks
@@ -505,3 +508,4 @@ You can then exit [leetcode.nvim] using `:Leet exit` command
505508
[telescope.nvim]: https://github.com/nvim-telescope/telescope.nvim
506509
[fzf-lua]: https://github.com/ibhagwan/fzf-lua
507510
[tree-sitter-html]: https://github.com/tree-sitter/tree-sitter-html
511+
[plenary.nvim]: https://github.com/nvim-lua/plenary.nvim

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)