Auto merge of #13640 - ehuss:fix-doc-dash-collision, r=epage

Fix doc collision for lib/bin with a dash in the inferred name.

This fixes an issue where `cargo doc` would report a collision if the project has a `-` in the name, and both a lib and bin. As a consequence of the change in #12783, the target name for the library no longer has a `-`. The code that checks for the lib/bin doc collision was only checking if the target names were equal, which is no longer the case after #12783. The solution here is to use the `crate_name` and not the target name, which has the appropriate `_` translation done. This is the more correct method to use, even before #12783, because rustdoc uses crate names, not target names (and thus even documenting bins have their filenames converted to underscores).

Fixes #13628
This commit is contained in:
bors 2024-03-25 20:43:52 +00:00
commit c56140f646
2 changed files with 25 additions and 1 deletions

View File

@ -198,7 +198,9 @@ impl<'a> UnitGenerator<'a, '_> {
.filter(|t| {
t.documented()
&& (!t.is_bin()
|| !targets.iter().any(|l| l.is_lib() && l.name() == t.name()))
|| !targets
.iter()
.any(|l| l.is_lib() && l.crate_name() == t.crate_name()))
})
.collect()
}

View File

@ -478,6 +478,28 @@ fn doc_lib_bin_same_name_documents_lib_when_requested() {
assert!(!doc_html.contains("Binary"));
}
#[cargo_test]
fn doc_lib_bin_same_name_with_dash() {
// Checks `doc` behavior when there is a dash in the package name, and
// there is a lib and bin, and the lib name is inferred.
let p = project()
.file("Cargo.toml", &basic_manifest("foo-bar", "1.0.0"))
.file("src/lib.rs", "")
.file("src/main.rs", "fn main() {}")
.build();
p.cargo("doc")
.with_stderr(
"\
[DOCUMENTING] foo-bar v1.0.0 ([ROOT]/foo)
[FINISHED] [..]
[GENERATED] [ROOT]/foo/target/doc/foo_bar/index.html
",
)
.run();
assert!(p.build_dir().join("doc/foo_bar/index.html").exists());
assert!(!p.build_dir().join("doc/foo_bar/fn.main.html").exists());
}
#[cargo_test]
fn doc_lib_bin_same_name_documents_named_bin_when_requested() {
let p = project()