Change:
<!-- Thank you for filing a bug report! Please provide a short summary of the bug, along with any information you feel relevant to replicating the bug. --Consider the following code is local to and inaccessible, and should not be documented. Instead, rustdoc currently documents the module at the same level as . <!-- If you're using the stable version of the compiler, you should also check if the bug also exists in the beta or nightly versions. --: </details
cc does this have to do with those changes you made to item collection?
Very likely. I won't be able to fix it until next week though. EDIT: I suspect it broke from
I just realized that this is broken on stable, too, so I think the cause may be older than that?
Oh. I'm at least happy to realize that I didn't break it recently. Thanks for the report. Will fix it monday.

Discussion:
use rustc_hir as hir; use rustc_hir::def::{DefKind, Res}; use rustc_hir::def_id::{DefId, DefIdMap, LocalDefId, LocalDefIdSet}; <del> use rustc_hir::intravisit::{walk_item, Visitor}; </del> <ins> use rustc_hir::intravisit::{walk_body, walk_item, Visitor}; </ins> use rustc_hir::{Node, CRATE_HIR_ID}; use rustc_middle::hir::nested_filter; use rustc_middle::ty::TyCtxt;

exact_paths: DefIdMap<Vec<Symbol>>, modules: Vec<Module<'tcx>>, is_importable_from_parent: bool, <ins> inside_body: bool, </ins> } impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> {

exact_paths: Default::default(), modules: vec![om], is_importable_from_parent: true, <ins> inside_body: false, </ins> } }

import_id: Option<LocalDefId>, ) { debug!("visiting item {:?}", item); <ins> if self.inside_body { // Only impls can be "seen" outside a body. For example: // // ``` // struct Bar; // // fn foo() { //     impl Bar { fn bar() {} } // } // Bar::bar(); // ``` if let hir::ItemKind::Impl(impl_) = item.kind && // Don't duplicate impls when inlining or if it's implementing a trait, we'll pick // them up regardless of where they're located. impl_.of_trait.is_none() { self.add_to_current_mod(item, None, None); } return; } </ins> let name = renamed.unwrap_or(item.ident.name); let tcx = self.cx.tcx;

fn visit_lifetime(&mut self, _: &hir::Lifetime) { // Unneeded. } <ins> fn visit_body(&mut self, b: &'tcx hir::Body<'tcx>) { let prev = mem::replace(&mut self.inside_body, true); walk_body(self, b); self.inside_body = prev; } </ins> }

<ins> // Regression test for <https://github.com/rust-lang/rust/issues/111415>. // This test ensures that only impl blocks are documented in bodies. #![crate_name = "foo"] // @has 'foo/index.html' // Checking there are only three sections. // @count - '//*[@id="main-content"]/*[@class="small-section-header"]' 3 // @has - '//*[@id="main-content"]/*[@class="small-section-header"]' 'Structs' // @has - '//*[@id="main-content"]/*[@class="small-section-header"]' 'Functions' // @has - '//*[@id="main-content"]/*[@class="small-section-header"]' 'Traits' // Checking that there are only three items. // @count - '//*[@id="main-content"]//*[@class="item-name"]' 3 // @has - '//*[@id="main-content"]//a[@href="struct.Bar.html"]' 'Bar' // @has - '//*[@id="main-content"]//a[@href="fn.foo.html"]' 'foo' // @has - '//*[@id="main-content"]//a[@href="trait.Foo.html"]' 'Foo' // Now checking that the `foo` method is visible in `Bar` page. // @has 'foo/struct.Bar.html' // @has - '//*[@id="method.foo"]/*[@class="code-header"]' 'pub fn foo()' // @has - '//*[@id="method.bar"]/*[@class="code-header"]' 'fn bar()' pub struct Bar; pub trait Foo { fn bar() {} } pub fn foo() { pub mod inaccessible {} pub fn inner() {} pub const BAR: u32 = 0; impl Bar { pub fn foo() {} } impl Foo for Bar {} } </ins>