aboutsummaryrefslogtreecommitdiff
path: root/crates
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2020-11-02 17:54:01 +0000
committerGitHub <[email protected]>2020-11-02 17:54:01 +0000
commit245e1b533b5be5ea4a917957fb02d7f57e6b4661 (patch)
tree9aa83502a840a72e5ffc6bfe8902f5f5edcd046d /crates
parent173e45f8724c19e300f2cb3bdabcc37e48a48dc4 (diff)
parent285960aa6ba1128b3e0658934f405dde81ce5f56 (diff)
Merge #6445
6445: Fix coalescing of prime_caches updates r=jonas-schievink a=jonas-schievink The previous implementation could try to create a progress bar when one was already registered. bors r+ :robot: Co-authored-by: Jonas Schievink <[email protected]>
Diffstat (limited to 'crates')
-rw-r--r--crates/rust-analyzer/src/main_loop.rs28
1 files changed, 14 insertions, 14 deletions
diff --git a/crates/rust-analyzer/src/main_loop.rs b/crates/rust-analyzer/src/main_loop.rs
index e9d08ff15..d504572a8 100644
--- a/crates/rust-analyzer/src/main_loop.rs
+++ b/crates/rust-analyzer/src/main_loop.rs
@@ -192,8 +192,7 @@ impl GlobalState {
192 }, 192 },
193 Event::Task(mut task) => { 193 Event::Task(mut task) => {
194 let _p = profile::span("GlobalState::handle_event/task"); 194 let _p = profile::span("GlobalState::handle_event/task");
195 let mut prime_caches_started = false; 195 let mut prime_caches_progress = Vec::new();
196 let mut prime_caches_progress = None;
197 loop { 196 loop {
198 match task { 197 match task {
199 Task::Response(response) => self.respond(response), 198 Task::Response(response) => self.respond(response),
@@ -203,13 +202,19 @@ impl GlobalState {
203 } 202 }
204 } 203 }
205 Task::Workspaces(workspaces) => self.switch_workspaces(workspaces), 204 Task::Workspaces(workspaces) => self.switch_workspaces(workspaces),
206 Task::PrimeCaches(progress) => { 205 Task::PrimeCaches(progress) => match progress {
207 if let PrimeCachesProgress::Started = progress { 206 PrimeCachesProgress::Started => prime_caches_progress.push(progress),
208 prime_caches_started = true; 207 PrimeCachesProgress::StartedOnCrate { .. } => {
208 match prime_caches_progress.last_mut() {
209 Some(last @ PrimeCachesProgress::StartedOnCrate { .. }) => {
210 // Coalesce subsequent update events.
211 *last = progress;
212 }
213 _ => prime_caches_progress.push(progress),
214 }
209 } 215 }
210 216 PrimeCachesProgress::Finished => prime_caches_progress.push(progress),
211 prime_caches_progress = Some(progress); 217 },
212 }
213 } 218 }
214 // Coalesce multiple task events into one loop turn 219 // Coalesce multiple task events into one loop turn
215 task = match self.task_pool.receiver.try_recv() { 220 task = match self.task_pool.receiver.try_recv() {
@@ -218,7 +223,7 @@ impl GlobalState {
218 }; 223 };
219 } 224 }
220 225
221 if let Some(progress) = prime_caches_progress { 226 for progress in prime_caches_progress {
222 let (state, message, fraction); 227 let (state, message, fraction);
223 match progress { 228 match progress {
224 PrimeCachesProgress::Started => { 229 PrimeCachesProgress::Started => {
@@ -238,11 +243,6 @@ impl GlobalState {
238 } 243 }
239 }; 244 };
240 245
241 if state != Progress::Begin && prime_caches_started {
242 // Progress indicator needs to be created first.
243 self.report_progress("indexing", Progress::Begin, None, Some(0.0));
244 }
245
246 self.report_progress("indexing", state, message, Some(fraction)); 246 self.report_progress("indexing", state, message, Some(fraction));
247 } 247 }
248 } 248 }