RFC: CmpStatus command (#210)

* Add `CmpStatus` command

* Update headings

* Fix heading

* Update headings

* Add README.md

* Fix tests

* Force invoke InsertEnter
This commit is contained in:
hrsh7th
2021-09-17 13:29:28 +09:00
committed by GitHub
parent 620eea94d3
commit b47a703a48
5 changed files with 79 additions and 3 deletions

View File

@@ -65,7 +65,7 @@ config.get_source_config = function(name)
return s
end
end
return {}
return nil
end)
end

View File

@@ -110,6 +110,68 @@ cmp.confirm = function(option)
end
end
---Show status
cmp.status = function()
vim.cmd [[doautocmd InsertEnter]]
local kinds = {}
kinds.available = {}
kinds.unavailable = {}
kinds.installed = {}
kinds.invalid = {}
local names = {}
for _, s in pairs(core.sources) do
names[s.name] = true
if config.get_source_config(s.name) then
if s:is_available() then
table.insert(kinds.available, s:get_debug_name())
else
table.insert(kinds.unavailable, s:get_debug_name())
end
else
table.insert(kinds.installed, s:get_debug_name())
end
end
for _, s in ipairs(config.get().sources) do
if not names[s.name] then
table.insert(kinds.invalid, s.name)
end
end
if #kinds.available > 0 then
vim.api.nvim_echo({ { '\n', 'Normal' } }, false, {})
vim.api.nvim_echo({ { '# ready source names\n', 'Special' } }, false, {})
for _, name in ipairs(kinds.available) do
vim.api.nvim_echo({ { ('- %s\n'):format(name), 'Normal' } }, false, {})
end
end
if #kinds.unavailable > 0 then
vim.api.nvim_echo({ { '\n', 'Normal' } }, false, {})
vim.api.nvim_echo({ { '# unavailable source names\n', 'Comment' } }, false, {})
for _, name in ipairs(kinds.unavailable) do
vim.api.nvim_echo({ { ('- %s\n'):format(name), 'Normal' } }, false, {})
end
end
if #kinds.installed > 0 then
vim.api.nvim_echo({ { '\n', 'Normal' } }, false, {})
vim.api.nvim_echo({ { '# unused source names\n', 'WarningMsg' } }, false, {})
for _, name in ipairs(kinds.installed) do
vim.api.nvim_echo({ { ('- %s\n'):format(name), 'Normal' } }, false, {})
end
end
if #kinds.invalid > 0 then
vim.api.nvim_echo({ { '\n', 'Normal' } }, false, {})
vim.api.nvim_echo({ { '# unknown source names\n', 'ErrorMsg' } }, false, {})
for _, name in ipairs(kinds.invalid) do
vim.api.nvim_echo({ { ('- %s\n'):format(name), 'Normal' } }, false, {})
end
end
end
---@type cmp.Setup
cmp.setup = setmetatable({
global = function(c)

View File

@@ -63,7 +63,7 @@ end
---Return source option
---@return cmp.SourceConfig
source.get_config = function(self)
return config.get_source_config(self.name)
return config.get_source_config(self.name) or {}
end
---Get fetching time
@@ -175,7 +175,7 @@ source.get_debug_name = function(self)
if self.source.get_debug_name then
name = self.source:get_debug_name()
end
return name .. '(' .. self.id .. ')'
return name
end
---Return the source is available or not.