diff --git a/crates/rust-analyzer/src/cli/analysis_stats.rs b/crates/rust-analyzer/src/cli/analysis_stats.rs index 187a0ebe632..a270eb481c0 100644 --- a/crates/rust-analyzer/src/cli/analysis_stats.rs +++ b/crates/rust-analyzer/src/cli/analysis_stats.rs @@ -309,8 +309,13 @@ pub fn analysis_stats( } fn shuffle(rng: &mut Rand32, slice: &mut [T]) { - for i in (1..slice.len()).rev() { - let idx = rng.rand_range(0..i as u32) as usize; - slice.swap(idx, i) + for i in 0..slice.len() { + randomize_first(rng, &mut slice[i..]); + } + + fn randomize_first(rng: &mut Rand32, slice: &mut [T]) { + assert!(!slice.is_empty()); + let idx = rng.rand_range(0..slice.len() as u32) as usize; + slice.swap(0, idx); } }