Skip to content

Commit 2115b6c

Browse files
Remove intra doc link items if they are private/hidden and the matching option is not enabled
1 parent 59d4114 commit 2115b6c

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

src/librustdoc/passes/collect_intra_doc_links.rs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1216,6 +1216,29 @@ impl LinkCollector<'_, '_> {
12161216
.emit();
12171217
}
12181218

1219+
fn filter_private_hidden_candidates(
1220+
&self,
1221+
candidates: &mut Vec<(Res, Option<DefId>)>,
1222+
module_def_id: DefId,
1223+
) {
1224+
candidates.retain(|(candidate, _)| {
1225+
let Res::Def(_, def_id) = candidate else { return true };
1226+
1227+
if !self.cx.render_options.document_private
1228+
&& let visibility = self.cx.tcx.visibility(def_id)
1229+
&& !visibility.is_public()
1230+
&& !self.cx.tcx.has_attr(*def_id, sym::rustc_doc_primitive)
1231+
&& !visibility.is_accessible_from(module_def_id, self.cx.tcx)
1232+
{
1233+
false
1234+
} else if !self.cx.render_options.document_hidden && self.cx.tcx.is_doc_hidden(def_id) {
1235+
false
1236+
} else {
1237+
true
1238+
}
1239+
});
1240+
}
1241+
12191242
fn resolve_with_disambiguator_cached(
12201243
&mut self,
12211244
key: ResolutionInfo,
@@ -1250,6 +1273,8 @@ impl LinkCollector<'_, '_> {
12501273
}
12511274
}
12521275

1276+
self.filter_private_hidden_candidates(&mut candidates, key.module_id);
1277+
12531278
// If there are multiple items with the same "kind" (for example, both "associated types")
12541279
// and after removing duplicated kinds, only one remains, the `ambiguity_error` function
12551280
// won't emit an error. So at this point, we can just take the first candidate as it was

0 commit comments

Comments
 (0)