added a new DynamicFinder (which can be used with rust_analyzer) (#705)
* started tree finder * made tree more ergonmic * deleted unneeded comments * added stack root and node * added preprocessing * using staticfinder instead of separate finder, custom entry maker * added selections and remember * removed unused stuff * fixed warnings * fixed remember and selections pop * started branch * added go function * changed up test * removed root parameter from go function * changed back to not do_close * removed node and leaf classes * removed stack class instead for table.insert and table.remove * fixed warning * started branch * added better preprocessor and tree class * started some tests * finished making tests pass * cleaned up * fixed make entry and updated example * started * added some stuff * deleted uneeded stuff * added cancelable * changed workspace requester * use better cancellation mechanism * removed accidental stuff * removed useless print * delete more useless stuff * rename to dynamic * added request cancellation * CHECK IF NIL * removed unused * added trash global variable
This commit is contained in:
@@ -2,6 +2,8 @@ local Job = require('plenary.job')
|
||||
|
||||
local make_entry = require('telescope.make_entry')
|
||||
local log = require('telescope.log')
|
||||
local a = require('plenary.async_lib')
|
||||
local await = a.await
|
||||
|
||||
local async_static_finder = require('telescope.finders.async_static_finder')
|
||||
local async_oneshot_finder = require('telescope.finders.async_oneshot_finder')
|
||||
@@ -20,7 +22,6 @@ local _callable_obj = function()
|
||||
return obj
|
||||
end
|
||||
|
||||
|
||||
--[[ =============================================================
|
||||
|
||||
JobFinder
|
||||
@@ -108,6 +109,35 @@ function JobFinder:_find(prompt, process_result, process_complete)
|
||||
self.job:start()
|
||||
end
|
||||
|
||||
local DynamicFinder = _callable_obj()
|
||||
|
||||
function DynamicFinder:new(opts)
|
||||
opts = opts or {}
|
||||
|
||||
assert(not opts.results, "`results` should be used with finder.new_table")
|
||||
assert(not opts.static, "`static` should be used with finder.new_oneshot_job")
|
||||
|
||||
local obj = setmetatable({
|
||||
curr_buf = opts.curr_buf,
|
||||
fn = opts.fn,
|
||||
entry_maker = opts.entry_maker or make_entry.from_string,
|
||||
}, self)
|
||||
|
||||
return obj
|
||||
end
|
||||
|
||||
function DynamicFinder:_find(prompt, process_result, process_complete)
|
||||
a.scope(function()
|
||||
local results = await(self.fn(prompt))
|
||||
|
||||
for _, result in ipairs(results) do
|
||||
if process_result(self.entry_maker(result)) then return end
|
||||
end
|
||||
|
||||
process_complete()
|
||||
end)
|
||||
end
|
||||
|
||||
--- Return a new Finder
|
||||
--
|
||||
-- Use at your own risk.
|
||||
@@ -185,4 +215,8 @@ finders.new_table = function(t)
|
||||
return async_static_finder(t)
|
||||
end
|
||||
|
||||
finders.new_dynamic = function(t)
|
||||
return DynamicFinder:new(t)
|
||||
end
|
||||
|
||||
return finders
|
||||
|
||||
Reference in New Issue
Block a user