2022-05-16 22:20:10 +08:00
|
|
|
local scheduler = require("plenary.async").util.scheduler
|
|
|
|
|
|
|
|
local make_entry = require "telescope.make_entry"
|
|
|
|
|
|
|
|
return function(opts)
|
|
|
|
local input_results
|
|
|
|
if vim.tbl_islist(opts) then
|
|
|
|
input_results = opts
|
|
|
|
else
|
|
|
|
input_results = opts.results
|
|
|
|
end
|
|
|
|
|
2022-10-25 18:35:51 +08:00
|
|
|
local entry_maker = opts.entry_maker or make_entry.gen_from_string(opts)
|
2022-05-16 22:20:10 +08:00
|
|
|
|
|
|
|
local results = {}
|
|
|
|
for k, v in ipairs(input_results) do
|
|
|
|
local entry = entry_maker(v)
|
|
|
|
|
|
|
|
if entry then
|
|
|
|
entry.index = k
|
|
|
|
table.insert(results, entry)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
return setmetatable({
|
|
|
|
results = results,
|
2022-10-25 18:35:51 +08:00
|
|
|
entry_maker = entry_maker,
|
2022-05-16 22:20:10 +08:00
|
|
|
close = function() end,
|
|
|
|
}, {
|
|
|
|
__call = function(_, _, process_result, process_complete)
|
|
|
|
for i, v in ipairs(results) do
|
|
|
|
if process_result(v) then
|
|
|
|
break
|
|
|
|
end
|
|
|
|
|
|
|
|
if i % 1000 == 0 then
|
|
|
|
scheduler()
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
process_complete()
|
|
|
|
end,
|
|
|
|
})
|
|
|
|
end
|