From 6e4ef54d79fa87701d4a11712f900994846b811e Mon Sep 17 00:00:00 2001 From: Joshua Nelson Date: Mon, 5 Apr 2021 04:50:01 -0400 Subject: [PATCH 1/8] Rename path_str -> ori_link in anchor_failure ori_link contains anchors, path_str does not. It's important that anchor_failure be passed a link with the anchors still present. --- src/librustdoc/passes/collect_intra_doc_links.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/librustdoc/passes/collect_intra_doc_links.rs b/src/librustdoc/passes/collect_intra_doc_links.rs index 545fbf2618121..40a93855cf289 100644 --- a/src/librustdoc/passes/collect_intra_doc_links.rs +++ b/src/librustdoc/passes/collect_intra_doc_links.rs @@ -2005,16 +2005,16 @@ fn resolution_failure( fn anchor_failure( cx: &DocContext<'_>, item: &Item, - path_str: &str, + ori_link: &str, dox: &str, link_range: Range, failure: AnchorFailure, ) { let msg = match failure { - AnchorFailure::MultipleAnchors => format!("`{}` contains multiple anchors", path_str), + AnchorFailure::MultipleAnchors => format!("`{}` contains multiple anchors", ori_link), AnchorFailure::RustdocAnchorConflict(res) => format!( "`{}` contains an anchor, but links to {kind}s are already anchored", - path_str, + ori_link, kind = res.descr(), ), }; From d4011e12708bc760f02ed27d6226e27317ed8629 Mon Sep 17 00:00:00 2001 From: Joshua Nelson Date: Mon, 5 Apr 2021 04:56:47 -0400 Subject: [PATCH 2/8] Use DiagnosticInfo for anchor failure This gets rid of a lot of parameters, as well as fixing a diagnostic bug. --- .../passes/collect_intra_doc_links.rs | 62 +++++-------------- src/test/rustdoc-ui/intra-doc/anchors.rs | 4 ++ src/test/rustdoc-ui/intra-doc/anchors.stderr | 16 +++-- 3 files changed, 30 insertions(+), 52 deletions(-) diff --git a/src/librustdoc/passes/collect_intra_doc_links.rs b/src/librustdoc/passes/collect_intra_doc_links.rs index 40a93855cf289..09823d4b05948 100644 --- a/src/librustdoc/passes/collect_intra_doc_links.rs +++ b/src/librustdoc/passes/collect_intra_doc_links.rs @@ -251,6 +251,7 @@ struct ResolutionInfo { extra_fragment: Option, } +#[derive(Clone)] struct DiagnosticInfo<'a> { item: &'a Item, dox: &'a str, @@ -949,19 +950,19 @@ impl LinkCollector<'_, '_> { return None; } + let diag_info = DiagnosticInfo { + item, + dox, + ori_link: &ori_link.link, + link_range: ori_link.range.clone(), + }; + let link = ori_link.link.replace("`", ""); let no_backticks_range = range_between_backticks(&ori_link); let parts = link.split('#').collect::>(); let (link, extra_fragment) = if parts.len() > 2 { // A valid link can't have multiple #'s - anchor_failure( - self.cx, - &item, - &link, - dox, - ori_link.range, - AnchorFailure::MultipleAnchors, - ); + anchor_failure(self.cx, diag_info, AnchorFailure::MultipleAnchors); return None; } else if parts.len() == 2 { if parts[0].trim().is_empty() { @@ -1092,12 +1093,6 @@ impl LinkCollector<'_, '_> { return None; } - let diag_info = DiagnosticInfo { - item, - dox, - ori_link: &ori_link.link, - link_range: ori_link.range.clone(), - }; let (mut res, mut fragment) = self.resolve_with_disambiguator_cached( ResolutionInfo { module_id, @@ -1105,7 +1100,7 @@ impl LinkCollector<'_, '_> { path_str: path_str.to_owned(), extra_fragment, }, - diag_info, + diag_info.clone(), // this struct should really be Copy, but Range is not :( matches!(ori_link.kind, LinkType::Reference | LinkType::Shortcut), )?; @@ -1123,10 +1118,7 @@ impl LinkCollector<'_, '_> { if fragment.is_some() { anchor_failure( self.cx, - &item, - path_str, - dox, - ori_link.range, + diag_info, AnchorFailure::RustdocAnchorConflict(prim), ); return None; @@ -1360,14 +1352,7 @@ impl LinkCollector<'_, '_> { None } Err(ErrorKind::AnchorFailure(msg)) => { - anchor_failure( - self.cx, - diag.item, - diag.ori_link, - diag.dox, - diag.link_range, - msg, - ); + anchor_failure(self.cx, diag, msg); None } } @@ -1384,14 +1369,7 @@ impl LinkCollector<'_, '_> { Ok(res) } Err(ErrorKind::AnchorFailure(msg)) => { - anchor_failure( - self.cx, - diag.item, - diag.ori_link, - diag.dox, - diag.link_range, - msg, - ); + anchor_failure(self.cx, diag, msg); return None; } Err(ErrorKind::Resolve(box kind)) => Err(kind), @@ -1399,14 +1377,7 @@ impl LinkCollector<'_, '_> { value_ns: match self.resolve(path_str, ValueNS, base_node, extra_fragment) { Ok(res) => Ok(res), Err(ErrorKind::AnchorFailure(msg)) => { - anchor_failure( - self.cx, - diag.item, - diag.ori_link, - diag.dox, - diag.link_range, - msg, - ); + anchor_failure(self.cx, diag, msg); return None; } Err(ErrorKind::Resolve(box kind)) => Err(kind), @@ -2004,10 +1975,7 @@ fn resolution_failure( /// Report an anchor failure. fn anchor_failure( cx: &DocContext<'_>, - item: &Item, - ori_link: &str, - dox: &str, - link_range: Range, + DiagnosticInfo { item, ori_link, dox, link_range }: DiagnosticInfo<'_>, failure: AnchorFailure, ) { let msg = match failure { diff --git a/src/test/rustdoc-ui/intra-doc/anchors.rs b/src/test/rustdoc-ui/intra-doc/anchors.rs index 009b291be1f08..6785cb7abeaee 100644 --- a/src/test/rustdoc-ui/intra-doc/anchors.rs +++ b/src/test/rustdoc-ui/intra-doc/anchors.rs @@ -43,3 +43,7 @@ pub fn enum_link() {} /// [u32#hello] //~^ ERROR `u32#hello` contains an anchor pub fn x() {} + +/// [prim@usize#x] +//~^ ERROR `prim@usize#x` contains an anchor +pub mod usize {} diff --git a/src/test/rustdoc-ui/intra-doc/anchors.stderr b/src/test/rustdoc-ui/intra-doc/anchors.stderr index 97b0cea0c1e4d..787a68ed969ef 100644 --- a/src/test/rustdoc-ui/intra-doc/anchors.stderr +++ b/src/test/rustdoc-ui/intra-doc/anchors.stderr @@ -1,8 +1,8 @@ -error: `Foo::f#hola` contains an anchor, but links to fields are already anchored - --> $DIR/anchors.rs:25:15 +error: `prim@usize#x` contains an anchor, but links to builtin types are already anchored + --> $DIR/anchors.rs:47:6 | -LL | /// Or maybe [Foo::f#hola]. - | ^^^^^^^^^^^ contains invalid anchor +LL | /// [prim@usize#x] + | ^^^^^^^^^^^^ contains invalid anchor | note: the lint level is defined here --> $DIR/anchors.rs:1:9 @@ -10,6 +10,12 @@ note: the lint level is defined here LL | #![deny(rustdoc::broken_intra_doc_links)] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +error: `Foo::f#hola` contains an anchor, but links to fields are already anchored + --> $DIR/anchors.rs:25:15 + | +LL | /// Or maybe [Foo::f#hola]. + | ^^^^^^^^^^^ contains invalid anchor + error: `hello#people#!` contains multiple anchors --> $DIR/anchors.rs:31:28 | @@ -28,5 +34,5 @@ error: `u32#hello` contains an anchor, but links to builtin types are already an LL | /// [u32#hello] | ^^^^^^^^^ contains invalid anchor -error: aborting due to 4 previous errors +error: aborting due to 5 previous errors From 8ed7d936f8780a857a981676899ab24660529e7b Mon Sep 17 00:00:00 2001 From: Joshua Nelson Date: Mon, 5 Apr 2021 05:01:15 -0400 Subject: [PATCH 3/8] Take `DiagnosticInfo` in `resolution_failure` --- .../passes/collect_intra_doc_links.rs | 36 ++++--------------- 1 file changed, 6 insertions(+), 30 deletions(-) diff --git a/src/librustdoc/passes/collect_intra_doc_links.rs b/src/librustdoc/passes/collect_intra_doc_links.rs index 09823d4b05948..496c2f57c3fc2 100644 --- a/src/librustdoc/passes/collect_intra_doc_links.rs +++ b/src/librustdoc/passes/collect_intra_doc_links.rs @@ -1023,11 +1023,9 @@ impl LinkCollector<'_, '_> { debug!("attempting to resolve item without parent module: {}", path_str); resolution_failure( self, - &item, + diag_info, path_str, disambiguator, - dox, - ori_link.range, smallvec![ResolutionFailure::NoParentItem], ); return None; @@ -1073,11 +1071,9 @@ impl LinkCollector<'_, '_> { debug!("link has malformed generics: {}", path_str); resolution_failure( self, - &item, + diag_info, path_str, disambiguator, - dox, - ori_link.range, smallvec![err_kind], ); return None; @@ -1337,15 +1333,7 @@ impl LinkCollector<'_, '_> { } } } - resolution_failure( - self, - diag.item, - path_str, - disambiguator, - diag.dox, - diag.link_range, - smallvec![kind], - ); + resolution_failure(self, diag, path_str, disambiguator, smallvec![kind]); // This could just be a normal link or a broken link // we could potentially check if something is // "intra-doc-link-like" and warn in that case. @@ -1406,11 +1394,9 @@ impl LinkCollector<'_, '_> { if len == 0 { resolution_failure( self, - diag.item, + diag, path_str, disambiguator, - diag.dox, - diag.link_range, candidates.into_iter().filter_map(|res| res.err()).collect(), ); // this could just be a normal link @@ -1452,15 +1438,7 @@ impl LinkCollector<'_, '_> { break; } } - resolution_failure( - self, - diag.item, - path_str, - disambiguator, - diag.dox, - diag.link_range, - smallvec![kind], - ); + resolution_failure(self, diag, path_str, disambiguator, smallvec![kind]); None } } @@ -1750,11 +1728,9 @@ fn report_diagnostic( /// `std::io::Error::x`, this will resolve `std::io::Error`. fn resolution_failure( collector: &mut LinkCollector<'_, '_>, - item: &Item, + DiagnosticInfo { item, ori_link: _, dox, link_range }: DiagnosticInfo<'_>, path_str: &str, disambiguator: Option, - dox: &str, - link_range: Range, kinds: SmallVec<[ResolutionFailure<'_>; 3]>, ) { let tcx = collector.cx.tcx; From 2ab1b7d8c3076510863e969ecc907c983a42a4ed Mon Sep 17 00:00:00 2001 From: Joshua Nelson Date: Mon, 5 Apr 2021 05:04:46 -0400 Subject: [PATCH 4/8] Rename link_range -> disambiguator_range in disambiguator_error It's not the range of the full link, it's only a partial range. --- src/librustdoc/passes/collect_intra_doc_links.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/librustdoc/passes/collect_intra_doc_links.rs b/src/librustdoc/passes/collect_intra_doc_links.rs index 496c2f57c3fc2..3efde35fd8b1a 100644 --- a/src/librustdoc/passes/collect_intra_doc_links.rs +++ b/src/librustdoc/passes/collect_intra_doc_links.rs @@ -1975,10 +1975,10 @@ fn disambiguator_error( cx: &DocContext<'_>, item: &Item, dox: &str, - link_range: Range, + disambiguator_range: Range, msg: &str, ) { - report_diagnostic(cx.tcx, BROKEN_INTRA_DOC_LINKS, msg, item, dox, &link_range, |_diag, _sp| {}); + report_diagnostic(cx.tcx, BROKEN_INTRA_DOC_LINKS, msg, item, dox, &disambiguator_range, |_diag, _sp| {}); } /// Report an ambiguity error, where there were multiple possible resolutions. From 58f9c5b74a77eb339d747dfead08cbafad823923 Mon Sep 17 00:00:00 2001 From: Joshua Nelson Date: Mon, 5 Apr 2021 05:06:50 -0400 Subject: [PATCH 5/8] Take DiagnosticInfo in disambiguator_error --- src/librustdoc/passes/collect_intra_doc_links.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/librustdoc/passes/collect_intra_doc_links.rs b/src/librustdoc/passes/collect_intra_doc_links.rs index 3efde35fd8b1a..e8f0c09dca4dd 100644 --- a/src/librustdoc/passes/collect_intra_doc_links.rs +++ b/src/librustdoc/passes/collect_intra_doc_links.rs @@ -984,7 +984,7 @@ impl LinkCollector<'_, '_> { // See issue #83859. let disambiguator_range = (no_backticks_range.start + relative_range.start) ..(no_backticks_range.start + relative_range.end); - disambiguator_error(self.cx, &item, dox, disambiguator_range, &err_msg); + disambiguator_error(self.cx, diag_info, disambiguator_range, &err_msg); } return None; } @@ -1973,8 +1973,7 @@ fn anchor_failure( /// Report an error in the link disambiguator. fn disambiguator_error( cx: &DocContext<'_>, - item: &Item, - dox: &str, + DiagnosticInfo { item, ori_link: _, dox, link_range: _ }: DiagnosticInfo<'_>, disambiguator_range: Range, msg: &str, ) { From f4c87c58a83406207a232d8f9f00f604a6d657b7 Mon Sep 17 00:00:00 2001 From: Joshua Nelson Date: Mon, 5 Apr 2021 05:09:37 -0400 Subject: [PATCH 6/8] Take `DiagnosticInfo` in `ambiguity_error` --- src/librustdoc/passes/collect_intra_doc_links.rs | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/src/librustdoc/passes/collect_intra_doc_links.rs b/src/librustdoc/passes/collect_intra_doc_links.rs index e8f0c09dca4dd..d0ece91f01462 100644 --- a/src/librustdoc/passes/collect_intra_doc_links.rs +++ b/src/librustdoc/passes/collect_intra_doc_links.rs @@ -1124,7 +1124,7 @@ impl LinkCollector<'_, '_> { } else { // `[char]` when a `char` module is in scope let candidates = vec![res, prim]; - ambiguity_error(self.cx, &item, path_str, dox, ori_link.range, candidates); + ambiguity_error(self.cx, diag_info, path_str, candidates); return None; } } @@ -1413,14 +1413,7 @@ impl LinkCollector<'_, '_> { } // If we're reporting an ambiguity, don't mention the namespaces that failed let candidates = candidates.map(|candidate| candidate.ok().map(|(res, _)| res)); - ambiguity_error( - self.cx, - diag.item, - path_str, - diag.dox, - diag.link_range, - candidates.present_items().collect(), - ); + ambiguity_error(self.cx, diag, path_str, candidates.present_items().collect()); None } } @@ -1983,10 +1976,8 @@ fn disambiguator_error( /// Report an ambiguity error, where there were multiple possible resolutions. fn ambiguity_error( cx: &DocContext<'_>, - item: &Item, + DiagnosticInfo { item, ori_link: _, dox, link_range }: DiagnosticInfo<'_>, path_str: &str, - dox: &str, - link_range: Range, candidates: Vec, ) { let mut msg = format!("`{}` is ", path_str); From 661acbc8bc9f9f0669e27c8af37faf4effff7c53 Mon Sep 17 00:00:00 2001 From: Joshua Nelson Date: Mon, 5 Apr 2021 05:15:57 -0400 Subject: [PATCH 7/8] Take DiagnosticInfo in privacy_error --- src/librustdoc/passes/collect_intra_doc_links.rs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/librustdoc/passes/collect_intra_doc_links.rs b/src/librustdoc/passes/collect_intra_doc_links.rs index d0ece91f01462..59981a2f85265 100644 --- a/src/librustdoc/passes/collect_intra_doc_links.rs +++ b/src/librustdoc/passes/collect_intra_doc_links.rs @@ -1192,7 +1192,7 @@ impl LinkCollector<'_, '_> { if self.cx.tcx.privacy_access_levels(LOCAL_CRATE).is_exported(hir_src) && !self.cx.tcx.privacy_access_levels(LOCAL_CRATE).is_exported(hir_dst) { - privacy_error(self.cx, &item, &path_str, dox, &ori_link); + privacy_error(self.cx, diag_info, &path_str); } } @@ -2045,7 +2045,11 @@ fn suggest_disambiguator( } /// Report a link from a public item to a private one. -fn privacy_error(cx: &DocContext<'_>, item: &Item, path_str: &str, dox: &str, link: &MarkdownLink) { +fn privacy_error( + cx: &DocContext<'_>, + DiagnosticInfo { item, ori_link: _, dox, link_range }: DiagnosticInfo<'_>, + path_str: &str, +) { let sym; let item_name = match item.name { Some(name) => { @@ -2057,7 +2061,7 @@ fn privacy_error(cx: &DocContext<'_>, item: &Item, path_str: &str, dox: &str, li let msg = format!("public documentation for `{}` links to private item `{}`", item_name, path_str); - report_diagnostic(cx.tcx, PRIVATE_INTRA_DOC_LINKS, &msg, item, dox, &link.range, |diag, sp| { + report_diagnostic(cx.tcx, PRIVATE_INTRA_DOC_LINKS, &msg, item, dox, &link_range, |diag, sp| { if let Some(sp) = sp { diag.span_label(sp, "this item is private"); } From a86a740defc4be4c89c28310b144af4559a4c9de Mon Sep 17 00:00:00 2001 From: Joshua Nelson Date: Mon, 5 Apr 2021 05:28:29 -0400 Subject: [PATCH 8/8] Use DiagnosticInfo for `report_diagnostic` --- .../passes/collect_intra_doc_links.rs | 68 ++++++++----------- 1 file changed, 29 insertions(+), 39 deletions(-) diff --git a/src/librustdoc/passes/collect_intra_doc_links.rs b/src/librustdoc/passes/collect_intra_doc_links.rs index 59981a2f85265..8ce30dfddc6e2 100644 --- a/src/librustdoc/passes/collect_intra_doc_links.rs +++ b/src/librustdoc/passes/collect_intra_doc_links.rs @@ -1144,15 +1144,7 @@ impl LinkCollector<'_, '_> { diag.note(¬e); suggest_disambiguator(resolved, diag, path_str, dox, sp, &ori_link.range); }; - report_diagnostic( - self.cx.tcx, - BROKEN_INTRA_DOC_LINKS, - &msg, - &item, - dox, - &ori_link.range, - callback, - ); + report_diagnostic(self.cx.tcx, BROKEN_INTRA_DOC_LINKS, &msg, &diag_info, callback); }; let verify = |kind: DefKind, id: DefId| { @@ -1192,7 +1184,7 @@ impl LinkCollector<'_, '_> { if self.cx.tcx.privacy_access_levels(LOCAL_CRATE).is_exported(hir_src) && !self.cx.tcx.privacy_access_levels(LOCAL_CRATE).is_exported(hir_dst) { - privacy_error(self.cx, diag_info, &path_str); + privacy_error(self.cx, &diag_info, &path_str); } } @@ -1665,9 +1657,7 @@ fn report_diagnostic( tcx: TyCtxt<'_>, lint: &'static Lint, msg: &str, - item: &Item, - dox: &str, - link_range: &Range, + DiagnosticInfo { item, ori_link: _, dox, link_range }: &DiagnosticInfo<'_>, decorate: impl FnOnce(&mut DiagnosticBuilder<'_>, Option), ) { let hir_id = match DocContext::as_local_hir_id(tcx, item.def_id) { @@ -1721,7 +1711,7 @@ fn report_diagnostic( /// `std::io::Error::x`, this will resolve `std::io::Error`. fn resolution_failure( collector: &mut LinkCollector<'_, '_>, - DiagnosticInfo { item, ori_link: _, dox, link_range }: DiagnosticInfo<'_>, + diag_info: DiagnosticInfo<'_>, path_str: &str, disambiguator: Option, kinds: SmallVec<[ResolutionFailure<'_>; 3]>, @@ -1731,9 +1721,7 @@ fn resolution_failure( tcx, BROKEN_INTRA_DOC_LINKS, &format!("unresolved link to `{}`", path_str), - item, - dox, - &link_range, + &diag_info, |diag, sp| { let item = |res: Res| format!("the {} `{}`", res.descr(), res.name(tcx),); let assoc_item_not_allowed = |res: Res| { @@ -1893,9 +1881,9 @@ fn resolution_failure( disambiguator, diag, path_str, - dox, + diag_info.dox, sp, - &link_range, + &diag_info.link_range, ) } @@ -1942,21 +1930,19 @@ fn resolution_failure( } /// Report an anchor failure. -fn anchor_failure( - cx: &DocContext<'_>, - DiagnosticInfo { item, ori_link, dox, link_range }: DiagnosticInfo<'_>, - failure: AnchorFailure, -) { +fn anchor_failure(cx: &DocContext<'_>, diag_info: DiagnosticInfo<'_>, failure: AnchorFailure) { let msg = match failure { - AnchorFailure::MultipleAnchors => format!("`{}` contains multiple anchors", ori_link), + AnchorFailure::MultipleAnchors => { + format!("`{}` contains multiple anchors", diag_info.ori_link) + } AnchorFailure::RustdocAnchorConflict(res) => format!( "`{}` contains an anchor, but links to {kind}s are already anchored", - ori_link, + diag_info.ori_link, kind = res.descr(), ), }; - report_diagnostic(cx.tcx, BROKEN_INTRA_DOC_LINKS, &msg, item, dox, &link_range, |diag, sp| { + report_diagnostic(cx.tcx, BROKEN_INTRA_DOC_LINKS, &msg, &diag_info, |diag, sp| { if let Some(sp) = sp { diag.span_label(sp, "contains invalid anchor"); } @@ -1966,17 +1952,18 @@ fn anchor_failure( /// Report an error in the link disambiguator. fn disambiguator_error( cx: &DocContext<'_>, - DiagnosticInfo { item, ori_link: _, dox, link_range: _ }: DiagnosticInfo<'_>, + mut diag_info: DiagnosticInfo<'_>, disambiguator_range: Range, msg: &str, ) { - report_diagnostic(cx.tcx, BROKEN_INTRA_DOC_LINKS, msg, item, dox, &disambiguator_range, |_diag, _sp| {}); + diag_info.link_range = disambiguator_range; + report_diagnostic(cx.tcx, BROKEN_INTRA_DOC_LINKS, msg, &diag_info, |_diag, _sp| {}); } /// Report an ambiguity error, where there were multiple possible resolutions. fn ambiguity_error( cx: &DocContext<'_>, - DiagnosticInfo { item, ori_link: _, dox, link_range }: DiagnosticInfo<'_>, + diag_info: DiagnosticInfo<'_>, path_str: &str, candidates: Vec, ) { @@ -2004,7 +1991,7 @@ fn ambiguity_error( } } - report_diagnostic(cx.tcx, BROKEN_INTRA_DOC_LINKS, &msg, item, dox, &link_range, |diag, sp| { + report_diagnostic(cx.tcx, BROKEN_INTRA_DOC_LINKS, &msg, &diag_info, |diag, sp| { if let Some(sp) = sp { diag.span_label(sp, "ambiguous link"); } else { @@ -2013,7 +2000,14 @@ fn ambiguity_error( for res in candidates { let disambiguator = Disambiguator::from_res(res); - suggest_disambiguator(disambiguator, diag, path_str, dox, sp, &link_range); + suggest_disambiguator( + disambiguator, + diag, + path_str, + diag_info.dox, + sp, + &diag_info.link_range, + ); } }); } @@ -2045,13 +2039,9 @@ fn suggest_disambiguator( } /// Report a link from a public item to a private one. -fn privacy_error( - cx: &DocContext<'_>, - DiagnosticInfo { item, ori_link: _, dox, link_range }: DiagnosticInfo<'_>, - path_str: &str, -) { +fn privacy_error(cx: &DocContext<'_>, diag_info: &DiagnosticInfo<'_>, path_str: &str) { let sym; - let item_name = match item.name { + let item_name = match diag_info.item.name { Some(name) => { sym = name.as_str(); &*sym @@ -2061,7 +2051,7 @@ fn privacy_error( let msg = format!("public documentation for `{}` links to private item `{}`", item_name, path_str); - report_diagnostic(cx.tcx, PRIVATE_INTRA_DOC_LINKS, &msg, item, dox, &link_range, |diag, sp| { + report_diagnostic(cx.tcx, PRIVATE_INTRA_DOC_LINKS, &msg, diag_info, |diag, sp| { if let Some(sp) = sp { diag.span_label(sp, "this item is private"); }