diff options
author | Edwin Cheng <[email protected]> | 2021-01-28 15:33:02 +0000 |
---|---|---|
committer | Edwin Cheng <[email protected]> | 2021-01-28 17:04:14 +0000 |
commit | 9358eecc042d8b551f58d2d5ddb9c88d258880c1 (patch) | |
tree | 7188b0e27d9d00640b5c76319ee59b2d5cab1b05 /crates/rust-analyzer/src/op_queue.rs | |
parent | f421ee672253499b8ca8d1badf98db42525a5216 (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.rs | 28 |
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)] | 3 | pub(crate) struct OpQueue<D> { |
4 | pub(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 | ||
9 | impl OpQueue { | 8 | impl<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; | 14 | impl<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); |