aboutsummaryrefslogtreecommitdiff
path: root/crates/rust-analyzer/src/op_queue.rs
diff options
context:
space:
mode:
authorEdwin Cheng <[email protected]>2021-01-28 15:33:02 +0000
committerEdwin Cheng <[email protected]>2021-01-28 17:04:14 +0000
commit9358eecc042d8b551f58d2d5ddb9c88d258880c1 (patch)
tree7188b0e27d9d00640b5c76319ee59b2d5cab1b05 /crates/rust-analyzer/src/op_queue.rs
parentf421ee672253499b8ca8d1badf98db42525a5216 (diff)
Async Loading outdir and proc-macro
Diffstat (limited to 'crates/rust-analyzer/src/op_queue.rs')
-rw-r--r--crates/rust-analyzer/src/op_queue.rs28
1 files changed, 16 insertions, 12 deletions
diff --git a/crates/rust-analyzer/src/op_queue.rs b/crates/rust-analyzer/src/op_queue.rs
index 51d66f4b3..761b9ad39 100644
--- a/crates/rust-analyzer/src/op_queue.rs
+++ b/crates/rust-analyzer/src/op_queue.rs
@@ -1,22 +1,26 @@
1//! Bookkeeping to make sure only one long-running operation is executed. 1//! Bookkeeping to make sure only one long-running operation is executed.
2 2
3#[derive(Default)] 3pub(crate) struct OpQueue<D> {
4pub(crate) struct OpQueue { 4 op_scheduled: Option<D>,
5 op_scheduled: bool,
6 op_in_progress: bool, 5 op_in_progress: bool,
7} 6}
8 7
9impl OpQueue { 8impl<D> Default for OpQueue<D> {
10 pub(crate) fn request_op(&mut self) { 9 fn default() -> Self {
11 self.op_scheduled = true; 10 Self { op_scheduled: None, op_in_progress: false }
12 } 11 }
13 pub(crate) fn should_start_op(&mut self) -> bool { 12}
14 if !self.op_in_progress && self.op_scheduled { 13
15 self.op_in_progress = true; 14impl<D> OpQueue<D> {
16 self.op_scheduled = false; 15 pub(crate) fn request_op(&mut self, data: D) {
17 return true; 16 self.op_scheduled = Some(data);
17 }
18 pub(crate) fn should_start_op(&mut self) -> Option<D> {
19 if self.op_in_progress {
20 return None;
18 } 21 }
19 false 22 self.op_in_progress = self.op_scheduled.is_some();
23 self.op_scheduled.take()
20 } 24 }
21 pub(crate) fn op_completed(&mut self) { 25 pub(crate) fn op_completed(&mut self) {
22 assert!(self.op_in_progress); 26 assert!(self.op_in_progress);