From 13d4989c38595e6cbe9d48749a8407e50982ad0d Mon Sep 17 00:00:00 2001 From: tzachar Date: Tue, 14 Sep 2021 08:58:54 +0300 Subject: [PATCH] Rework #195 (#196) * Slight complexity reduction Do not loop twice over sources table, instead keep a table mapping names to sources * Update lua/cmp/core.lua Co-authored-by: hrsh7th * Fix multiple sources per name * fix as suggested Co-authored-by: hrsh7th --- lua/cmp/core.lua | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/lua/cmp/core.lua b/lua/cmp/core.lua index 2cff402..ceab8e0 100644 --- a/lua/cmp/core.lua +++ b/lua/cmp/core.lua @@ -72,6 +72,9 @@ end ---@type table core.sources = {} +---@type table +core.sources_by_name = {} + ---@type cmp.Context core.context = context.new() @@ -79,11 +82,20 @@ core.context = context.new() ---@param s cmp.Source core.register_source = function(s) core.sources[s.id] = s + if not core.sources_by_name[s.name] then + core.sources_by_name[s.name] = {} + end + table.insert(core.sources_by_name[s.name], s) end ---Unregister source ---@param source_id string core.unregister_source = function(source_id) + local name = core.sources[source_id].name + core.sources_by_name[name] = vim.tbl_filter( + function (source) + return source.id ~= source_id + end, core.sources_by_name[name]) core.sources[source_id] = nil end @@ -118,12 +130,10 @@ end core.get_sources = function(statuses) local sources = {} for _, c in pairs(config.get().sources) do - for _, s in pairs(core.sources) do - if c.name == s.name then - if not statuses or vim.tbl_contains(statuses, s.status) then - if s:is_available() then - table.insert(sources, s) - end + for _, s in ipairs(core.sources_by_name[c.name] or {}) do + if not statuses or vim.tbl_contains(statuses, s.status) then + if s:is_available() then + table.insert(sources, s) end end end