From f6adb85b681c23b64cc33197eb67d5d7fcf920f0 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Fri, 25 Jan 2019 19:11:58 +0300 Subject: add gc request --- crates/ra_lsp_server/src/main_loop.rs | 27 ++++++++++++++++++--------- crates/ra_lsp_server/src/req.rs | 8 ++++++++ crates/ra_lsp_server/src/server_world.rs | 4 ++++ 3 files changed, 30 insertions(+), 9 deletions(-) (limited to 'crates/ra_lsp_server/src') 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( Some(req) => req, None => return Ok(()), }; - match on_request(state, pending_requests, pool, &task_sender, req)? { - None => (), - Some(req) => { - log::error!("unknown request: {:?}", req); - let resp = RawResponse::err( - req.id, - ErrorCode::MethodNotFound as i32, - "unknown request".to_string(), - ); + match req.cast::() { + Ok((id, ())) => { + state.collect_garbadge(); + let resp = RawResponse::ok::(id, &()); msg_sender.send(RawMessage::Response(resp)).unwrap() } + Err(req) => { + match on_request(state, pending_requests, pool, &task_sender, req)? { + None => (), + Some(req) => { + log::error!("unknown request: {:?}", req); + let resp = RawResponse::err( + req.id, + ErrorCode::MethodNotFound as i32, + "unknown request".to_string(), + ); + msg_sender.send(RawMessage::Response(resp)).unwrap() + } + } + } } } RawMessage::Notification(not) => { diff --git a/crates/ra_lsp_server/src/req.rs b/crates/ra_lsp_server/src/req.rs index ec6b6d905..5968e592b 100644 --- a/crates/ra_lsp_server/src/req.rs +++ b/crates/ra_lsp_server/src/req.rs @@ -19,6 +19,14 @@ impl Request for AnalyzerStatus { const METHOD: &'static str = "ra/analyzerStatus"; } +pub enum CollectGarbage {} + +impl Request for CollectGarbage { + type Params = (); + type Result = (); + const METHOD: &'static str = "ra/collectGarbage"; +} + pub enum SyntaxTree {} impl Request for SyntaxTree { diff --git a/crates/ra_lsp_server/src/server_world.rs b/crates/ra_lsp_server/src/server_world.rs index 5cb97b29b..bf04f1125 100644 --- a/crates/ra_lsp_server/src/server_world.rs +++ b/crates/ra_lsp_server/src/server_world.rs @@ -231,6 +231,10 @@ impl ServerWorldState { vfs: Arc::clone(&self.vfs), } } + + pub fn collect_garbadge(&mut self) { + self.analysis_host.collect_garbage() + } } impl ServerWorld { -- cgit v1.2.3