|
|
|
@ -10,22 +10,38 @@ end
|
|
|
|
|
if vim.diagnostic == nil then
|
|
|
|
|
util.error('Please update nvim to 0.6.1+')
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local function fallback_keymap(key)
|
|
|
|
|
-- when handler failed fallback to key
|
|
|
|
|
vim.schedule(function()
|
|
|
|
|
print('fallback to key', key)
|
|
|
|
|
vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes(key, true, true, true), 'n', true)
|
|
|
|
|
end)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local function fallback_fn(key)
|
|
|
|
|
return function()
|
|
|
|
|
fallback_keymap(key)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local double = { '╔', '═', '╗', '║', '╝', '═', '╚', '║' }
|
|
|
|
|
local single = { '╭', '─', '╮', '│', '╯', '─', '╰', '│' }
|
|
|
|
|
local remap = util.binding_remap
|
|
|
|
|
-- stylua: ignore start
|
|
|
|
|
local key_maps = {
|
|
|
|
|
{ key = 'gr', func = require('navigator.reference').async_ref, desc = 'async_ref' },
|
|
|
|
|
{ key = '<Leader>gr', func = require('navigator.reference').reference, desc = 'reference' }, -- reference deprecated
|
|
|
|
|
{ mode = 'i', key = '<M-k>', func = vim.lsp.buf.signature_help, desc = 'signature_help' },
|
|
|
|
|
{ key = '<c-k>', func = vim.lsp.buf.signature_help, desc = 'signature_help' },
|
|
|
|
|
{ key = 'g0', func = require('navigator.symbols').document_symbols, desc = 'document_symbols' },
|
|
|
|
|
{ key = '<Leader>g0', func = require('navigator.symbols').document_symbols, desc = 'document_symbols' },
|
|
|
|
|
{ key = 'gW', func = require('navigator.workspace').workspace_symbol_live, desc = 'workspace_symbol_live' },
|
|
|
|
|
{ key = '<c-]>', func = require('navigator.definition').definition, desc = 'definition' },
|
|
|
|
|
{ key = 'gd', func = require('navigator.definition').definition, desc = 'definition' },
|
|
|
|
|
{ key = 'gD', func = vim.lsp.buf.declaration, desc = 'declaration' },
|
|
|
|
|
{ key = 'gt', func = vim.lsp.buf.type_definition, desc = 'type_definition' },
|
|
|
|
|
{ key = 'gp', func = require('navigator.definition').definition_preview, desc = 'definition_preview' },
|
|
|
|
|
{ key = 'gP', func = require('navigator.definition').type_definition_preview, desc = 'type_definition_preview' },
|
|
|
|
|
{ key = 'gd', func = remap(require('navigator.definition').definition, 'gd'), desc = 'definition' },
|
|
|
|
|
{ key = 'gD', func = vim.lsp.buf.declaration, desc = 'declaration', fallback = fallback_fn('gD') }, -- fallback used
|
|
|
|
|
-- for lsp handler
|
|
|
|
|
{ key = 'gp', func = remap(require('navigator.definition').definition_preview, 'gp'), desc = 'definition_preview' }, -- paste
|
|
|
|
|
{ key = 'gP', func = remap(require('navigator.definition').type_definition_preview, 'gP'), desc = 'type_definition_preview' }, -- paste
|
|
|
|
|
{ key = '<Leader>gt', func = require('navigator.treesitter').buf_ts, desc = 'buf_ts' },
|
|
|
|
|
{ key = '<Leader>gT', func = require('navigator.treesitter').bufs_ts, desc = 'bufs_ts' },
|
|
|
|
|
{ key = '<Leader>ct', func = require('navigator.ctags').ctags, desc = 'ctags' },
|
|
|
|
@ -35,7 +51,7 @@ local key_maps = {
|
|
|
|
|
{ key = '<Space>rn', func = require('navigator.rename').rename, desc = 'rename' },
|
|
|
|
|
{ key = '<Leader>gi', func = vim.lsp.buf.incoming_calls, desc = 'incoming_calls' },
|
|
|
|
|
{ key = '<Leader>go', func = vim.lsp.buf.outgoing_calls, desc = 'outgoing_calls' },
|
|
|
|
|
{ key = 'gi', func = vim.lsp.buf.implementation, desc = 'implementation' },
|
|
|
|
|
{ key = 'gi', func = vim.lsp.buf.implementation, desc = 'implementation', fallback = fallback_fn('gi') }, -- insert
|
|
|
|
|
{ key = '<Space>D', func = vim.lsp.buf.type_definition, desc = 'type_definition' },
|
|
|
|
|
{ key = 'gL', func = require('navigator.diagnostics').show_diagnostics, desc = 'show_diagnostics' },
|
|
|
|
|
{ key = 'gG', func = require('navigator.diagnostics').show_buf_diagnostics, desc = 'show_buf_diagnostics' },
|
|
|
|
@ -45,7 +61,7 @@ local key_maps = {
|
|
|
|
|
{ key = ']O', func = vim.diagnostic.set_loclist, desc = 'diagnostics set loclist' },
|
|
|
|
|
{ key = ']r', func = require('navigator.treesitter').goto_next_usage, desc = 'goto_next_usage' },
|
|
|
|
|
{ key = '[r', func = require('navigator.treesitter').goto_previous_usage, desc = 'goto_previous_usage' },
|
|
|
|
|
{ key = '<C-LeftMouse>', func = vim.lsp.buf.definition, desc = 'definition' },
|
|
|
|
|
{ key = '<C-LeftMouse>', func = vim.lsp.buf.definition, desc = 'definition', fallback = fallback_fn('<C-LeftMouse>')},
|
|
|
|
|
{ key = 'g<LeftMouse>', func = vim.lsp.buf.implementation, desc = 'implementation' },
|
|
|
|
|
{ key = '<Leader>k', func = require('navigator.dochighlight').hi_symbol, desc = 'hi_symbol' },
|
|
|
|
|
{ key = '<Space>wa', func = require('navigator.workspace').add_workspace_folder, desc = 'add_workspace_folder' },
|
|
|
|
@ -55,7 +71,8 @@ local key_maps = {
|
|
|
|
|
{ key = '<Space>gm', func = require('navigator.formatting').range_format, mode = 'n', desc = 'range format operator e.g gmip' },
|
|
|
|
|
{ key = '<Space>wl', func = require('navigator.workspace').list_workspace_folders, desc = 'list_workspace_folders' },
|
|
|
|
|
{
|
|
|
|
|
key = '<Space>la', mode = 'n',
|
|
|
|
|
key = '<Space>la',
|
|
|
|
|
mode = 'n',
|
|
|
|
|
func = require('navigator.codelens').run_action,
|
|
|
|
|
desc = 'run code lens action',
|
|
|
|
|
}
|
|
|
|
@ -158,7 +175,7 @@ local function set_mapping(lsp_attach_info)
|
|
|
|
|
k = ks[mode]
|
|
|
|
|
end
|
|
|
|
|
if vim.tbl_contains(k, key) then
|
|
|
|
|
vim.api.nvim_buf_del_keymap(bufnr, mode, key, ...)
|
|
|
|
|
vim.api.nvim_buf_del_keymap(bufnr, mode, key)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
@ -193,12 +210,11 @@ local function set_mapping(lsp_attach_info)
|
|
|
|
|
log('setting maps to ', key_maps)
|
|
|
|
|
end
|
|
|
|
|
local fmtkey, rfmtkey, nrfmtkey
|
|
|
|
|
require('navigator.formatting')
|
|
|
|
|
for _, value in pairs(key_maps) do
|
|
|
|
|
if value.doc then
|
|
|
|
|
vim.notify('doc field no longer supported in navigator mapping, use desc instead')
|
|
|
|
|
end
|
|
|
|
|
if type(value.func) == 'function' then -- new from 0.7.x
|
|
|
|
|
if type(value.func) == 'function' then
|
|
|
|
|
-- neovim 0.7.0
|
|
|
|
|
opts.buffer = key_maps.buffer or value.buffer
|
|
|
|
|
if value.desc then
|
|
|
|
@ -337,7 +353,11 @@ function M.setup(attach_opts)
|
|
|
|
|
autocmd()
|
|
|
|
|
|
|
|
|
|
local client = attach_opts.client or {}
|
|
|
|
|
local cap = client.server_capabilities or vim.lsp.protocol.make_client_capabilities()
|
|
|
|
|
local cap = client.server_capabilities
|
|
|
|
|
if cap == nil then
|
|
|
|
|
log('no cap found for client ', client.name)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
log('lsp cap:', cap.codeActionProvider)
|
|
|
|
|
|
|
|
|
@ -351,17 +371,46 @@ function M.setup(attach_opts)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if _NgConfigValues.lsp.definition.enable then
|
|
|
|
|
vim.lsp.handlers['textDocument/definition'] = require('navigator.definition').definition_handler
|
|
|
|
|
vim.lsp.handlers['textDocument/typeDefinition'] =
|
|
|
|
|
require('navigator.definition').definition_handler
|
|
|
|
|
for _, value in pairs(key_maps) do
|
|
|
|
|
if value.func == vim.lsp.buf.definition then
|
|
|
|
|
vim.lsp.handlers['textDocument/definition'] = util.mk_handler_remap(
|
|
|
|
|
require('navigator.definition').definition_handler, value.fallback)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if value.func == vim.lsp.buf.type_definition then
|
|
|
|
|
vim.lsp.handlers['textDocument/typeDefinition'] = util.mk_handler_remap(
|
|
|
|
|
require('navigator.definition').definition_handler, value.fallback)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
else
|
|
|
|
|
-- delete keymaps
|
|
|
|
|
for _, value in pairs(key_maps) do
|
|
|
|
|
if value.func == vim.lsp.buf.definition or value.func == vim.lsp.buf.type_definition then
|
|
|
|
|
vim.keymap.del(value.mode or 'n', value.key, { buffer = attach_opts.bufnr or vim.api.nvim_get_current_buf() })
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
vim.lsp.handlers['textDocument/references'] = require('navigator.reference').reference_handler
|
|
|
|
|
-- vim.lsp.handlers["textDocument/codeAction"] = require"navigator.codeAction".code_action_handler
|
|
|
|
|
|
|
|
|
|
if cap.declarationProvider then
|
|
|
|
|
vim.lsp.handlers['textDocument/declaration'] =
|
|
|
|
|
require('navigator.definition').declaration_handler
|
|
|
|
|
local hdlr = require('navigator.definition').declaration_handler
|
|
|
|
|
|
|
|
|
|
for _, value in pairs(key_maps) do
|
|
|
|
|
if value.func == vim.lsp.buf.declaration then
|
|
|
|
|
vim.lsp.handlers['textDocument/declaration'] = util.mk_handler_remap(hdlr, value.fallback)
|
|
|
|
|
break
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
else
|
|
|
|
|
-- remove declaration keymap
|
|
|
|
|
for _, value in pairs(key_maps) do
|
|
|
|
|
if value.func == vim.lsp.buf.declaration then
|
|
|
|
|
vim.keymap.del(value.mode or 'n', value.key, { buffer = attach_opts.bufnr or vim.api.nvim_get_current_buf() })
|
|
|
|
|
break
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if _NgConfigValues.lsp.implementation.enable then
|
|
|
|
|