From b8a1416a88d123e64c52665b6d0a58abbe1d66d4 Mon Sep 17 00:00:00 2001 From: Abdullah Alsigar Date: Fri, 2 Feb 2024 12:34:45 +0300 Subject: [PATCH] Handle multiple headers --- crates/lsp/src/lsp.rs | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/crates/lsp/src/lsp.rs b/crates/lsp/src/lsp.rs index 3326bde00f6385..54f1a0b28c0b0c 100644 --- a/crates/lsp/src/lsp.rs +++ b/crates/lsp/src/lsp.rs @@ -320,21 +320,26 @@ impl LanguageServer { } }); let mut buffer = Vec::new(); - loop { + 'outer: loop { buffer.clear(); - if stdout.read_until(b'\n', &mut buffer).await? == 0 { - break; - }; - - if stdout.read_until(b'\n', &mut buffer).await? == 0 { - break; - }; + while let Ok(bytes_read) = stdout.read_until(b'\n', &mut buffer).await { + if bytes_read == 0 { + break 'outer; + } + if buffer.ends_with(b"\r\n\r\n") { + break; + } + } let header = std::str::from_utf8(&buffer)?; let message_len: usize = header .strip_prefix(CONTENT_LEN_HEADER) .ok_or_else(|| anyhow!("invalid LSP message header {header:?}"))? + .split_whitespace() + .collect::>() + .get_mut(0) + .ok_or_else(|| anyhow!("invalid LSP message header {header:?}"))? .trim_end() .parse()?;