fix: Work around crashes on LSPs that don't just emit JSON-RPC

pull/676/head
Blaž Hrastnik 3 years ago
parent 7eff905680
commit 847d1fa496

@ -1,7 +1,7 @@
use crate::Result; use crate::Result;
use anyhow::{anyhow, Context}; use anyhow::Context;
use jsonrpc_core as jsonrpc; use jsonrpc_core as jsonrpc;
use log::{debug, error, info}; use log::{debug, error, info, warn};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use serde_json::Value; use serde_json::Value;
use std::collections::HashMap; use std::collections::HashMap;
@ -92,7 +92,12 @@ impl Transport {
content_length = Some(value.parse().context("invalid content length")?); content_length = Some(value.parse().context("invalid content length")?);
} }
Some((_, _)) => {} Some((_, _)) => {}
None => return Err(anyhow!("Failed to parse header: {:?}", header).into()), None => {
// Workaround: Some non-conformant language servers will output logging and other garbage
// into the same stream as JSON-RPC messages. This can also happen from shell scripts that spawn
// the server. Skip such lines and log a warning.
warn!("Failed to parse header: {:?}", header);
}
} }
} }

Loading…
Cancel
Save