Substring matcher (#443)
* add substr_matcher * correct function name * use util.split function and remove unused opts
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user