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

This commit is contained in:
Blaž Hrastnik 2021-08-29 18:38:28 +09:00
parent 7eff905680
commit 847d1fa496

View file

@ -1,7 +1,7 @@
use crate::Result;
use anyhow::{anyhow, Context};
use anyhow::Context;
use jsonrpc_core as jsonrpc;
use log::{debug, error, info};
use log::{debug, error, info, warn};
use serde::{Deserialize, Serialize};
use serde_json::Value;
use std::collections::HashMap;
@ -92,7 +92,12 @@ impl Transport {
content_length = Some(value.parse().context("invalid content length")?);
}
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);
}
}
}