Skip to content

Commit

Permalink
rustdoc: Mark imported items as retained
Browse files Browse the repository at this point in the history
Fixes a bug where impl of items that were imported from a private module
would be striped

Fixes #100252
Fixes #100242
  • Loading branch information
aDotInTheVoid committed Aug 15, 2022
1 parent cc4dd6f commit 44b489f
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 1 deletion.
12 changes: 11 additions & 1 deletion src/librustdoc/passes/stripper.rs
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,17 @@ impl<'a> DocFolder for Stripper<'a> {
}

// handled in the `strip-priv-imports` pass
clean::ExternCrateItem { .. } | clean::ImportItem(..) => {}
clean::ExternCrateItem { .. } => {}
clean::ImportItem(ref imp) => {
// Because json doesn't inline imports from private modules, we need to mark
// the imported item as retained so it's impls won't be stripped.i
//
// FIXME: Is it necessary to check for json output here: See
// https://github.com/rust-lang/rust/pull/100325#discussion_r941495215
if let Some(did) = imp.source.did && self.is_json_output {
self.retained.insert(did.into());
}
}

clean::ImplItem(..) => {}

Expand Down
24 changes: 24 additions & 0 deletions src/test/rustdoc-json/impls/import_from_private.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// https://github.com/rust-lang/rust/issues/100252

#![feature(no_core)]
#![no_core]

mod bar {
// @set baz = import_from_private.json "$.index[*][?(@.kind=='struct')].id"
pub struct Baz;
// @set impl = - "$.index[*][?(@.kind=='impl')].id"
impl Baz {
// @set doit = - "$.index[*][?(@.kind=='method')].id"
pub fn doit() {}
}
}

// @set import = - "$.index[*][?(@.kind=='import')].id"
pub use bar::Baz;

// FIXME(adotinthevoid): Use hasexact once #99474 lands

// @has - "$.index[*][?(@.kind=='module')].inner.items[*]" $import
// @is - "$.index[*][?(@.kind=='import')].inner.id" $baz
// @has - "$.index[*][?(@.kind=='struct')].inner.impls[*]" $impl
// @has - "$.index[*][?(@.kind=='impl')].inner.items[*]" $doit

0 comments on commit 44b489f

Please sign in to comment.