docs: provide example for configuring LSP foldexpr (#31411)

Using the "supports_method" function with a client capability inside of
an LspAttach autocommand is the preferred method to do this, so we
should be showing users how to do it.
This commit is contained in:
Gregory Anders 2024-12-02 12:13:09 -06:00 committed by GitHub
parent c7ec010ade
commit 49d6cd1da8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 29 additions and 0 deletions

View File

@ -720,6 +720,19 @@ foldexpr({lnum}) *vim.lsp.foldexpr()*
Provides an interface between the built-in client and a `foldexpr`
function.
To use, check for the "textDocument/foldingRange" capability in an
|LspAttach| autocommand. Example: >lua
vim.api.nvim_create_autocommand('LspAttach', {
callback = function(args)
local client = vim.lsp.get_client_by_id(args.data.client_id)
if client:supports_method('textDocument/foldingRange') then
vim.wo.foldmethod = 'expr'
vim.wo.foldexpr = 'v:lua.vim.lsp.foldexpr()'
end
end,
})
<
Parameters: ~
• {lnum} (`integer`) line number

View File

@ -1097,6 +1097,22 @@ function lsp.tagfunc(pattern, flags)
end
--- Provides an interface between the built-in client and a `foldexpr` function.
---
--- To use, check for the "textDocument/foldingRange" capability in an
--- |LspAttach| autocommand. Example:
---
--- ```lua
--- vim.api.nvim_create_autocommand('LspAttach', {
--- callback = function(args)
--- local client = vim.lsp.get_client_by_id(args.data.client_id)
--- if client:supports_method('textDocument/foldingRange') then
--- vim.wo.foldmethod = 'expr'
--- vim.wo.foldexpr = 'v:lua.vim.lsp.foldexpr()'
--- end
--- end,
--- })
--- ```
---
---@param lnum integer line number
function lsp.foldexpr(lnum)
return vim.lsp._folding_range.foldexpr(lnum)