diff options
Diffstat (limited to 'crates')
-rw-r--r-- | crates/rust-analyzer/src/main_loop.rs | 46 |
1 files changed, 25 insertions, 21 deletions
diff --git a/crates/rust-analyzer/src/main_loop.rs b/crates/rust-analyzer/src/main_loop.rs index 3b3b83209..a7a7d2eb7 100644 --- a/crates/rust-analyzer/src/main_loop.rs +++ b/crates/rust-analyzer/src/main_loop.rs | |||
@@ -7,7 +7,7 @@ use std::{ | |||
7 | }; | 7 | }; |
8 | 8 | ||
9 | use crossbeam_channel::{never, select, unbounded, RecvError, Sender}; | 9 | use crossbeam_channel::{never, select, unbounded, RecvError, Sender}; |
10 | use lsp_server::{Connection, ErrorCode, Message, Notification, Request, RequestId, Response}; | 10 | use lsp_server::{Connection, ErrorCode, Notification, Request, RequestId, Response}; |
11 | use lsp_types::{request::Request as _, NumberOrString}; | 11 | use lsp_types::{request::Request as _, NumberOrString}; |
12 | use ra_db::VfsPath; | 12 | use ra_db::VfsPath; |
13 | use ra_ide::{Canceled, FileId}; | 13 | use ra_ide::{Canceled, FileId}; |
@@ -128,7 +128,7 @@ pub fn main_loop(config: Config, connection: Connection) -> Result<()> { | |||
128 | log::trace!("selecting"); | 128 | log::trace!("selecting"); |
129 | let event = select! { | 129 | let event = select! { |
130 | recv(&connection.receiver) -> msg => match msg { | 130 | recv(&connection.receiver) -> msg => match msg { |
131 | Ok(msg) => Event::Msg(msg), | 131 | Ok(msg) => Event::Lsp(msg), |
132 | Err(RecvError) => return Err("client exited without shutdown".into()), | 132 | Err(RecvError) => return Err("client exited without shutdown".into()), |
133 | }, | 133 | }, |
134 | recv(task_receiver) -> task => Event::Task(task.unwrap()), | 134 | recv(task_receiver) -> task => Event::Task(task.unwrap()), |
@@ -137,11 +137,11 @@ pub fn main_loop(config: Config, connection: Connection) -> Result<()> { | |||
137 | Err(RecvError) => return Err("vfs died".into()), | 137 | Err(RecvError) => return Err("vfs died".into()), |
138 | }, | 138 | }, |
139 | recv(global_state.flycheck.as_ref().map_or(&never(), |it| &it.1)) -> task => match task { | 139 | recv(global_state.flycheck.as_ref().map_or(&never(), |it| &it.1)) -> task => match task { |
140 | Ok(task) => Event::CheckWatcher(task), | 140 | Ok(task) => Event::Flycheck(task), |
141 | Err(RecvError) => return Err("check watcher died".into()), | 141 | Err(RecvError) => return Err("check watcher died".into()), |
142 | }, | 142 | }, |
143 | }; | 143 | }; |
144 | if let Event::Msg(Message::Request(req)) = &event { | 144 | if let Event::Lsp(lsp_server::Message::Request(req)) = &event { |
145 | if connection.handle_shutdown(&req)? { | 145 | if connection.handle_shutdown(&req)? { |
146 | break; | 146 | break; |
147 | }; | 147 | }; |
@@ -173,10 +173,10 @@ enum Task { | |||
173 | } | 173 | } |
174 | 174 | ||
175 | enum Event { | 175 | enum Event { |
176 | Msg(Message), | 176 | Lsp(lsp_server::Message), |
177 | Task(Task), | 177 | Task(Task), |
178 | Vfs(vfs::loader::Message), | 178 | Vfs(vfs::loader::Message), |
179 | CheckWatcher(flycheck::Message), | 179 | Flycheck(flycheck::Message), |
180 | } | 180 | } |
181 | 181 | ||
182 | impl fmt::Debug for Event { | 182 | impl fmt::Debug for Event { |
@@ -186,7 +186,7 @@ impl fmt::Debug for Event { | |||
186 | }; | 186 | }; |
187 | 187 | ||
188 | match self { | 188 | match self { |
189 | Event::Msg(Message::Notification(not)) => { | 189 | Event::Lsp(lsp_server::Message::Notification(not)) => { |
190 | if notification_is::<lsp_types::notification::DidOpenTextDocument>(not) | 190 | if notification_is::<lsp_types::notification::DidOpenTextDocument>(not) |
191 | || notification_is::<lsp_types::notification::DidChangeTextDocument>(not) | 191 | || notification_is::<lsp_types::notification::DidChangeTextDocument>(not) |
192 | { | 192 | { |
@@ -203,10 +203,10 @@ impl fmt::Debug for Event { | |||
203 | _ => (), | 203 | _ => (), |
204 | } | 204 | } |
205 | match self { | 205 | match self { |
206 | Event::Msg(it) => fmt::Debug::fmt(it, f), | 206 | Event::Lsp(it) => fmt::Debug::fmt(it, f), |
207 | Event::Task(it) => fmt::Debug::fmt(it, f), | 207 | Event::Task(it) => fmt::Debug::fmt(it, f), |
208 | Event::Vfs(it) => fmt::Debug::fmt(it, f), | 208 | Event::Vfs(it) => fmt::Debug::fmt(it, f), |
209 | Event::CheckWatcher(it) => fmt::Debug::fmt(it, f), | 209 | Event::Flycheck(it) => fmt::Debug::fmt(it, f), |
210 | } | 210 | } |
211 | } | 211 | } |
212 | } | 212 | } |
@@ -269,17 +269,17 @@ fn loop_turn( | |||
269 | ) | 269 | ) |
270 | } | 270 | } |
271 | }, | 271 | }, |
272 | Event::CheckWatcher(task) => { | 272 | Event::Flycheck(task) => { |
273 | on_check_task(task, global_state, task_sender, &connection.sender)? | 273 | on_check_task(task, global_state, task_sender, &connection.sender)? |
274 | } | 274 | } |
275 | Event::Msg(msg) => match msg { | 275 | Event::Lsp(msg) => match msg { |
276 | Message::Request(req) => { | 276 | lsp_server::Message::Request(req) => { |
277 | on_request(global_state, pool, task_sender, &connection.sender, loop_start, req)? | 277 | on_request(global_state, pool, task_sender, &connection.sender, loop_start, req)? |
278 | } | 278 | } |
279 | Message::Notification(not) => { | 279 | lsp_server::Message::Notification(not) => { |
280 | on_notification(&connection.sender, global_state, not)?; | 280 | on_notification(&connection.sender, global_state, not)?; |
281 | } | 281 | } |
282 | Message::Response(resp) => { | 282 | lsp_server::Message::Response(resp) => { |
283 | let handler = global_state.req_queue.outgoing.complete(resp.id.clone()); | 283 | let handler = global_state.req_queue.outgoing.complete(resp.id.clone()); |
284 | handler(global_state, resp) | 284 | handler(global_state, resp) |
285 | } | 285 | } |
@@ -329,7 +329,7 @@ fn loop_turn( | |||
329 | Ok(()) | 329 | Ok(()) |
330 | } | 330 | } |
331 | 331 | ||
332 | fn on_task(task: Task, msg_sender: &Sender<Message>, global_state: &mut GlobalState) { | 332 | fn on_task(task: Task, msg_sender: &Sender<lsp_server::Message>, global_state: &mut GlobalState) { |
333 | match task { | 333 | match task { |
334 | Task::Respond(response) => { | 334 | Task::Respond(response) => { |
335 | if let Some((method, start)) = | 335 | if let Some((method, start)) = |
@@ -353,7 +353,7 @@ fn on_request( | |||
353 | global_state: &mut GlobalState, | 353 | global_state: &mut GlobalState, |
354 | pool: &ThreadPool, | 354 | pool: &ThreadPool, |
355 | task_sender: &Sender<Task>, | 355 | task_sender: &Sender<Task>, |
356 | msg_sender: &Sender<Message>, | 356 | msg_sender: &Sender<lsp_server::Message>, |
357 | request_received: Instant, | 357 | request_received: Instant, |
358 | req: Request, | 358 | req: Request, |
359 | ) -> Result<()> { | 359 | ) -> Result<()> { |
@@ -415,7 +415,7 @@ fn on_request( | |||
415 | } | 415 | } |
416 | 416 | ||
417 | fn on_notification( | 417 | fn on_notification( |
418 | msg_sender: &Sender<Message>, | 418 | msg_sender: &Sender<lsp_server::Message>, |
419 | global_state: &mut GlobalState, | 419 | global_state: &mut GlobalState, |
420 | not: Notification, | 420 | not: Notification, |
421 | ) -> Result<()> { | 421 | ) -> Result<()> { |
@@ -553,7 +553,7 @@ fn on_check_task( | |||
553 | task: flycheck::Message, | 553 | task: flycheck::Message, |
554 | global_state: &mut GlobalState, | 554 | global_state: &mut GlobalState, |
555 | task_sender: &Sender<Task>, | 555 | task_sender: &Sender<Task>, |
556 | msg_sender: &Sender<Message>, | 556 | msg_sender: &Sender<lsp_server::Message>, |
557 | ) -> Result<()> { | 557 | ) -> Result<()> { |
558 | match task { | 558 | match task { |
559 | flycheck::Message::ClearDiagnostics => { | 559 | flycheck::Message::ClearDiagnostics => { |
@@ -598,7 +598,11 @@ fn on_check_task( | |||
598 | Ok(()) | 598 | Ok(()) |
599 | } | 599 | } |
600 | 600 | ||
601 | fn on_diagnostic_task(task: DiagnosticTask, msg_sender: &Sender<Message>, state: &mut GlobalState) { | 601 | fn on_diagnostic_task( |
602 | task: DiagnosticTask, | ||
603 | msg_sender: &Sender<lsp_server::Message>, | ||
604 | state: &mut GlobalState, | ||
605 | ) { | ||
602 | let subscriptions = state.diagnostics.handle_task(task); | 606 | let subscriptions = state.diagnostics.handle_task(task); |
603 | 607 | ||
604 | for file_id in subscriptions { | 608 | for file_id in subscriptions { |
@@ -623,7 +627,7 @@ fn percentage(done: usize, total: usize) -> f64 { | |||
623 | 627 | ||
624 | fn report_progress( | 628 | fn report_progress( |
625 | global_state: &mut GlobalState, | 629 | global_state: &mut GlobalState, |
626 | sender: &Sender<Message>, | 630 | sender: &Sender<lsp_server::Message>, |
627 | title: &str, | 631 | title: &str, |
628 | state: Progress, | 632 | state: Progress, |
629 | message: Option<String>, | 633 | message: Option<String>, |
@@ -672,7 +676,7 @@ struct PoolDispatcher<'a> { | |||
672 | req: Option<Request>, | 676 | req: Option<Request>, |
673 | pool: &'a ThreadPool, | 677 | pool: &'a ThreadPool, |
674 | global_state: &'a mut GlobalState, | 678 | global_state: &'a mut GlobalState, |
675 | msg_sender: &'a Sender<Message>, | 679 | msg_sender: &'a Sender<lsp_server::Message>, |
676 | task_sender: &'a Sender<Task>, | 680 | task_sender: &'a Sender<Task>, |
677 | request_received: Instant, | 681 | request_received: Instant, |
678 | } | 682 | } |