Change:
<ins> // Regression test for <https://github.com/rust-lang/rust/issues/110422>. // This test ensures that inner items (except for implementations and macros) // don't appear in documentation. // compile-flags: --document-private-items #![crate_name = "foo"] // @has 'foo/index.html' // Checking there is no "trait" entry. // @count - '//*[@id="main-content"]/*[@class="small-section-header"]' 4 // @has - '//*[@id="main-content"]/*[@class="small-section-header"]' 'Structs' // @has - '//*[@id="main-content"]/*[@class="small-section-header"]' 'Constants' // @has - '//*[@id="main-content"]/*[@class="small-section-header"]' 'Functions' // @has - '//*[@id="main-content"]/*[@class="small-section-header"]' 'Macros' // @has - '//a[@href="fn.foo.html"]' 'foo' fn foo() { fn bar() {} // @has - '//a[@class="macro"]' 'visible_macro' // @!has - '//a[@class="macro"]' 'non_visible_macro' // @has 'foo/macro.visible_macro.html' // @!has 'foo/macro.non_visible_macro.html' #[macro_export] macro_rules! visible_macro { () => {} } macro_rules! non_visible_macro { () => {} } } // @has 'foo/index.html' // @has - '//a[@href="struct.Bar.html"]' 'Bar' struct Bar; const BAR: i32 = { // @!has - '//a[@href="fn.yo.html"]' 'yo' // @!has 'foo/fn.yo.html' fn yo() {} // @!has 'foo/index.html' '//a[@href="trait.Foo.html"]' 'Foo' // @!has 'foo/trait.Foo.html' trait Foo { fn babar() {} } impl Foo for Bar {} // @has 'foo/struct.Bar.html' // @has - '//*[@id="method.foo"]/*[@class="code-header"]' 'pub(crate) fn foo()' // @count - '//*[@id="main-content"]/*[@class="small-section-header"]' 3 // We now check that the `Foo` trait is not documented nor visible on `Bar` page. // @has - '//*[@id="main-content"]/*[@class="small-section-header"]' 'Implementations' // @has - '//*[@id="main-content"]/*[@class="small-section-header"]' 'Auto Trait Implementations' // @has - '//*[@id="main-content"]/*[@class="small-section-header"]' 'Blanket Implementations' // @!has - '//*[@href="trait.Foo.html#method.babar"]/*[@class="code-header"]' 'fn babar()' impl Bar { fn foo() {} } 1 }; </ins>

Discussion:
If we run with the option on this code: Both and are documented, but not being accessible outside of , it shouldn't be documented.
probably knows this, but for others seeing this issue, I think it's probably due to (which was reverted in , and later re-applied in ). It has to do with the fact that we're using a HIR visitor now, so we're visiting nested items unconditionally.
Yes I know where it's coming from. :smile: I was just thinking today that since we were going through the whole HIR without checking whether or not we were in a block, all elements inside the block could be visible. Tested and... :fearful: Should be pretty easy to fix.
For reference, I put up because this was causing documentation to become really verbose with serde + . If you fix this such that we no longer document those items, we could probably revert that PR.
Indeed. Don't hesitate to come to me if you have such issues with rustdoc. Such problems should definitely not go unnoticed.
The thing is, it was not particularly clear from the PRs whether this was intentional or not.
Unfortunately it wasn't. The goal was to retrieve the missing impl blocks. But if anything isn't clear, don't hesitate to ask too. :wink: