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

imgbot
Blaž Hrastnik 3 years ago
parent 7eff905680
commit 847d1fa496

@ -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);
}
}
}

Loading…
Cancel
Save