Skip to content

Commit

Permalink
Auto merge of rust-lang#13640 - ehuss:fix-doc-dash-collision, r=epage
Browse files Browse the repository at this point in the history
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 rust-lang#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 rust-lang#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 rust-lang#12783, because rustdoc uses crate names, not target names (and thus even documenting bins have their filenames converted to underscores).

Fixes rust-lang#13628
  • Loading branch information
bors committed Mar 25, 2024
2 parents bc844af + 3adb796 commit c56140f
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 1 deletion.
4 changes: 3 additions & 1 deletion src/cargo/ops/cargo_compile/unit_generator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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()
}
Expand Down
22 changes: 22 additions & 0 deletions tests/testsuite/doc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down

0 comments on commit c56140f

Please sign in to comment.