From 5d58d4fd2e27e62295cd1f05fb2532dfb010350e Mon Sep 17 00:00:00 2001 From: Shantanu <12621235+hauntsaninja@users.noreply.github.com> Date: Sat, 17 Feb 2024 04:39:10 -0800 Subject: [PATCH] Better error messages on expect failures in resolver (#1583) I ran into some (tricky to reproduce) panics while using uv, would be useful to have a better error message to track down the source of the problem --- crates/uv-resolver/src/resolution.rs | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/crates/uv-resolver/src/resolution.rs b/crates/uv-resolver/src/resolution.rs index f3705584d..8781274dc 100644 --- a/crates/uv-resolver/src/resolution.rs +++ b/crates/uv-resolver/src/resolution.rs @@ -121,7 +121,9 @@ impl ResolutionGraph { if !metadata.provides_extras.contains(extra) { let pinned_package = pins .get(package_name, version) - .expect("Every package should be pinned") + .unwrap_or_else(|| { + panic!("Every package should be pinned: {package_name:?}") + }) .clone(); diagnostics.push(Diagnostic::MissingExtra { @@ -130,14 +132,19 @@ impl ResolutionGraph { }); } } else { - let metadata = distributions - .get(&dist.package_id()) - .expect("Every package should have metadata"); + let metadata = distributions.get(&dist.package_id()).unwrap_or_else(|| { + panic!( + "Every package should have metadata: {:?}", + dist.package_id() + ) + }); if !metadata.provides_extras.contains(extra) { let pinned_package = pins .get(package_name, version) - .expect("Every package should be pinned") + .unwrap_or_else(|| { + panic!("Every package should be pinned: {package_name:?}") + }) .clone(); diagnostics.push(Diagnostic::MissingExtra { @@ -150,9 +157,12 @@ impl ResolutionGraph { PubGrubPackage::Package(package_name, Some(extra), Some(url)) => { // Validate that the `extra` exists. let dist = PubGrubDistribution::from_url(package_name, url); - let metadata = distributions - .get(&dist.package_id()) - .expect("Every package should have metadata"); + let metadata = distributions.get(&dist.package_id()).unwrap_or_else(|| { + panic!( + "Every package should have metadata: {:?}", + dist.package_id() + ) + }); if !metadata.provides_extras.contains(extra) { let url = redirects.get(url).map_or_else(