From 308254ad72ba1daddd14f43e510e58143e8135e9 Mon Sep 17 00:00:00 2001 From: Maximilian Friedersdorff Date: Tue, 25 Mar 2025 14:46:13 +0000 Subject: [PATCH] Install symbol-usage --- .../nvim/lua/plugins/symbol-usage.lua | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 home/dot_config/nvim/lua/plugins/symbol-usage.lua diff --git a/home/dot_config/nvim/lua/plugins/symbol-usage.lua b/home/dot_config/nvim/lua/plugins/symbol-usage.lua new file mode 100644 index 0000000..f6169e3 --- /dev/null +++ b/home/dot_config/nvim/lua/plugins/symbol-usage.lua @@ -0,0 +1,69 @@ +return { + "Wansmer/symbol-usage.nvim", + event = "LspAttach", -- need run before LspAttach if you use nvim 0.9. On 0.10 use 'LspAttach' + config = function() + local function h(name) + return vim.api.nvim_get_hl(0, { name = name }) + end + + -- hl-groups can have any name + vim.api.nvim_set_hl(0, "SymbolUsageRounding", { fg = h("CursorLine").bg, italic = true }) + vim.api.nvim_set_hl(0, "SymbolUsageContent", { bg = h("CursorLine").bg, fg = h("Comment").fg, italic = true }) + vim.api.nvim_set_hl(0, "SymbolUsageRef", { fg = h("Function").fg, bg = h("CursorLine").bg, italic = true }) + vim.api.nvim_set_hl(0, "SymbolUsageDef", { fg = h("Type").fg, bg = h("CursorLine").bg, italic = true }) + vim.api.nvim_set_hl(0, "SymbolUsageImpl", { fg = h("@keyword").fg, bg = h("CursorLine").bg, italic = true }) + + local function text_format(symbol) + local res = {} + + local round_start = { "", "SymbolUsageRounding" } + local round_end = { "", "SymbolUsageRounding" } + + -- Indicator that shows if there are any other symbols in the same line + local stacked_functions_content = symbol.stacked_count > 0 and ("+%s"):format(symbol.stacked_count) or "" + + if symbol.references then + local usage = symbol.references <= 1 and "usage" or "usages" + local num = symbol.references == 0 and "no" or symbol.references + table.insert(res, round_start) + table.insert(res, { "󰌹 ", "SymbolUsageRef" }) + table.insert(res, { ("%s %s"):format(num, usage), "SymbolUsageContent" }) + table.insert(res, round_end) + end + + if symbol.definition then + if #res > 0 then + table.insert(res, { " ", "NonText" }) + end + table.insert(res, round_start) + table.insert(res, { "󰳽 ", "SymbolUsageDef" }) + table.insert(res, { symbol.definition .. " defs", "SymbolUsageContent" }) + table.insert(res, round_end) + end + + if symbol.implementation then + if #res > 0 then + table.insert(res, { " ", "NonText" }) + end + table.insert(res, round_start) + table.insert(res, { "󰡱 ", "SymbolUsageImpl" }) + table.insert(res, { symbol.implementation .. " impls", "SymbolUsageContent" }) + table.insert(res, round_end) + end + + if stacked_functions_content ~= "" then + if #res > 0 then + table.insert(res, { " ", "NonText" }) + end + table.insert(res, round_start) + table.insert(res, { " ", "SymbolUsageImpl" }) + table.insert(res, { stacked_functions_content, "SymbolUsageContent" }) + table.insert(res, round_end) + end + + return res + end + + require("symbol-usage").setup({ text_format = text_format }) + end, +}