diff options
Diffstat (limited to '')
-rw-r--r-- | src/tools/rust-analyzer/lib/lsp-server/src/msg.rs | 10 | ||||
-rw-r--r-- | src/tools/rust-analyzer/lib/lsp-server/src/req_queue.rs | 7 |
2 files changed, 16 insertions, 1 deletions
diff --git a/src/tools/rust-analyzer/lib/lsp-server/src/msg.rs b/src/tools/rust-analyzer/lib/lsp-server/src/msg.rs index 97e5bd35c..b241561f9 100644 --- a/src/tools/rust-analyzer/lib/lsp-server/src/msg.rs +++ b/src/tools/rust-analyzer/lib/lsp-server/src/msg.rs @@ -98,7 +98,7 @@ pub struct ResponseError { } #[derive(Clone, Copy, Debug)] -#[allow(unused)] +#[non_exhaustive] pub enum ErrorCode { // Defined by JSON RPC: ParseError = -32700, @@ -135,6 +135,14 @@ pub enum ErrorCode { /// /// @since 3.17.0 ServerCancelled = -32802, + + /// A request failed but it was syntactically correct, e.g the + /// method name was known and the parameters were valid. The error + /// message should contain human readable information about why + /// the request failed. + /// + /// @since 3.17.0 + RequestFailed = -32803, } #[derive(Debug, Serialize, Deserialize, Clone)] diff --git a/src/tools/rust-analyzer/lib/lsp-server/src/req_queue.rs b/src/tools/rust-analyzer/lib/lsp-server/src/req_queue.rs index 1f3d44715..e5f19be20 100644 --- a/src/tools/rust-analyzer/lib/lsp-server/src/req_queue.rs +++ b/src/tools/rust-analyzer/lib/lsp-server/src/req_queue.rs @@ -35,6 +35,7 @@ impl<I> Incoming<I> { pub fn register(&mut self, id: RequestId, data: I) { self.pending.insert(id, data); } + pub fn cancel(&mut self, id: RequestId) -> Option<Response> { let _data = self.complete(id.clone())?; let error = ResponseError { @@ -44,9 +45,14 @@ impl<I> Incoming<I> { }; Some(Response { id, result: None, error: Some(error) }) } + pub fn complete(&mut self, id: RequestId) -> Option<I> { self.pending.remove(&id) } + + pub fn is_completed(&self, id: &RequestId) -> bool { + !self.pending.contains_key(id) + } } impl<O> Outgoing<O> { @@ -56,6 +62,7 @@ impl<O> Outgoing<O> { self.next_id += 1; Request::new(id, method, params) } + pub fn complete(&mut self, id: RequestId) -> Option<O> { self.pending.remove(&id) } |