diff options
author | Sean Dewar <seandewar@users.noreply.github.com> | 2023-01-24 06:15:43 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-24 07:15:43 +0100 |
commit | bcdbf77537cec4567a334a39fd5965a3f5668a1a (patch) | |
tree | ffe3bcfcfcb92a62af49b15358cbd089edf149e0 /runtime/lua/vim/lsp/buf.lua | |
parent | 7126d9b8c70edb02bd17360fed4d959c87574b34 (diff) | |
download | rneovim-bcdbf77537cec4567a334a39fd5965a3f5668a1a.tar.gz rneovim-bcdbf77537cec4567a334a39fd5965a3f5668a1a.tar.bz2 rneovim-bcdbf77537cec4567a334a39fd5965a3f5668a1a.zip |
fix(lsp): check method is supported when range formatting (#21970)
`vim.lsp.buf.format()` silently did nothing if no servers supported
`textDocument/rangeFormatting` when formatting with a range.
Issue found by `@hwrd:matrix.org` in the Matrix chat.
Diffstat (limited to 'runtime/lua/vim/lsp/buf.lua')
-rw-r--r-- | runtime/lua/vim/lsp/buf.lua | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/runtime/lua/vim/lsp/buf.lua b/runtime/lua/vim/lsp/buf.lua index be237eb494..6ac885c78f 100644 --- a/runtime/lua/vim/lsp/buf.lua +++ b/runtime/lua/vim/lsp/buf.lua @@ -197,20 +197,21 @@ function M.format(options) clients = vim.tbl_filter(options.filter, clients) end + local mode = api.nvim_get_mode().mode + local range = options.range + if not range and mode == 'v' or mode == 'V' then + range = range_from_selection() + end + local method = range and 'textDocument/rangeFormatting' or 'textDocument/formatting' + clients = vim.tbl_filter(function(client) - return client.supports_method('textDocument/formatting') + return client.supports_method(method) end, clients) if #clients == 0 then vim.notify('[LSP] Format request failed, no matching language servers.') end - local mode = api.nvim_get_mode().mode - local range = options.range - if not range and mode == 'v' or mode == 'V' then - range = range_from_selection() - end - ---@private local function set_range(client, params) if range then @@ -221,7 +222,6 @@ function M.format(options) return params end - local method = range and 'textDocument/rangeFormatting' or 'textDocument/formatting' if options.async then local do_format do_format = function(idx, client) |