diff options
Diffstat (limited to 'crates/ra_lsp_server/src/main_loop.rs')
-rw-r--r-- | crates/ra_lsp_server/src/main_loop.rs | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/crates/ra_lsp_server/src/main_loop.rs b/crates/ra_lsp_server/src/main_loop.rs index f51576521..ddd20a41f 100644 --- a/crates/ra_lsp_server/src/main_loop.rs +++ b/crates/ra_lsp_server/src/main_loop.rs | |||
@@ -205,17 +205,26 @@ fn main_loop_inner( | |||
205 | Some(req) => req, | 205 | Some(req) => req, |
206 | None => return Ok(()), | 206 | None => return Ok(()), |
207 | }; | 207 | }; |
208 | match on_request(state, pending_requests, pool, &task_sender, req)? { | 208 | match req.cast::<req::CollectGarbage>() { |
209 | None => (), | 209 | Ok((id, ())) => { |
210 | Some(req) => { | 210 | state.collect_garbadge(); |
211 | log::error!("unknown request: {:?}", req); | 211 | let resp = RawResponse::ok::<req::CollectGarbage>(id, &()); |
212 | let resp = RawResponse::err( | ||
213 | req.id, | ||
214 | ErrorCode::MethodNotFound as i32, | ||
215 | "unknown request".to_string(), | ||
216 | ); | ||
217 | msg_sender.send(RawMessage::Response(resp)).unwrap() | 212 | msg_sender.send(RawMessage::Response(resp)).unwrap() |
218 | } | 213 | } |
214 | Err(req) => { | ||
215 | match on_request(state, pending_requests, pool, &task_sender, req)? { | ||
216 | None => (), | ||
217 | Some(req) => { | ||
218 | log::error!("unknown request: {:?}", req); | ||
219 | let resp = RawResponse::err( | ||
220 | req.id, | ||
221 | ErrorCode::MethodNotFound as i32, | ||
222 | "unknown request".to_string(), | ||
223 | ); | ||
224 | msg_sender.send(RawMessage::Response(resp)).unwrap() | ||
225 | } | ||
226 | } | ||
227 | } | ||
219 | } | 228 | } |
220 | } | 229 | } |
221 | RawMessage::Notification(not) => { | 230 | RawMessage::Notification(not) => { |