on master help sign in
fix: lsp: Terminate transport on EOF
41f1e8eBlaž Hrastnik
helix-lsp/src/transport.rs+11−6
@@ -1,4 +1,4 @@
1−use crate::Result;
1+use crate::{Error, Result};
2use anyhow::Context;
2use anyhow::Context;
3use jsonrpc_core as jsonrpc;
3use jsonrpc_core as jsonrpc;
4use log::{debug, error, info, warn};
4use log::{debug, error, info, warn};
@@ -76,14 +76,17 @@ impl Transport {
76 let mut content_length = None;
76 let mut content_length = None;
77 loop {
77 loop {
78 buffer.truncate(0);
78 buffer.truncate(0);
79− reader.read_line(buffer).await?;
79+ if reader.read_line(buffer).await? == 0 {
80+ return Err(Error::StreamClosed);
81+ };
82+
80− let header = buffer.trim();
83+ // debug!("<- header {:?}", buffer);
81
84
82 if header.is_empty() {
85 if header.is_empty() {
83 break;
86 break;
84 }
87 }
85
88
86− debug!("<- header {}", header);
89+ let header = buffer.trim();
87
90
88 let parts = header.split_once(": ");
91 let parts = header.split_once(": ");
89
92
@@ -121,8 +124,10 @@ impl Transport {
121 buffer: &mut String,
124 buffer: &mut String,
122 ) -> Result<()> {
125 ) -> Result<()> {
123 buffer.truncate(0);
126 buffer.truncate(0);
124− err.read_line(buffer).await?;
127+ if err.read_line(buffer).await? == 0 {
128+ return Err(Error::StreamClosed);
129+ };
125− error!("err <- {}", buffer);
130+ error!("err <- {:?}", buffer);
126
131
127 Ok(())
132 Ok(())
128 }
133 }