summaryrefslogtreecommitdiff
path: root/lua
diff options
context:
space:
mode:
authorTJ DeVries <devries.timothyj@gmail.com>2020-09-01 20:51:05 -0400
committerTJ DeVries <devries.timothyj@gmail.com>2020-09-01 20:51:41 -0400
commit4ac50c68ca43a0be7e8e238b7f781ad5074d8669 (patch)
treec31cd74e62b160bb526057744fe3fcbf9c64b4ce /lua
parent49e25fdc187d9ff26c7d454fe36349d0f66dd0a9 (diff)
wip: new sorters
Diffstat (limited to 'lua')
-rw-r--r--lua/telescope/pickers.lua21
-rw-r--r--lua/telescope/previewers.lua2
-rw-r--r--lua/telescope/sorters.lua17
-rw-r--r--lua/tests/telescope_spec.lua201
4 files changed, 145 insertions, 96 deletions
diff --git a/lua/telescope/pickers.lua b/lua/telescope/pickers.lua
index 2f15cb6..2650ff0 100644
--- a/lua/telescope/pickers.lua
+++ b/lua/telescope/pickers.lua
@@ -26,6 +26,8 @@ end
local pickers = {}
+-- TODO: Add motions to keybindings
+-- TODO: Add relative line numbers?
local default_mappings = {
i = {
["<C-n>"] = actions.move_selection_next,
@@ -186,6 +188,7 @@ function Picker:find()
-- TODO: Should probably always show all the line for results win, so should implement a resize for the windows
a.nvim_win_set_option(results_win, 'wrap', false)
+ a.nvim_win_set_option(results_win, 'winhl', 'Normal:TelescopeNormal')
local preview_win, preview_opts, preview_bufnr
@@ -195,7 +198,7 @@ function Picker:find()
-- TODO: For some reason, highlighting is kind of weird on these windows.
-- It may actually be my colorscheme tho...
- a.nvim_win_set_option(preview_win, 'winhl', 'Normal:Normal')
+ a.nvim_win_set_option(preview_win, 'winhl', 'Normal:TelescopeNormal')
a.nvim_win_set_option(preview_win, 'winblend', 10)
end
@@ -203,6 +206,8 @@ function Picker:find()
local prompt_win, prompt_opts = popup.create('', popup_opts.prompt)
local prompt_bufnr = a.nvim_win_get_buf(prompt_win)
+ a.nvim_win_set_option(prompt_win, 'winhl', 'Normal:TelescopeNormal')
+
-- a.nvim_buf_set_option(prompt_bufnr, 'buftype', 'prompt')
-- vim.fn.prompt_setprompt(prompt_bufnr, prompt_string)
@@ -334,18 +339,26 @@ function Picker:find()
self.prompt_bufnr = prompt_bufnr
+ local prompt_border_win = prompt_opts.border and prompt_opts.border.win_id
+ local results_border_win = results_opts.border and results_opts.border.win_id
+ local preview_border_win = preview_opts and preview_opts.border and preview_opts.border.win_id
+
+ if prompt_border_win then vim.api.nvim_win_set_option(prompt_border_win, 'winhl', 'Normal:TelescopeNormal') end
+ if results_border_win then vim.api.nvim_win_set_option(results_border_win, 'winhl', 'Normal:TelescopeNormal') end
+ if preview_border_win then vim.api.nvim_win_set_option(preview_border_win, 'winhl', 'Normal:TelescopeNormal') end
+
state.set_status(prompt_bufnr, {
prompt_bufnr = prompt_bufnr,
prompt_win = prompt_win,
- prompt_border_win = prompt_opts.border and prompt_opts.border.win_id,
+ prompt_border_win = prompt_border_win,
results_bufnr = results_bufnr,
results_win = results_win,
- results_border_win = results_opts.border and results_opts.border.win_id,
+ results_border_win = results_border_win,
preview_bufnr = preview_bufnr,
preview_win = preview_win,
- preview_border_win = preview_opts and preview_opts.border and preview_opts.border.win_id,
+ preview_border_win = preview_border_win,
picker = self,
previewer = self.previewer,
finder = finder,
diff --git a/lua/telescope/previewers.lua b/lua/telescope/previewers.lua
index 673e2a7..dec99cc 100644
--- a/lua/telescope/previewers.lua
+++ b/lua/telescope/previewers.lua
@@ -128,7 +128,7 @@ previewers.vim_buffer_or_bat = previewers.new {
previewers.cat = previewers.new {
setup = function()
local command_string = "cat %s"
- if vim.fn.executable("bat") then
+ if 1 == vim.fn.executable("bat") then
command_string = "bat %s --style=grid --paging=always"
end
diff --git a/lua/telescope/sorters.lua b/lua/telescope/sorters.lua
index 3754a71..b8ee599 100644
--- a/lua/telescope/sorters.lua
+++ b/lua/telescope/sorters.lua
@@ -71,6 +71,19 @@ sorters.get_levenshtein_sorter = function()
}
end
+-- TODO: Match on upper case words
+-- TODO: Match on last match
+sorters.get_fuzzy_file = function()
+ local cached_tails = {}
+ local cached_ngrams = {}
+
+ return Sorter:new {
+ scoring_function = function(_, prompt, line)
+ return 1
+ end
+ }
+end
+
sorters.get_norcalli_sorter = function()
local ngramlen = 2
@@ -101,11 +114,11 @@ sorters.get_norcalli_sorter = function()
return 0
end
- local prompt_ngrams = overlapping_ngrams(prompt, ngramlen)
-
local prompt_lower = prompt:lower()
local line_lower = line:lower()
+ local prompt_ngrams = overlapping_ngrams(prompt_lower, ngramlen)
+
local N = #prompt
local contains_string = line_lower:find(prompt_lower, 1, true)
diff --git a/lua/tests/telescope_spec.lua b/lua/tests/telescope_spec.lua
index e98226d..8d20c5d 100644
--- a/lua/tests/telescope_spec.lua
+++ b/lua/tests/telescope_spec.lua
@@ -119,94 +119,94 @@ describe('Picker', function()
end)
end)
- describe('ngrams', function()
- it('should capture intself in the ngram', function()
- local n = utils.new_ngram()
-
- n:add("hi")
- assert.are.same(n._grams.hi, {hi = 1})
- end)
-
- it('should have repeated strings count more than once', function()
- local n = utils.new_ngram()
-
- n:add("llll")
- assert.are.same(n._grams.ll, {llll = 3})
- end)
-
- describe('_items_sharing_ngrams', function()
- -- it('should be able to find similar strings', function()
- -- end)
- local n
- before_each(function()
- n = utils.new_ngram()
-
- n:add("SPAM")
- n:add("SPAN")
- n:add("EG")
- end)
-
- it('should find items at the start', function()
- assert.are.same({ SPAM = 1, SPAN = 1 }, n:_items_sharing_ngrams("SP"))
- end)
-
- it('should find items at the end', function()
- assert.are.same({ SPAM = 1, }, n:_items_sharing_ngrams("AM"))
- end)
-
- it('should find items at the end', function()
- assert.are.same({ SPAM = 2, SPAN = 1}, n:_items_sharing_ngrams("PAM"))
- end)
- end)
-
- describe('search', function()
- describe('for simple strings', function()
- local n
- before_each(function()
- n = utils.new_ngram()
-
- n:add("SPAM")
- n:add("SPAN")
- n:add("EG")
- end)
-
- it('should sort for equal cases', function()
- assert.are.same({ "SPAM", "SPAN" }, n:search("SPAM"))
- end)
-
- it('should sort for obvious cases', function()
- assert.are.same({ "SPAM", "SPAN" }, n:search("PAM"))
- end)
- end)
-
- describe('for file paths', function()
- local n
- before_each(function()
- n = utils.new_ngram()
-
- n:add("sho/rt")
- n:add("telescope/init.lua")
- n:add("telescope/utils.lua")
- n:add("telescope/pickers.lua")
- n:add("a/random/file/pickers.lua")
- n:add("microscope/init.lua")
- end)
-
- it("should find exact match", function()
- assert.are.same(n:find("telescope/init.lua"), "telescope/init.lua")
- assert.are.same(n:score("telescope/init.lua"), 1)
- end)
-
- it("should find unique match", function()
- assert.are.same(n:find("micro"), "microscope/init.lua")
- end)
-
- it("should find some match", function()
- assert.are.same(n:find("telini"), "telescope/init.lua")
- end)
- end)
- end)
- end)
+ -- describe('ngrams', function()
+ -- it('should capture intself in the ngram', function()
+ -- local n = utils.new_ngram()
+
+ -- n:add("hi")
+ -- assert.are.same(n._grams.hi, {hi = 1})
+ -- end)
+
+ -- it('should have repeated strings count more than once', function()
+ -- local n = utils.new_ngram()
+
+ -- n:add("llll")
+ -- assert.are.same(n._grams.ll, {llll = 3})
+ -- end)
+
+ -- describe('_items_sharing_ngrams', function()
+ -- -- it('should be able to find similar strings', function()
+ -- -- end)
+ -- local n
+ -- before_each(function()
+ -- n = utils.new_ngram()
+
+ -- n:add("SPAM")
+ -- n:add("SPAN")
+ -- n:add("EG")
+ -- end)
+
+ -- it('should find items at the start', function()
+ -- assert.are.same({ SPAM = 1, SPAN = 1 }, n:_items_sharing_ngrams("SP"))
+ -- end)
+
+ -- it('should find items at the end', function()
+ -- assert.are.same({ SPAM = 1, }, n:_items_sharing_ngrams("AM"))
+ -- end)
+
+ -- it('should find items at the end', function()
+ -- assert.are.same({ SPAM = 2, SPAN = 1}, n:_items_sharing_ngrams("PAM"))
+ -- end)
+ -- end)
+
+ -- describe('search', function()
+ -- describe('for simple strings', function()
+ -- local n
+ -- before_each(function()
+ -- n = utils.new_ngram()
+
+ -- n:add("SPAM")
+ -- n:add("SPAN")
+ -- n:add("EG")
+ -- end)
+
+ -- it('should sort for equal cases', function()
+ -- assert.are.same({ "SPAM", "SPAN" }, n:search("SPAM"))
+ -- end)
+
+ -- it('should sort for obvious cases', function()
+ -- assert.are.same({ "SPAM", "SPAN" }, n:search("PAM"))
+ -- end)
+ -- end)
+
+ -- describe('for file paths', function()
+ -- local n
+ -- before_each(function()
+ -- n = utils.new_ngram()
+
+ -- n:add("sho/rt")
+ -- n:add("telescope/init.lua")
+ -- n:add("telescope/utils.lua")
+ -- n:add("telescope/pickers.lua")
+ -- n:add("a/random/file/pickers.lua")
+ -- n:add("microscope/init.lua")
+ -- end)
+
+ -- it("should find exact match", function()
+ -- assert.are.same(n:find("telescope/init.lua"), "telescope/init.lua")
+ -- assert.are.same(n:score("telescope/init.lua"), 1)
+ -- end)
+
+ -- it("should find unique match", function()
+ -- assert.are.same(n:find("micro"), "microscope/init.lua")
+ -- end)
+
+ -- it("should find some match", function()
+ -- assert.are.same(n:find("telini"), "telescope/init.lua")
+ -- end)
+ -- end)
+ -- end)
+ -- end)
end)
describe('Sorters', function()
@@ -229,9 +229,32 @@ describe('Sorters', function()
local multi_match = sorter:score('generics', 'exercises/generics/generics2.rs')
local one_match = sorter:score('abcdef', 'exercises/generics/README.md')
- assert(multi_match < one_match)
+ -- assert(multi_match < one_match)
end)
end)
+
+ describe('fuzzy_file', function()
+ it('sort matches well', function()
+ local sorter = require('telescope.sorters').get_fuzzy_file()
+
+ local exact_match = sorter:score('hello', 'hello')
+ local no_match = sorter:score('abcdef', 'ghijkl')
+ local ok_match = sorter:score('abcdef', 'ab')
+
+ assert(exact_match < no_match)
+ assert(exact_match < ok_match)
+ assert(ok_match < no_match)
+ end)
+
+ -- it('sorts multiple finds better', function()
+ -- local sorter = require('telescope.sorters').get_fuzzy_file()
+
+ -- local multi_match = sorter:score('generics', 'exercises/generics/generics2.rs')
+ -- local one_match = sorter:score('abcdef', 'exercises/generics/README.md')
+
+ -- assert(multi_match < one_match)
+ -- end)
+ end)
end)