Filter and Sort Symbols according to my needs

This commit is contained in:
Leigh Moore
2025-08-19 06:11:44 +10:00
parent 0eb9289ab3
commit 6ead31c879

View File

@@ -27,9 +27,79 @@ end
local function parse_result(result, depth, hierarchy, parent, bufnr)
local ret = {}
-- LEIGH MOORE
-- Begin filter and Sort Symbols
local lspKind = {
[5] = 0, -- 'Class'
[7] = 1, -- 'Property'
[9] = 2, -- 'Constructor'
[6] = 3, -- 'Method'
[1] = 999, -- 'File'
[2] = 999, -- 'Module'
[3] = 999, -- 'Namespace'
[4] = 999, -- 'Package'
[8] = 999, -- 'Field'
[10] = 999, -- 'Enum'
[11] = 999, -- 'Interface'
[12] = 999, -- 'Function'
[13] = 999, -- 'Variable'
[14] = 999, -- 'Constant'
[15] = 999, -- 'String'
[16] = 999, -- 'Number'
[17] = 999, -- 'Boolean'
[18] = 999, -- 'Array'
[19] = 999, -- 'Object'
[20] = 999, -- 'Key'
[21] = 999, -- 'Null'
[22] = 999, -- 'EnumMember'
[23] = 999, -- 'Struct'
[24] = 999, -- 'Event'
[25] = 999, -- 'Operator'
[26] = 999, -- 'TypeParameter'
[27] = 999, -- 'Component'
[28] = 999, -- 'Fragment'
-- ccls
[252] = 999, -- 'TypeAlias'
[253] = 999, -- 'Parameter'
[254] = 999, -- 'StaticMethod'
[255] = 999, -- 'Macro'
}
local function filter_array(arr, predicate)
local result = {}
for _, value in ipairs(arr) do
-- vim.print(vim.inspect(value))
if predicate(value) then
table.insert(result, value)
end
end
return result
end
result = filter_array(result, function(value)
return value.kind ~= 12 and value.name:match(' callback') == nil
end)
table.sort(result, function(a, b)
a.kind = norm_kind(a.kind)
b.kind = norm_kind(b.kind)
if lspKind[a.kind] < lspKind[b.kind] then
return true
elseif lspKind[a.kind] > lspKind[b.kind] then
return false
else
return a.name < b.name
end
end)
-- End filter and Sort Symbols
local kinds = {}
for index, value in pairs(result) do
-- FIXME: If a parent was excluded, all children will not be considered
value.kind = norm_kind(value.kind)
kinds[value.kind] = true;
if cfg.should_include_symbol(symbols.kinds[value.kind], bufnr) then
-- the hierarchy is basically a table of booleans which
-- tells whether the parent was the last in its group or
@@ -76,6 +146,8 @@ local function parse_result(result, depth, hierarchy, parent, bufnr)
node.children = children
end
end
vim.print("KINDS")
vim.print(vim.inspect(kinds))
return ret
end