feat(lsp)!: add vim.lsp.status, client.progress and promote LspProgressUpdate (#23958)

`client.messages` could grow unbounded because the default handler only
added new messages, never removing them.

A user either had to consume the messages by calling
`vim.lsp.util.get_progress_messages` or by manually removing them from
`client.messages.progress`. If they didn't do that, using LSP
effectively leaked memory.

To fix this, this deprecates the `messages` property and instead adds a
`progress` ring buffer that only keeps at most 50 messages. In addition
it deprecates `vim.lsp.util.get_progress_messages` in favour of a new
`vim.lsp.status()` and also promotes the `LspProgressUpdate` user
autocmd to a regular autocmd to allow users to pattern match on the
progress kind.

Also closes https://github.com/neovim/neovim/pull/20327
This commit is contained in:
Mathias Fußenegger
2023-06-09 11:32:43 +02:00
committed by GitHub
parent f31dba93f9
commit e5e0bda41b
8 changed files with 173 additions and 65 deletions

View File

@@ -74,6 +74,7 @@ return {
'LspDetach', -- after an LSP client detaches from a buffer
'LspRequest', -- after an LSP request is started, canceled, or completed
'LspTokenUpdate', -- after a visible LSP token is updated
'LspProgress', -- after a LSP progress update
'MenuPopup', -- just before popup menu is displayed
'ModeChanged', -- after changing the mode
'OptionSet', -- after setting any option
@@ -154,6 +155,7 @@ return {
LspAttach=true,
LspDetach=true,
LspRequest=true,
LspProgress=true,
LspTokenUpdate=true,
RecordingEnter=true,
RecordingLeave=true,