From 9af355964306977eab836ca5324ed70d685c0c8e Mon Sep 17 00:00:00 2001 From: Mathias Fußenegger Date: Fri, 5 Apr 2024 13:24:39 +0200 Subject: feat(lsp): set workDoneToken in initialize request (#28182) Problem: Some servers don't report progress during initialize unless the client sets the `workDoneToken` See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#initiatingWorkDoneProgress In particular: > There is no specific client capability signaling whether a client will > send a progress token per request. The reason for this is that this is > in many clients not a static aspect and might even change for every > request instance for the same request type. So the capability is signal > on every request instance by the presence of a workDoneToken property. And: > Servers can also initiate progress reporting using the > window/workDoneProgress/create request. This is useful if the server > needs to report progress outside of a request (for example the server > needs to re-index a database). The token can then be used to report > progress using the same notifications used as for client initiated > progress. So far progress report functionality was relying entirely on the latter. Solution: Set a `workDoneToken` Closes https://github.com/neovim/neovim/issues/27938 --- test/functional/fixtures/fake-lsp-server.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'test') diff --git a/test/functional/fixtures/fake-lsp-server.lua b/test/functional/fixtures/fake-lsp-server.lua index 42a1248464..f806869b40 100644 --- a/test/functional/fixtures/fake-lsp-server.lua +++ b/test/functional/fixtures/fake-lsp-server.lua @@ -110,7 +110,8 @@ local tests = {} function tests.basic_init() skeleton { - on_init = function(_) + on_init = function(params) + assert_eq(params.workDoneToken, '1') return { capabilities = { textDocumentSync = protocol.TextDocumentSyncKind.None, -- cgit