aboutsummaryrefslogtreecommitdiff
path: root/helix-lsp
diff options
context:
space:
mode:
authorMichael Davis2023-02-16 01:16:25 +0000
committerGitHub2023-02-16 01:16:25 +0000
commit0f64f31d8b89c24910208bc50baa8ce03c00fbf3 (patch)
tree8cbea19d77acc3824c1dc0c1b110eec60ae82991 /helix-lsp
parentd8526a752c52e73f041f76869c0e040959632927 (diff)
LSP: Add request ID to request timeout message (#6010)
This improves error logging for requests - without the ID it's hard to know which request is the one that timed out.
Diffstat (limited to 'helix-lsp')
-rw-r--r--helix-lsp/src/client.rs4
-rw-r--r--helix-lsp/src/jsonrpc.rs10
-rw-r--r--helix-lsp/src/lib.rs4
3 files changed, 14 insertions, 4 deletions
diff --git a/helix-lsp/src/client.rs b/helix-lsp/src/client.rs
index 46772dd2..3f88b352 100644
--- a/helix-lsp/src/client.rs
+++ b/helix-lsp/src/client.rs
@@ -201,7 +201,7 @@ impl Client {
let request = jsonrpc::MethodCall {
jsonrpc: Some(jsonrpc::Version::V2),
- id,
+ id: id.clone(),
method: R::METHOD.to_string(),
params: Self::value_into_params(params),
};
@@ -218,7 +218,7 @@ impl Client {
// TODO: delay other calls until initialize success
timeout(Duration::from_secs(timeout_secs), rx.recv())
.await
- .map_err(|_| Error::Timeout)? // return Timeout
+ .map_err(|_| Error::Timeout(id))? // return Timeout
.ok_or(Error::StreamClosed)?
}
}
diff --git a/helix-lsp/src/jsonrpc.rs b/helix-lsp/src/jsonrpc.rs
index 69d02707..f415dde0 100644
--- a/helix-lsp/src/jsonrpc.rs
+++ b/helix-lsp/src/jsonrpc.rs
@@ -108,6 +108,16 @@ pub enum Id {
Str(String),
}
+impl std::fmt::Display for Id {
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ match self {
+ Id::Null => f.write_str("null"),
+ Id::Num(num) => write!(f, "{}", num),
+ Id::Str(string) => f.write_str(string),
+ }
+ }
+}
+
/// Protocol Version
#[derive(Debug, PartialEq, Eq, Clone, Copy, Hash)]
pub enum Version {
diff --git a/helix-lsp/src/lib.rs b/helix-lsp/src/lib.rs
index 72456b37..341d4a54 100644
--- a/helix-lsp/src/lib.rs
+++ b/helix-lsp/src/lib.rs
@@ -34,8 +34,8 @@ pub enum Error {
Parse(#[from] serde_json::Error),
#[error("IO Error: {0}")]
IO(#[from] std::io::Error),
- #[error("request timed out")]
- Timeout,
+ #[error("request {0} timed out")]
+ Timeout(jsonrpc::Id),
#[error("server closed the stream")]
StreamClosed,
#[error("Unhandled")]