1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-01-23 17:30:04 +08:00
SpaceVim/bundle/lspkind-nvim/lua/lspkind/init.lua
2022-01-01 22:13:13 +08:00

144 lines
3.1 KiB
Lua

local lspkind = {}
local fmt = string.format
local kind_presets = {
default = {
-- if you change or add symbol here
-- replace corresponding line in readme
Text = "",
Method = "",
Function = "",
Constructor = "",
Field = "",
Variable = "",
Class = "",
Interface = "",
Module = "",
Property = "",
Unit = "",
Value = "",
Enum = "",
Keyword = "",
Snippet = "",
Color = "",
File = "",
Reference = "",
Folder = "",
EnumMember = "",
Constant = "",
Struct = "",
Event = "",
Operator = "",
TypeParameter = ""
},
codicons = {
Text = "",
Method = "",
Function = "",
Constructor = "",
Field = "",
Variable = "",
Class = "",
Interface = "",
Module = "",
Property = "",
Unit = "",
Value = "",
Enum = "",
Keyword = "",
Snippet = "",
Color = "",
File = "",
Reference = "",
Folder = "",
EnumMember = "",
Constant = "",
Struct = "",
Event = "",
Operator = "",
TypeParameter = "",
},
}
local kind_order = {
'Text', 'Method', 'Function', 'Constructor', 'Field', 'Variable', 'Class', 'Interface', 'Module',
'Property', 'Unit', 'Value', 'Enum', 'Keyword', 'Snippet', 'Color', 'File', 'Reference', 'Folder',
'EnumMember', 'Constant', 'Struct', 'Event', 'Operator', 'TypeParameter'
}
local kind_len = 25
-- default true
local function opt_with_text(opts)
return opts == nil or opts['with_text'] == nil or opts['with_text']
end
-- default 'default'
local function opt_preset(opts)
local preset
if opts == nil or opts['preset'] == nil then
preset = 'default'
else
preset = opts['preset']
end
return preset
end
function lspkind.init(opts)
local preset = opt_preset(opts)
local symbol_map = kind_presets[preset]
lspkind.symbol_map = (opts and opts['symbol_map'] and
vim.tbl_extend('force', symbol_map, opts['symbol_map'])) or symbol_map
local symbols = {}
local len = kind_len
for i = 1, len do
local name = kind_order[i]
symbols[i] = lspkind.symbolic(name, opts)
end
for k,v in pairs(symbols) do
require('vim.lsp.protocol').CompletionItemKind[k] = v
end
end
lspkind.presets = kind_presets
lspkind.symbol_map = kind_presets.default
function lspkind.symbolic(kind, opts)
local with_text = opt_with_text(opts)
local symbol = lspkind.symbol_map[kind]
if with_text == true then
symbol = symbol and (symbol .. ' ') or ''
return fmt('%s%s', symbol, kind)
else
return symbol
end
end
function lspkind.cmp_format(opts)
if opts == nil then
opts = {}
end
if opts.preset or opts.symbol_map then
lspkind.init(opts)
end
return function(entry, vim_item)
vim_item.kind = lspkind.symbolic(vim_item.kind, opts)
if opts.menu ~= nil then
vim_item.menu = opts.menu[entry.source.name]
end
if opts.maxwidth ~= nil then
vim_item.abbr = string.sub(vim_item.abbr, 1, opts.maxwidth)
end
return vim_item
end
end
return lspkind