Skip to content

Commit abb463a

Browse files
committed
Improve error message for wrong target names
1 parent 0c57749 commit abb463a

File tree

1 file changed

+35
-13
lines changed

1 file changed

+35
-13
lines changed

src/cargo/ops/cargo_compile.rs

Lines changed: 35 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
//! repeats until the queue is empty.
2424
2525
use std::collections::{BTreeSet, HashMap, HashSet};
26+
use std::fmt::Write;
2627
use std::hash::{Hash, Hasher};
2728
use std::sync::Arc;
2829

@@ -1526,19 +1527,40 @@ fn find_named_targets<'a>(
15261527
};
15271528

15281529
if proposals.is_empty() {
1529-
let targets = packages.iter().flat_map(|pkg| {
1530-
pkg.targets()
1531-
.iter()
1532-
.filter(|target| is_expected_kind(target))
1533-
});
1534-
let suggestion = closest_msg(target_name, targets, |t| t.name());
1535-
anyhow::bail!(
1536-
"no {} target {} `{}`{}",
1537-
target_desc,
1538-
if is_glob { "matches pattern" } else { "named" },
1539-
target_name,
1540-
suggestion
1541-
);
1530+
let targets = packages
1531+
.iter()
1532+
.flat_map(|pkg| {
1533+
pkg.targets()
1534+
.iter()
1535+
.filter(|target| is_expected_kind(target))
1536+
})
1537+
.collect::<Vec<_>>();
1538+
let suggestion = closest_msg(target_name, targets.iter(), |t| t.name());
1539+
if !suggestion.is_empty() {
1540+
anyhow::bail!(
1541+
"no {} target {} `{}`{}",
1542+
target_desc,
1543+
if is_glob { "matches pattern" } else { "named" },
1544+
target_name,
1545+
suggestion
1546+
);
1547+
} else {
1548+
let mut msg = String::new();
1549+
writeln!(
1550+
msg,
1551+
"no {} target {} `{}`.",
1552+
target_desc,
1553+
if is_glob { "matches pattern" } else { "named" },
1554+
target_name,
1555+
)?;
1556+
if !targets.is_empty() {
1557+
writeln!(msg, "Available {} targets:", target_desc)?;
1558+
for target in targets {
1559+
writeln!(msg, " {}", target.name())?;
1560+
}
1561+
}
1562+
anyhow::bail!(msg);
1563+
}
15421564
}
15431565
Ok(proposals)
15441566
}

0 commit comments

Comments
 (0)