feat: add filter option to sources (#1067)

* feat: add `source.filter` config

This allows the user to specify a `filter` function for each source,
like this:

```lua
-- don't show entries with kind "Text" from the "nvim_lsp" source

sources = {
{
  name = "nvim_lsp",
  filter = function(entry, ctx)
    local kind = types.lsp.CompletionItemKind[entry:get_kind()]

    if kind == "Text" then
      return true
    end
  },
}
```

By utilizing the `ctx` parameter, the user can also ignore certain
entries in certain contexts.

* fixup! feat: add `source.filter` config

* fixup! feat: add `source.filter` config
This commit is contained in:
Jonatan Branting
2022-09-08 05:48:27 +02:00
committed by GitHub
parent b16e5bcf1d
commit 913eb85998
3 changed files with 42 additions and 1 deletions

View File

@@ -101,6 +101,8 @@ source.get_entries = function(self, ctx)
return self.entries
end)()
local entry_filter = self:get_entry_filter()
local inputs = {}
local entries = {}
for _, e in ipairs(target_entries) do
@@ -115,7 +117,10 @@ source.get_entries = function(self, ctx)
if e.score >= 1 then
e.matches = match.matches
e.exact = e:get_filter_text() == inputs[o] or e:get_word() == inputs[o]
table.insert(entries, e)
if entry_filter(e, ctx) then
table.insert(entries, e)
end
end
end
self.cache:set({ 'get_entries', self.revision, ctx.cursor_before_line }, entries)
@@ -232,6 +237,16 @@ source.get_keyword_length = function(self)
return config.get().completion.keyword_length or 1
end
---Get filter
--@return function
source.get_entry_filter = function(self)
local c = self:get_source_config()
if c.entry_filter then
return c.entry_filter
end
return function(_, _) return true end
end
---Invoke completion
---@param ctx cmp.Context
---@param callback function