local vim = vim local M = {} local defaults = { highlight_hovered_item = true, show_guides = true, position = 'right', width = 25, auto_preview = true, show_numbers = false, show_relative_numbers = false, show_symbol_details = true, keymaps = { -- These keymaps can be a string or a table for multiple keys close = {"", "q"}, goto_location = "", focus_location = "o", hover_symbol = "", rename_symbol = "r", code_actions = "a" }, lsp_blacklist = {}, symbol_blacklist = {}, symbols = { File = {icon = "", hl = "TSURI"}, Module = {icon = "", hl = "TSNamespace"}, Namespace = {icon = "", hl = "TSNamespace"}, Package = {icon = "", hl = "TSNamespace"}, Class = {icon = "𝓒", hl = "TSType"}, Method = {icon = "ƒ", hl = "TSMethod"}, Property = {icon = "", hl = "TSMethod"}, Field = {icon = "", hl = "TSField"}, Constructor = {icon = "", hl = "TSConstructor"}, Enum = {icon = "ℰ", hl = "TSType"}, Interface = {icon = "ﰮ", hl = "TSType"}, Function = {icon = "", hl = "TSFunction"}, Variable = {icon = "", hl = "TSConstant"}, Constant = {icon = "", hl = "TSConstant"}, String = {icon = "𝓐", hl = "TSString"}, Number = {icon = "#", hl = "TSNumber"}, Boolean = {icon = "⊨", hl = "TSBoolean"}, Array = {icon = "", hl = "TSConstant"}, Object = {icon = "⦿", hl = "TSType"}, Key = {icon = "🔐", hl = "TSType"}, Null = {icon = "NULL", hl = "TSType"}, EnumMember = {icon = "", hl = "TSField"}, Struct = {icon = "𝓢", hl = "TSType"}, Event = {icon = "🗲", hl = "TSType"}, Operator = {icon = "+", hl = "TSOperator"}, TypeParameter = {icon = "𝙏", hl = "TSParameter"} } } M.options = {} function M.has_numbers() return M.options.show_numbers or M.options.show_relative_numbers end function M.get_position_navigation_direction() if M.options.position == 'left' then return 'h' else return 'l' end end function M.get_width_percentage() return M.options.width / 100 end function M.get_split_command() if M.options.position == 'left' then return "topleft vs" else return "botright vs" end end local function has_value(tab, val) for _, value in ipairs(tab) do if value == val then return true end end return false end function M.is_symbol_blacklisted(kind) if kind == nil then return false end return has_value(M.options.symbol_blacklist, kind) end function M.is_client_blacklisted(client_id) local client = vim.lsp.get_client_by_id(client_id) return has_value(M.options.lsp_blacklist, client.name) end function M.setup(options) M.options = vim.tbl_deep_extend("force", {}, defaults, options or {}) end return M