diff options
| author | oberblastmeister <61095988+oberblastmeister@users.noreply.github.com> | 2021-04-13 14:39:14 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-04-13 14:39:14 -0400 |
| commit | 253d3aaa6b43eac6b11341b325e34d37dc459af3 (patch) | |
| tree | f2e4c02ffcc6a6f6019d7fb1f605f08d31544a4d /lua/telescope/finders.lua | |
| parent | 5bd6f5ca9828ea02f2c54d616ad65c72a5cdd7fb (diff) | |
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
Diffstat (limited to 'lua/telescope/finders.lua')
| -rw-r--r-- | lua/telescope/finders.lua | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/lua/telescope/finders.lua b/lua/telescope/finders.lua index d2acd05..62c05a1 100644 --- a/lua/telescope/finders.lua +++ b/lua/telescope/finders.lua @@ -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 |
