diff --git a/lua/navigator/lspclient/clients.lua b/lua/navigator/lspclient/clients.lua index 1da0f52..eb7ff1a 100644 --- a/lua/navigator/lspclient/clients.lua +++ b/lua/navigator/lspclient/clients.lua @@ -185,7 +185,8 @@ local setups = { }, filetypes = { 'c', 'cpp', 'objc', 'objcpp' }, on_attach = function(client, bufnr) - client.server_capabilities.documentFormattingProvider = true + client.server_capabilities.documentFormattingProvider = client.server_capabilities.documentFormattingProvider + or true on_attach(client, bufnr) end, }, @@ -208,7 +209,7 @@ local setups = { sqls = { filetypes = { 'sql' }, on_attach = function(client, bufnr) - client.server_capabilities.executeCommandProvider = true + client.server_capabilities.executeCommandProvider = client.server_capabilities.documentFormattingProvider or true highlight.diagnositc_config_sign() require('sqls').setup({ picker = 'telescope' }) -- or default end, @@ -546,7 +547,12 @@ local function lsp_startup(ft, retry, user_lsp_opts) if config.combined_attach == nil then cfg.on_attach = function(client, bufnr) on_attach(client, bufnr) - client.server_capabilities.documentFormattingProvider = enable_fmt + if enable_fmt then + client.server_capabilities.documentFormattingProvider = client.server_capabilities.documentFormattingProvider + or enable_fmt + else + client.server_capabilities.documentFormattingProvider = false + end end end if config.combined_attach == 'mine' then @@ -555,7 +561,12 @@ local function lsp_startup(ft, retry, user_lsp_opts) end cfg.on_attach = function(client, bufnr) config.on_attach(client, bufnr) - client.server_capabilities.documentFormattingProvider = enable_fmt + if enable_fmt then + client.server_capabilities.documentFormattingProvider = client.server_capabilities.documentFormattingProvider + or enable_fmt + else + client.server_capabilities.documentFormattingProvider = false + end require('navigator.lspclient.mapping').setup({ client = client, bufnr = bufnr, @@ -567,7 +578,12 @@ local function lsp_startup(ft, retry, user_lsp_opts) cfg.on_attach = function(client, bufnr) on_attach(client, bufnr) config.on_attach(client, bufnr) - client.server_capabilities.documentFormattingProvider = enable_fmt + if enable_fmt then + client.server_capabilities.documentFormattingProvider = client.server_capabilities.documentFormattingProvider + or enable_fmt + else + client.server_capabilities.documentFormattingProvider = false + end require('navigator.lspclient.mapping').setup({ client = client, bufnr = bufnr, @@ -577,7 +593,13 @@ local function lsp_startup(ft, retry, user_lsp_opts) end if config.combined_attach == 'both' then cfg.on_attach = function(client, bufnr) - client.server_capabilities.documentFormattingProvider = enable_fmt + if enable_fmt then + client.server_capabilities.documentFormattingProvider = client.server_capabilities.documentFormattingProvider + or enable_fmt + else + client.server_capabilities.documentFormattingProvider = false + end + if config.on_attach and type(config.on_attach) == 'function' then config.on_attach(client, bufnr) end @@ -605,7 +627,13 @@ local function lsp_startup(ft, retry, user_lsp_opts) else cfg.on_attach = function(client, bufnr) on_attach(client, bufnr) - client.server_capabilities.documentFormattingProvider = enable_fmt + + if enable_fmt then + client.server_capabilities.documentFormattingProvider = client.server_capabilities.documentFormattingProvider + or enable_fmt + else + client.server_capabilities.documentFormattingProvider = false + end end end diff --git a/lua/navigator/lspclient/mapping.lua b/lua/navigator/lspclient/mapping.lua index 95c9709..ea6f9bb 100644 --- a/lua/navigator/lspclient/mapping.lua +++ b/lua/navigator/lspclient/mapping.lua @@ -9,6 +9,10 @@ local event_hdlrs = { { ev = 'CursorMoved', func = 'clear_references()' }, } +if vim.lsp.buf.format == nil then + vim.lsp.buf.format = vim.lsp.buf.formatting +end + if vim.diagnostic == nil then util.error('Please update nvim to 0.6.1+') end @@ -51,7 +55,7 @@ local key_maps = { { key = 'k', func = "require('navigator.dochighlight').hi_symbol()" }, { key = 'wa', func = "require('navigator.workspace').add_workspace_folder()" }, { key = 'wr', func = "require('navigator.workspace').remove_workspace_folder()" }, - { key = 'ff', func = 'formatting()', mode = 'n' }, + { key = 'ff', func = 'format({async = true})', mode = 'n' }, { key = 'ff', func = 'range_formatting()', mode = 'v' }, { key = 'wl', func = "require('navigator.workspace').list_workspace_folders()" }, { key = 'la', mode = 'n', func = "require('navigator.codelens').run_action()" }, @@ -157,7 +161,7 @@ local function set_mapping(user_opts) local m = value.mode or 'n' if string.find(value.func, 'range_formatting') then rfmtkey = value.key - elseif string.find(value.func, 'formatting') then + elseif string.find(value.func, 'format') then fmtkey = value.key end log('binding', k, f) @@ -174,7 +178,7 @@ local function set_mapping(user_opts) vim.cmd([[ aug NavigatorAuFormat au! - autocmd BufWritePre lua vim.lsp.buf.formatting() + autocmd BufWritePre lua vim.lsp.buf.format({async = true}) aug END ]]) elseif fmtkey then