Files
outline.nvim/lua/symbols-outline/config.lua
2022-08-27 15:10:19 +10:00

138 lines
3.5 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

local vim = vim
local M = {}
M.defaults = {
highlight_hovered_item = true,
show_guides = true,
position = 'right',
border = 'single',
relative_width = true,
width = 25,
auto_close = false,
auto_preview = false,
show_numbers = false,
show_relative_numbers = false,
show_symbol_details = true,
preview_bg_highlight = 'Pmenu',
winblend = 0,
autofold_depth = nil,
auto_unfold_hover = true,
fold_markers = { '', '' },
wrap = false,
keymaps = { -- These keymaps can be a string or a table for multiple keys
close = { '<Esc>', 'q' },
goto_location = '<Cr>',
focus_location = 'o',
hover_symbol = '<C-space>',
toggle_preview = 'K',
rename_symbol = 'r',
code_actions = 'a',
show_help = '?',
fold = 'h',
unfold = 'l',
fold_all = 'W',
unfold_all = 'E',
fold_reset = 'R',
},
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' },
Component = { icon = '', hl = 'TSFunction' },
Fragment = { icon = '', hl = 'TSConstant' },
},
}
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_window_width()
if M.options.relative_width then
return math.ceil(vim.o.columns * (M.options.width / 100))
else
return M.options.width
end
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)
if not client then
return false
end
return has_value(M.options.lsp_blacklist, client.name)
end
function M.show_help()
print 'Current keymaps:'
print(vim.inspect(M.options.keymaps))
end
function M.setup(options)
vim.g.symbols_outline_loaded = 1
M.options = vim.tbl_deep_extend('force', {}, M.defaults, options or {})
end
return M