259 lines
8.9 KiB
Lua
259 lines
8.9 KiB
Lua
|
local M = {}
|
|||
|
|
|||
|
function M.signature()
|
|||
|
require('lsp_signature').setup {
|
|||
|
bind = true, -- This is mandatory, otherwise border config doesn't work
|
|||
|
floating_window = true,
|
|||
|
fix_pos = true,
|
|||
|
hint_enable = false,
|
|||
|
hint_prefix = ' ',
|
|||
|
hint_scheme = 'String',
|
|||
|
hi_parameter = 'Visual',
|
|||
|
transparency = 5,
|
|||
|
handler_opts = {border = 'single'},
|
|||
|
zindex = 50, -- set to 200 to make the float window on top of others
|
|||
|
toggle_key = '<C-k>'
|
|||
|
}
|
|||
|
end
|
|||
|
|
|||
|
function M.saga()
|
|||
|
require('lspsaga').init_lsp_saga {
|
|||
|
debug = false,
|
|||
|
use_saga_diagnostic_sign = true,
|
|||
|
-- diagnostic sign
|
|||
|
error_sign = '',
|
|||
|
warn_sign = '',
|
|||
|
hint_sign = '',
|
|||
|
infor_sign = '',
|
|||
|
dianostic_header_icon = ' ',
|
|||
|
-- code action title icon
|
|||
|
code_action_icon = ' ',
|
|||
|
code_action_prompt = {
|
|||
|
enable = false,
|
|||
|
sign = true,
|
|||
|
sign_priority = 40,
|
|||
|
virtual_text = true
|
|||
|
},
|
|||
|
finder_definition_icon = ' ',
|
|||
|
finder_reference_icon = ' ',
|
|||
|
max_preview_lines = 10,
|
|||
|
finder_action_keys = {
|
|||
|
open = 'o',
|
|||
|
vsplit = 's',
|
|||
|
split = 'i',
|
|||
|
quit = 'q',
|
|||
|
scroll_down = '<C-f>',
|
|||
|
scroll_up = '<C-b>'
|
|||
|
},
|
|||
|
code_action_keys = {
|
|||
|
quit = 'q',
|
|||
|
exec = '<CR>'
|
|||
|
},
|
|||
|
rename_action_keys = {
|
|||
|
quit = '<C-c>',
|
|||
|
exec = '<CR>'
|
|||
|
},
|
|||
|
definition_preview_icon = ' ',
|
|||
|
border_style = 'single',
|
|||
|
rename_prompt_prefix = '',
|
|||
|
server_filetype_map = {}
|
|||
|
}
|
|||
|
end
|
|||
|
|
|||
|
function M.lsp()
|
|||
|
require('modules.lsp.lsp_conf')
|
|||
|
end
|
|||
|
|
|||
|
function M.null_ls()
|
|||
|
require('modules.lsp.null_ls_conf')
|
|||
|
end
|
|||
|
|
|||
|
function M.sqls()
|
|||
|
require('sqls').setup {
|
|||
|
picker = 'telescope'
|
|||
|
}
|
|||
|
end
|
|||
|
|
|||
|
function M.trouble()
|
|||
|
require('trouble').setup {
|
|||
|
mode = 'lsp_workspace_diagnostics',
|
|||
|
fold_open = ' ',
|
|||
|
fold_closed = '',
|
|||
|
action_keys = {
|
|||
|
open_split = {'<c-h>'},
|
|||
|
open_vsplit = {'<c-v>'},
|
|||
|
open_tab = {'<c-t>'}
|
|||
|
},
|
|||
|
signs = {
|
|||
|
error = '',
|
|||
|
warning = '',
|
|||
|
information = '',
|
|||
|
hint = '',
|
|||
|
other = ''
|
|||
|
}
|
|||
|
}
|
|||
|
end
|
|||
|
|
|||
|
function M.todo_comments()
|
|||
|
require('todo-comments').setup {
|
|||
|
signs = false,
|
|||
|
-- sign_priority = 8,
|
|||
|
keywords = {
|
|||
|
FIX = {
|
|||
|
icon = ' ', -- icon used for the sign, and in search results
|
|||
|
color = 'error', -- can be a hex color, or a named color (see below)
|
|||
|
alt = {'FIXME', 'BUG', 'FIXIT', 'ISSUE'}, -- a set of other keywords that all map to this FIX keywords
|
|||
|
-- signs = false, -- configure signs for some keywords individually
|
|||
|
},
|
|||
|
TODO = {icon = ' ', color = 'info'},
|
|||
|
HACK = {icon = ' ', color = 'warning'},
|
|||
|
WARN = {icon = ' ', color = 'warning', alt = {'WARNING', 'XXX'}},
|
|||
|
PERF = {icon = ' ', alt = {'OPTIM', 'PERFORMANCE', 'OPTIMIZE'}},
|
|||
|
NOTE = {icon = ' ', color = 'hint', alt = {'INFO'}},
|
|||
|
},
|
|||
|
merge_keywords = true,
|
|||
|
highlight = {
|
|||
|
before = '', -- 'fg' or 'bg' or empty
|
|||
|
keyword = 'fg', -- 'fg', 'bg', 'wide' or empty. (wide is the same as bg, but will also highlight surrounding characters)
|
|||
|
after = '', -- 'fg' or 'bg' or empty
|
|||
|
pattern = [[.*<(KEYWORDS)\s*:]], -- pattern or table of patterns, used for highlightng (vim regex)
|
|||
|
comments_only = true, -- uses treesitter to match keywords in comments only
|
|||
|
max_line_len = 400, -- ignore lines longer than this
|
|||
|
exclude = {'org'} -- list of file types to exclude highlighting
|
|||
|
},
|
|||
|
colors = {
|
|||
|
error = {'LspDiagnosticsDefaultError', 'TSDanger', '#bf616a', '#e06c75'},
|
|||
|
warning = {'LspDiagnosticsDefaultWarning', 'TSWarning', '#ebcb8b', '#e5c07b'},
|
|||
|
info = {'LspDiagnosticsDefaultInformation', 'TSNote', '#81a1c1', '#61afef'},
|
|||
|
hint = {'LspDiagnosticsDefaultHint', '#88c0d0', '#56b6c2'},
|
|||
|
default = {'Normal', '#d8dee9', '#abb2bf'}
|
|||
|
},
|
|||
|
search = {
|
|||
|
command = 'rg',
|
|||
|
args = {
|
|||
|
'--hidden',
|
|||
|
'--color=never',
|
|||
|
'--no-heading',
|
|||
|
'--with-filename',
|
|||
|
'--line-number',
|
|||
|
'--column',
|
|||
|
},
|
|||
|
-- regex that will be used to match keywords.
|
|||
|
-- don't replace the (KEYWORDS) placeholder
|
|||
|
pattern = [[\b(KEYWORDS):]] -- ripgrep regex
|
|||
|
-- pattern = [[\b(KEYWORDS)\b]] -- match without the extra colon. You'll likely get false positives
|
|||
|
}
|
|||
|
}
|
|||
|
end
|
|||
|
|
|||
|
function M.symbols_outline()
|
|||
|
vim.g.symbols_outline = {
|
|||
|
highlight_hovered_item = false,
|
|||
|
show_guides = true,
|
|||
|
auto_preview = true,
|
|||
|
position = 'right',
|
|||
|
width = 30,
|
|||
|
show_numbers = false,
|
|||
|
show_relative_numbers = false,
|
|||
|
show_symbol_details = true,
|
|||
|
preview_bg_highlight = 'NormalFloat',
|
|||
|
keymaps = { -- Can be string or a table
|
|||
|
close = {'<Esc>', 'q'},
|
|||
|
goto_location = '<Cr>',
|
|||
|
focus_location = 'o',
|
|||
|
hover_symbol = '<C-space>',
|
|||
|
toggle_preview = 'K',
|
|||
|
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'}
|
|||
|
}
|
|||
|
}
|
|||
|
end
|
|||
|
|
|||
|
function M.dap()
|
|||
|
local dap = require('dap')
|
|||
|
vim.fn.sign_define('DapBreakpoint', {text='', texthl='DapSignDefault'})
|
|||
|
vim.fn.sign_define('DapLogPoint', {text='', texthl='DapSignDefault'})
|
|||
|
vim.fn.sign_define('DapStopped', {text='ﱢ', texthl='DapSignDefault'})
|
|||
|
vim.fn.sign_define('DapBreakpointRejected', {text='', texthl='DapSignRejected'})
|
|||
|
|
|||
|
require('mappings').dap()
|
|||
|
end
|
|||
|
|
|||
|
function M.dapui()
|
|||
|
local dap, dapui = require('dap'), require('dapui')
|
|||
|
dap.listeners.after.event_initialized['dapui_config'] = function() dapui.open() end
|
|||
|
dap.listeners.before.event_terminated['dapui_config'] = function() dapui.close() end
|
|||
|
dap.listeners.before.event_exited['dapui_config'] = function() dapui.close() end
|
|||
|
|
|||
|
require('dapui').setup {
|
|||
|
icons = {expanded = '', collapsed = ''},
|
|||
|
mappings = {
|
|||
|
expand = {'<CR>', '<2-LeftMouse>'},
|
|||
|
open = 'o',
|
|||
|
remove = 'd',
|
|||
|
edit = 'e',
|
|||
|
repl = 'r'
|
|||
|
},
|
|||
|
sidebar = {
|
|||
|
elements = {
|
|||
|
-- Provide as ID strings or tables with 'id' and 'size' keys
|
|||
|
-- 'size' can be float or integer > 1
|
|||
|
{id = 'scopes', size = 0.25},
|
|||
|
{id = 'breakpoints', size = 0.25},
|
|||
|
{id = 'stacks', size = 0.25},
|
|||
|
{id = 'watches', size = 0.25},
|
|||
|
},
|
|||
|
size = 40,
|
|||
|
position = 'left'
|
|||
|
},
|
|||
|
tray = {
|
|||
|
elements = {'repl'},
|
|||
|
size = 10,
|
|||
|
position = 'bottom'
|
|||
|
},
|
|||
|
floating = {
|
|||
|
max_height = nil, -- These can be integers or a float between 0 and 1.
|
|||
|
max_width = nil, -- Floats will be treated as percentage of your screen.
|
|||
|
border = 'single',
|
|||
|
mappings = {
|
|||
|
close = {'q', '<Esc>'}
|
|||
|
}
|
|||
|
},
|
|||
|
windows = {indent = 1}
|
|||
|
}
|
|||
|
|
|||
|
require('mappings').dapui()
|
|||
|
end
|
|||
|
|
|||
|
return M
|