Skip to content

Commit 245e1b5

Browse files
bors[bot]Jonas Schievink
andauthored
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+ 🤖 Co-authored-by: Jonas Schievink <[email protected]>
2 parents 173e45f + 285960a commit 245e1b5

File tree

1 file changed

+14
-14
lines changed

1 file changed

+14
-14
lines changed

crates/rust-analyzer/src/main_loop.rs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -192,8 +192,7 @@ impl GlobalState {
192192
},
193193
Event::Task(mut task) => {
194194
let _p = profile::span("GlobalState::handle_event/task");
195-
let mut prime_caches_started = false;
196-
let mut prime_caches_progress = None;
195+
let mut prime_caches_progress = Vec::new();
197196
loop {
198197
match task {
199198
Task::Response(response) => self.respond(response),
@@ -203,13 +202,19 @@ impl GlobalState {
203202
}
204203
}
205204
Task::Workspaces(workspaces) => self.switch_workspaces(workspaces),
206-
Task::PrimeCaches(progress) => {
207-
if let PrimeCachesProgress::Started = progress {
208-
prime_caches_started = true;
205+
Task::PrimeCaches(progress) => match progress {
206+
PrimeCachesProgress::Started => prime_caches_progress.push(progress),
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+
}
209215
}
210-
211-
prime_caches_progress = Some(progress);
212-
}
216+
PrimeCachesProgress::Finished => prime_caches_progress.push(progress),
217+
},
213218
}
214219
// Coalesce multiple task events into one loop turn
215220
task = match self.task_pool.receiver.try_recv() {
@@ -218,7 +223,7 @@ impl GlobalState {
218223
};
219224
}
220225

221-
if let Some(progress) = prime_caches_progress {
226+
for progress in prime_caches_progress {
222227
let (state, message, fraction);
223228
match progress {
224229
PrimeCachesProgress::Started => {
@@ -238,11 +243,6 @@ impl GlobalState {
238243
}
239244
};
240245

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-
246246
self.report_progress("indexing", state, message, Some(fraction));
247247
}
248248
}

0 commit comments

Comments
 (0)