feat(lsp)!: turn format filter into predicate (#18458)

This makes the common use case easier.
If one really needs access to all clients, they can create a filter
function which manually calls `get_active_clients`.
This commit is contained in:
Mathias Fußenegger 2022-05-25 19:38:01 +02:00 committed by GitHub
parent c6d6b8c7eb
commit fa3492c5f7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 14 additions and 29 deletions

View File

@ -1120,19 +1120,13 @@ format({options}) *vim.lsp.buf.format()*
• bufnr (number|nil): Restrict formatting to the clients
attached to the given buffer, defaults to the current
buffer (0).
• filter (function|nil): Predicate to filter clients used
for formatting. Receives the list of clients attached to
bufnr as the argument and must return the list of
clients on which to request formatting. Example: • >
• filter (function|nil): Predicate used to filter clients.
Receives a client as argument and must return a boolean.
Clients matching the predicate are included. Example: • >
-- Never request typescript-language-server for formatting
vim.lsp.buf.format {
filter = function(clients)
return vim.tbl_filter(
function(client) return client.name ~= "tsserver" end,
clients
)
end
filter = function(client) return client.name ~= "tsserver" end
}
<
• async boolean|nil If true the method won't block.

View File

@ -177,20 +177,15 @@ end
--- - bufnr (number|nil):
--- Restrict formatting to the clients attached to the given buffer, defaults to the current
--- buffer (0).
---
--- - filter (function|nil):
--- Predicate to filter clients used for formatting. Receives the list of clients attached
--- to bufnr as the argument and must return the list of clients on which to request
--- formatting. Example:
--- Predicate used to filter clients. Receives a client as argument and must return a
--- boolean. Clients matching the predicate are included. Example:
---
--- <pre>
--- -- Never request typescript-language-server for formatting
--- vim.lsp.buf.format {
--- filter = function(clients)
--- return vim.tbl_filter(
--- function(client) return client.name ~= "tsserver" end,
--- clients
--- )
--- end
--- filter = function(client) return client.name ~= "tsserver" end
--- }
--- </pre>
---
@ -207,18 +202,14 @@ end
function M.format(options)
options = options or {}
local bufnr = options.bufnr or vim.api.nvim_get_current_buf()
local clients = vim.lsp.buf_get_clients(bufnr)
local clients = vim.lsp.get_active_clients({
id = options.id,
bufnr = bufnr,
name = options.name,
})
if options.filter then
clients = options.filter(clients)
elseif options.id then
clients = vim.tbl_filter(function(client)
return client.id == options.id
end, clients)
elseif options.name then
clients = vim.tbl_filter(function(client)
return client.name == options.name
end, clients)
clients = vim.tbl_filter(options.filter, clients)
end
clients = vim.tbl_filter(function(client)