Mercurial > vim
changeset 33313:a60275d71dc2 v9.0.1922
patch 9.0.1922: LSP server request message is misinterpreted as a response message
Commit: https://github.com/vim/vim/commit/78c5a5abc657f0173551157547213d8bbb033fd4
Author: Yegappan Lakshmanan <yegappan@yahoo.com>
Date: Wed Sep 20 20:32:55 2023 +0200
patch 9.0.1922: LSP server request message is misinterpreted as a response message
Problem: LSP server request message is misinterpreted as a response message
Solution: Check that the message does not have the "message" field
closes: #13133
Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Wed, 20 Sep 2023 20:45:03 +0200 |
parents | 3a4308ce45b5 |
children | b811e2b76a5d |
files | src/channel.c src/version.c |
diffstat | 2 files changed, 12 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/channel.c +++ b/src/channel.c @@ -2927,9 +2927,16 @@ may_invoke_callback(channel_T *channel, seq_nr = 0; if (d != NULL) { - di = dict_find(d, (char_u *)"id", -1); - if (di != NULL && di->di_tv.v_type == VAR_NUMBER) - seq_nr = di->di_tv.vval.v_number; + // When looking for a response message from the LSP server, + // ignore new LSP request and notification messages. LSP + // request and notification messages have the "method" field in + // the header and the response messages do not have this field. + if (!dict_has_key(d, "method")) + { + di = dict_find(d, (char_u *)"id", -1); + if (di != NULL && di->di_tv.v_type == VAR_NUMBER) + seq_nr = di->di_tv.vval.v_number; + } } argv[1] = *listtv;