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:
oberblastmeister
2021-04-13 14:39:14 -04:00
committed by GitHub
parent 5bd6f5ca98
commit 253d3aaa6b
4 changed files with 71 additions and 1 deletions

View File

@@ -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