Substring matcher (#443)

* add substr_matcher

* correct function name

* use util.split function and remove unused opts
This commit is contained in:
Senghan Bright
2021-01-18 17:53:52 +01:00
committed by GitHub
parent 7e241aa0a4
commit 7d4d3462e9

View File

@@ -429,4 +429,42 @@ sorters.get_levenshtein_sorter = function()
} }
end end
local substr_highlighter = function(_, prompt, display)
local highlights = {}
display = display:lower()
local search_terms = util.max_split(prompt, "%s")
local hl_start, hl_end
for _, word in pairs(search_terms) do
hl_start, hl_end = display:find(word, 1, true)
if hl_start then
table.insert(highlights, {start = hl_start, finish = hl_end})
end
end
return highlights
end
sorters.get_substr_matcher = function()
return Sorter:new {
highlighter = substr_highlighter,
scoring_function = function(_, prompt, _, entry)
local display = entry.ordinal:lower()
local search_terms = util.max_split(prompt, "%s")
local matched = 0
local total_search_terms = 0
for _, word in pairs(search_terms) do
total_search_terms = total_search_terms + 1
if display:find(word, 1, true) then
matched = matched + 1
end
end
return matched == total_search_terms and entry.index or -1
end
}
end
return sorters return sorters