Add basic recently_used comparator

This commit is contained in:
hrsh7th
2021-10-29 18:46:51 +09:00
parent a6412e590c
commit 3945dc5d00
4 changed files with 41 additions and 31 deletions

View File

@@ -30,6 +30,22 @@ compare.score = function(entry1, entry2)
end
end
-- recently_used
compare.recently_used = setmetatable({
records = {},
add_entry = function(self, e)
self.records[e.completion_item.label] = vim.loop.now()
end
}, {
__call = function(self, entry1, entry2)
local t1 = self.records[entry1.completion_item.label] or -1
local t2 = self.records[entry2.completion_item.label] or -1
if t1 ~= t2 then
return t1 > t2
end
end
})
-- kind
compare.kind = function(entry1, entry2)
local kind1 = entry1:get_kind()

View File

@@ -47,34 +47,14 @@ return function()
sorting = {
priority_weight = 2,
comparators = {
function(e1, e2)
local diff
diff = compare.offset(e1, e2)
if diff ~= nil then
return diff
end
diff = compare.exact(e1, e2)
if diff ~= nil then
return diff
end
diff = compare.score(e1, e2)
if diff ~= nil then
return diff
end
diff = compare.kind(e1, e2)
if diff ~= nil then
return diff
end
diff = compare.sort_text(e1, e2)
if diff ~= nil then
return diff
end
diff = compare.length(e1, e2)
if diff ~= nil then
return diff
end
return compare.order(e1, e2)
end,
compare.offset,
compare.exact,
compare.score,
compare.recently_used,
compare.kind,
compare.sort_text,
compare.length,
compare.order,
},
},
@@ -102,7 +82,7 @@ return function()
['<Tab>'] = mapping({
c = function(fallback)
local cmp = require('cmp')
if #cmp.core:get_sources() > 0 and not require('cmp.config').get().experimental.native_menu then
if #cmp.core:get_sources() > 0 and not cmp.get_config().experimental.native_menu then
if cmp.visible() then
cmp.select_next_item()
else
@@ -116,7 +96,7 @@ return function()
['<S-Tab>'] = mapping({
c = function(fallback)
local cmp = require('cmp')
if #cmp.core:get_sources() > 0 and not require('cmp.config').get().experimental.native_menu then
if #cmp.core:get_sources() > 0 and not cmp.get_config().experimental.native_menu then
if cmp.visible() then
cmp.select_prev_item()
else