Support Reference & ReferenceUnknown link lint
This commit is contained in:
parent
c7369891ba
commit
46df95817d
5 changed files with 1135 additions and 67 deletions
|
@ -1040,7 +1040,7 @@ impl LinkCollector<'_, '_> {
|
||||||
matches!(ori_link.kind, LinkType::Reference | LinkType::Shortcut),
|
matches!(ori_link.kind, LinkType::Reference | LinkType::Shortcut),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
self.check_redundant_explicit_link(
|
self.resolve_display_text(
|
||||||
path_str,
|
path_str,
|
||||||
ResolutionInfo {
|
ResolutionInfo {
|
||||||
item_id,
|
item_id,
|
||||||
|
@ -1384,8 +1384,12 @@ impl LinkCollector<'_, '_> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Check if resolution of inline link's display text and explicit link are same.
|
/// Resolve display text if the provided link has separated parts of links.
|
||||||
fn check_redundant_explicit_link(
|
///
|
||||||
|
/// For example:
|
||||||
|
/// Inline link `[display_text](dest_link)` and reference link `[display_text][reference_link]` has
|
||||||
|
/// separated parts of links.
|
||||||
|
fn resolve_display_text(
|
||||||
&mut self,
|
&mut self,
|
||||||
explicit_link: &Box<str>,
|
explicit_link: &Box<str>,
|
||||||
display_res_info: ResolutionInfo,
|
display_res_info: ResolutionInfo,
|
||||||
|
@ -1393,33 +1397,80 @@ impl LinkCollector<'_, '_> {
|
||||||
diag_info: &DiagnosticInfo<'_>,
|
diag_info: &DiagnosticInfo<'_>,
|
||||||
) {
|
) {
|
||||||
// Check if explicit resolution's path is same as resolution of original link's display text path, e.g.
|
// Check if explicit resolution's path is same as resolution of original link's display text path, e.g.
|
||||||
|
//
|
||||||
|
// LinkType::Inline:
|
||||||
|
//
|
||||||
// [target](target)
|
// [target](target)
|
||||||
// [`target`](target)
|
// [`target`](target)
|
||||||
// [target](path::to::target)
|
// [target](path::to::target)
|
||||||
// [`target`](path::to::target)
|
// [`target`](path::to::target)
|
||||||
|
// [path::to::target](target)
|
||||||
|
// [`path::to::target`](target)
|
||||||
// [path::to::target](path::to::target)
|
// [path::to::target](path::to::target)
|
||||||
// [`path::to::target`](path::to::target)
|
// [`path::to::target`](path::to::target)
|
||||||
//
|
//
|
||||||
|
// LinkType::ReferenceUnknown
|
||||||
|
//
|
||||||
|
// [target][target]
|
||||||
|
// [`target`][target]
|
||||||
|
// [target][path::to::target]
|
||||||
|
// [`target`][path::to::target]
|
||||||
|
// [path::to::target][target]
|
||||||
|
// [`path::to::target`][target]
|
||||||
|
// [path::to::target][path::to::target]
|
||||||
|
// [`path::to::target`][path::to::target]
|
||||||
|
//
|
||||||
|
// LinkType::Reference
|
||||||
|
//
|
||||||
|
// [target][target]
|
||||||
|
// [`target`][target]
|
||||||
|
// [target][path::to::target]
|
||||||
|
// [`target`][path::to::target]
|
||||||
|
// [path::to::target][target]
|
||||||
|
// [`path::to::target`][target]
|
||||||
|
// [path::to::target][path::to::target]
|
||||||
|
// [`path::to::target`][path::to::target]
|
||||||
|
//
|
||||||
|
// [target]: target // or [target]: path::to::target
|
||||||
|
// [path::to::target]: path::to::target // or [path::to::target]: target
|
||||||
|
//
|
||||||
// To avoid disambiguator from panicking, we check if display text path is possible to be disambiguated
|
// To avoid disambiguator from panicking, we check if display text path is possible to be disambiguated
|
||||||
// into explicit path.
|
// into explicit path.
|
||||||
if ori_link.kind != LinkType::Inline {
|
if !matches!(
|
||||||
|
ori_link.kind,
|
||||||
|
LinkType::Inline | LinkType::Reference | LinkType::ReferenceUnknown
|
||||||
|
) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Algorithm to check if display text could possibly be the explicit link:
|
||||||
|
//
|
||||||
|
// Consider 2 links which are display text and explicit link, pick the shorter
|
||||||
|
// one as symbol and longer one as full qualified path, and tries to match symbol
|
||||||
|
// to the full qualified path's last symbol.
|
||||||
|
//
|
||||||
|
// Otherwise, check if 2 links are same, if so, skip the resolve process.
|
||||||
|
//
|
||||||
|
// Notice that this algorithm is passive, might possibly miss actual redudant cases.
|
||||||
|
let explicit_link = &explicit_link.to_string();
|
||||||
let display_text = &ori_link.display_text;
|
let display_text = &ori_link.display_text;
|
||||||
let display_len = display_text.len();
|
let display_len = display_text.len();
|
||||||
let explicit_len = explicit_link.len();
|
let explicit_len = explicit_link.len();
|
||||||
|
|
||||||
if explicit_len >= display_len
|
if display_len == explicit_len {
|
||||||
&& &explicit_link[(explicit_len - display_len)..] == display_text
|
// Whether they are same or not, skip the resolve process.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (explicit_len >= display_len
|
||||||
|
&& &explicit_link[(explicit_len - display_len)..] == display_text)
|
||||||
|
|| (display_len >= explicit_len
|
||||||
|
&& &display_text[(display_len - explicit_len)..] == explicit_link)
|
||||||
{
|
{
|
||||||
self.resolve_with_disambiguator_cached(
|
self.resolve_with_disambiguator_cached(
|
||||||
display_res_info,
|
display_res_info,
|
||||||
diag_info.clone(), // this struct should really be Copy, but Range is not :(
|
diag_info.clone(), // this struct should really be Copy, but Range is not :(
|
||||||
// For reference-style links we want to report only one error so unsuccessful
|
false,
|
||||||
// resolutions are cached, for other links we want to report an error every
|
|
||||||
// time so they are not cached.
|
|
||||||
matches!(ori_link.kind, LinkType::Reference),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,19 +1,20 @@
|
||||||
use std::ops::Range;
|
use std::ops::Range;
|
||||||
|
|
||||||
use pulldown_cmark::{Parser, BrokenLink, Event, Tag, LinkType, OffsetIter};
|
use pulldown_cmark::{BrokenLink, CowStr, Event, LinkType, OffsetIter, Parser, Tag};
|
||||||
use rustc_ast::NodeId;
|
use rustc_ast::NodeId;
|
||||||
use rustc_errors::SuggestionStyle;
|
use rustc_errors::SuggestionStyle;
|
||||||
|
use rustc_hir::def::{DefKind, DocLinkResMap, Namespace, Res};
|
||||||
use rustc_hir::HirId;
|
use rustc_hir::HirId;
|
||||||
use rustc_hir::def::{Namespace, DefKind, DocLinkResMap, Res};
|
|
||||||
use rustc_lint_defs::Applicability;
|
use rustc_lint_defs::Applicability;
|
||||||
use rustc_span::Symbol;
|
use rustc_span::Symbol;
|
||||||
|
|
||||||
use crate::clean::Item;
|
|
||||||
use crate::clean::utils::find_nearest_parent_module;
|
use crate::clean::utils::find_nearest_parent_module;
|
||||||
|
use crate::clean::Item;
|
||||||
use crate::core::DocContext;
|
use crate::core::DocContext;
|
||||||
use crate::html::markdown::main_body_opts;
|
use crate::html::markdown::main_body_opts;
|
||||||
use crate::passes::source_span_for_markdown_range;
|
use crate::passes::source_span_for_markdown_range;
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
struct LinkData {
|
struct LinkData {
|
||||||
resolvable_link: Option<String>,
|
resolvable_link: Option<String>,
|
||||||
resolvable_link_range: Option<Range<usize>>,
|
resolvable_link_range: Option<Range<usize>>,
|
||||||
|
@ -34,26 +35,19 @@ pub(crate) fn visit_item(cx: &DocContext<'_>, item: &Item) {
|
||||||
check_redundant_explicit_link(cx, item, hir_id, &doc);
|
check_redundant_explicit_link(cx, item, hir_id, &doc);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn check_redundant_explicit_link<'md>(cx: &DocContext<'_>, item: &Item, hir_id: HirId, doc: &'md str) {
|
fn check_redundant_explicit_link<'md>(
|
||||||
|
cx: &DocContext<'_>,
|
||||||
|
item: &Item,
|
||||||
|
hir_id: HirId,
|
||||||
|
doc: &'md str,
|
||||||
|
) -> Option<()> {
|
||||||
let mut broken_line_callback = |link: BrokenLink<'md>| Some((link.reference, "".into()));
|
let mut broken_line_callback = |link: BrokenLink<'md>| Some((link.reference, "".into()));
|
||||||
let mut offset_iter = Parser::new_with_broken_link_callback(&doc, main_body_opts(), Some(&mut broken_line_callback)).into_offset_iter();
|
let mut offset_iter = Parser::new_with_broken_link_callback(
|
||||||
|
&doc,
|
||||||
while let Some((event, link_range)) = offset_iter.next() {
|
main_body_opts(),
|
||||||
match event {
|
Some(&mut broken_line_callback),
|
||||||
Event::Start(Tag::Link(link_type, dest, _)) => {
|
)
|
||||||
let link_data = collect_link_data(&mut offset_iter);
|
.into_offset_iter();
|
||||||
let dest = dest.to_string();
|
|
||||||
|
|
||||||
if link_type == LinkType::Inline {
|
|
||||||
check_inline_link_redundancy(cx, item, hir_id, doc, link_range, dest, link_data);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_ => {}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn check_inline_link_redundancy(cx: &DocContext<'_>, item: &Item, hir_id: HirId, doc: &str, link_range: Range<usize>, dest: String, link_data: LinkData) -> Option<()> {
|
|
||||||
let item_id = item.def_id()?;
|
let item_id = item.def_id()?;
|
||||||
let module_id = match cx.tcx.def_kind(item_id) {
|
let module_id = match cx.tcx.def_kind(item_id) {
|
||||||
DefKind::Mod if item.inner_docs(cx.tcx) => item_id,
|
DefKind::Mod if item.inner_docs(cx.tcx) => item_id,
|
||||||
|
@ -61,29 +55,71 @@ fn check_inline_link_redundancy(cx: &DocContext<'_>, item: &Item, hir_id: HirId,
|
||||||
};
|
};
|
||||||
let resolutions = cx.tcx.doc_link_resolutions(module_id);
|
let resolutions = cx.tcx.doc_link_resolutions(module_id);
|
||||||
|
|
||||||
let (resolvable_link, resolvable_link_range) = (&link_data.resolvable_link?, &link_data.resolvable_link_range?);
|
while let Some((event, link_range)) = offset_iter.next() {
|
||||||
let (dest_res, display_res) = (find_resolution(resolutions, &dest)?, find_resolution(resolutions, resolvable_link)?);
|
match event {
|
||||||
|
Event::Start(Tag::Link(link_type, dest, _)) => match link_type {
|
||||||
|
LinkType::Inline | LinkType::ReferenceUnknown => {
|
||||||
|
check_inline_or_reference_unknown_redundancy(
|
||||||
|
cx,
|
||||||
|
item,
|
||||||
|
hir_id,
|
||||||
|
doc,
|
||||||
|
resolutions,
|
||||||
|
link_range,
|
||||||
|
dest.to_string(),
|
||||||
|
collect_link_data(&mut offset_iter),
|
||||||
|
if link_type == LinkType::Inline { (b'(', b')') } else { (b'[', b']') },
|
||||||
|
);
|
||||||
|
}
|
||||||
|
LinkType::Reference => {
|
||||||
|
check_reference_redundancy(
|
||||||
|
cx,
|
||||||
|
item,
|
||||||
|
hir_id,
|
||||||
|
doc,
|
||||||
|
resolutions,
|
||||||
|
link_range,
|
||||||
|
&dest,
|
||||||
|
collect_link_data(&mut offset_iter),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
_ => {}
|
||||||
|
},
|
||||||
|
_ => {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
None
|
||||||
|
}
|
||||||
|
|
||||||
|
/// FIXME(ChAoSUnItY): Too many arguments.
|
||||||
|
fn check_inline_or_reference_unknown_redundancy(
|
||||||
|
cx: &DocContext<'_>,
|
||||||
|
item: &Item,
|
||||||
|
hir_id: HirId,
|
||||||
|
doc: &str,
|
||||||
|
resolutions: &DocLinkResMap,
|
||||||
|
link_range: Range<usize>,
|
||||||
|
dest: String,
|
||||||
|
link_data: LinkData,
|
||||||
|
(open, close): (u8, u8),
|
||||||
|
) -> Option<()> {
|
||||||
|
let (resolvable_link, resolvable_link_range) =
|
||||||
|
(&link_data.resolvable_link?, &link_data.resolvable_link_range?);
|
||||||
|
let (dest_res, display_res) =
|
||||||
|
(find_resolution(resolutions, &dest)?, find_resolution(resolutions, resolvable_link)?);
|
||||||
|
|
||||||
if dest_res == display_res {
|
if dest_res == display_res {
|
||||||
let link_span = source_span_for_markdown_range(
|
let link_span = source_span_for_markdown_range(cx.tcx, &doc, &link_range, &item.attrs)
|
||||||
cx.tcx,
|
.unwrap_or(item.attr_span(cx.tcx));
|
||||||
&doc,
|
|
||||||
&link_range,
|
|
||||||
&item.attrs,
|
|
||||||
).unwrap_or(item.attr_span(cx.tcx));
|
|
||||||
let explicit_span = source_span_for_markdown_range(
|
let explicit_span = source_span_for_markdown_range(
|
||||||
cx.tcx,
|
cx.tcx,
|
||||||
&doc,
|
&doc,
|
||||||
&offset_explicit_range(doc, &link_range, b'(', b')'),
|
&offset_explicit_range(doc, link_range, open, close),
|
||||||
&item.attrs
|
&item.attrs,
|
||||||
)?;
|
)?;
|
||||||
let display_span = source_span_for_markdown_range(
|
let display_span =
|
||||||
cx.tcx,
|
source_span_for_markdown_range(cx.tcx, &doc, &resolvable_link_range, &item.attrs)?;
|
||||||
&doc,
|
|
||||||
&resolvable_link_range,
|
|
||||||
&item.attrs
|
|
||||||
)?;
|
|
||||||
|
|
||||||
|
|
||||||
cx.tcx.struct_span_lint_hir(crate::lint::REDUNDANT_EXPLICIT_LINKS, hir_id, explicit_span, "redundant explicit link target", |lint| {
|
cx.tcx.struct_span_lint_hir(crate::lint::REDUNDANT_EXPLICIT_LINKS, hir_id, explicit_span, "redundant explicit link target", |lint| {
|
||||||
lint.span_label(explicit_span, "explicit target is redundant")
|
lint.span_label(explicit_span, "explicit target is redundant")
|
||||||
|
@ -98,19 +134,60 @@ fn check_inline_link_redundancy(cx: &DocContext<'_>, item: &Item, hir_id: HirId,
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
||||||
fn find_resolution<'tcx>(resolutions: &'tcx DocLinkResMap, path: &str) -> Option<&'tcx Res<NodeId>> {
|
/// FIXME(ChAoSUnItY): Too many arguments.
|
||||||
for ns in [Namespace::TypeNS, Namespace::ValueNS, Namespace::MacroNS] {
|
fn check_reference_redundancy(
|
||||||
let Some(Some(res)) = resolutions.get(&(Symbol::intern(path), ns))
|
cx: &DocContext<'_>,
|
||||||
else {
|
item: &Item,
|
||||||
continue;
|
hir_id: HirId,
|
||||||
};
|
doc: &str,
|
||||||
|
resolutions: &DocLinkResMap,
|
||||||
|
link_range: Range<usize>,
|
||||||
|
dest: &CowStr<'_>,
|
||||||
|
link_data: LinkData,
|
||||||
|
) -> Option<()> {
|
||||||
|
let (resolvable_link, resolvable_link_range) =
|
||||||
|
(&link_data.resolvable_link?, &link_data.resolvable_link_range?);
|
||||||
|
let (dest_res, display_res) =
|
||||||
|
(find_resolution(resolutions, &dest)?, find_resolution(resolutions, resolvable_link)?);
|
||||||
|
|
||||||
return Some(res);
|
if dest_res == display_res {
|
||||||
|
let link_span = source_span_for_markdown_range(cx.tcx, &doc, &link_range, &item.attrs)
|
||||||
|
.unwrap_or(item.attr_span(cx.tcx));
|
||||||
|
let explicit_span = source_span_for_markdown_range(
|
||||||
|
cx.tcx,
|
||||||
|
&doc,
|
||||||
|
&offset_explicit_range(doc, link_range.clone(), b'[', b']'),
|
||||||
|
&item.attrs,
|
||||||
|
)?;
|
||||||
|
let display_span =
|
||||||
|
source_span_for_markdown_range(cx.tcx, &doc, &resolvable_link_range, &item.attrs)?;
|
||||||
|
let def_span = source_span_for_markdown_range(
|
||||||
|
cx.tcx,
|
||||||
|
&doc,
|
||||||
|
&offset_reference_def_range(doc, dest, link_range),
|
||||||
|
&item.attrs,
|
||||||
|
)?;
|
||||||
|
|
||||||
|
cx.tcx.struct_span_lint_hir(crate::lint::REDUNDANT_EXPLICIT_LINKS, hir_id, explicit_span, "redundant explicit link target", |lint| {
|
||||||
|
lint.span_label(explicit_span, "explicit target is redundant")
|
||||||
|
.span_label(display_span, "because label contains path that resolves to same destination")
|
||||||
|
.span_note(def_span, "referenced explicit link target defined here")
|
||||||
|
.note("when a link's destination is not specified,\nthe label is used to resolve intra-doc links")
|
||||||
|
.span_suggestion_with_style(link_span, "remove explicit link target", format!("[{}]", link_data.display_link), Applicability::MaybeIncorrect, SuggestionStyle::ShowAlways);
|
||||||
|
|
||||||
|
lint
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn find_resolution(resolutions: &DocLinkResMap, path: &str) -> Option<Res<NodeId>> {
|
||||||
|
[Namespace::TypeNS, Namespace::ValueNS, Namespace::MacroNS]
|
||||||
|
.into_iter()
|
||||||
|
.find_map(|ns| resolutions.get(&(Symbol::intern(path), ns)).copied().flatten())
|
||||||
|
}
|
||||||
|
|
||||||
/// Collects all neccessary data of link.
|
/// Collects all neccessary data of link.
|
||||||
fn collect_link_data(offset_iter: &mut OffsetIter<'_, '_>) -> LinkData {
|
fn collect_link_data(offset_iter: &mut OffsetIter<'_, '_>) -> LinkData {
|
||||||
let mut resolvable_link = None;
|
let mut resolvable_link = None;
|
||||||
|
@ -140,14 +217,10 @@ fn collect_link_data(offset_iter: &mut OffsetIter<'_, '_>) -> LinkData {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
LinkData {
|
LinkData { resolvable_link, resolvable_link_range, display_link }
|
||||||
resolvable_link,
|
|
||||||
resolvable_link_range,
|
|
||||||
display_link,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn offset_explicit_range(md: &str, link_range: &Range<usize>, open: u8, close: u8) -> Range<usize> {
|
fn offset_explicit_range(md: &str, link_range: Range<usize>, open: u8, close: u8) -> Range<usize> {
|
||||||
let mut open_brace = !0;
|
let mut open_brace = !0;
|
||||||
let mut close_brace = !0;
|
let mut close_brace = !0;
|
||||||
for (i, b) in md.as_bytes()[link_range.clone()].iter().copied().enumerate().rev() {
|
for (i, b) in md.as_bytes()[link_range.clone()].iter().copied().enumerate().rev() {
|
||||||
|
@ -159,7 +232,7 @@ fn offset_explicit_range(md: &str, link_range: &Range<usize>, open: u8, close: u
|
||||||
}
|
}
|
||||||
|
|
||||||
if close_brace < link_range.start || close_brace >= link_range.end {
|
if close_brace < link_range.start || close_brace >= link_range.end {
|
||||||
return link_range.clone();
|
return link_range;
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut nesting = 1;
|
let mut nesting = 1;
|
||||||
|
@ -181,8 +254,44 @@ fn offset_explicit_range(md: &str, link_range: &Range<usize>, open: u8, close: u
|
||||||
assert!(open_brace != close_brace);
|
assert!(open_brace != close_brace);
|
||||||
|
|
||||||
if open_brace < link_range.start || open_brace >= link_range.end {
|
if open_brace < link_range.start || open_brace >= link_range.end {
|
||||||
return link_range.clone();
|
return link_range;
|
||||||
}
|
}
|
||||||
// do not actually include braces in the span
|
// do not actually include braces in the span
|
||||||
(open_brace + 1)..close_brace
|
(open_brace + 1)..close_brace
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn offset_reference_def_range(
|
||||||
|
md: &str,
|
||||||
|
dest: &CowStr<'_>,
|
||||||
|
link_range: Range<usize>,
|
||||||
|
) -> Range<usize> {
|
||||||
|
// For diagnostics, we want to underline the link's definition but `span` will point at
|
||||||
|
// where the link is used. This is a problem for reference-style links, where the definition
|
||||||
|
// is separate from the usage.
|
||||||
|
|
||||||
|
match dest {
|
||||||
|
// `Borrowed` variant means the string (the link's destination) may come directly from
|
||||||
|
// the markdown text and we can locate the original link destination.
|
||||||
|
// NOTE: LinkReplacer also provides `Borrowed` but possibly from other sources,
|
||||||
|
// so `locate()` can fall back to use `span`.
|
||||||
|
CowStr::Borrowed(s) => {
|
||||||
|
// FIXME: remove this function once pulldown_cmark can provide spans for link definitions.
|
||||||
|
unsafe {
|
||||||
|
let s_start = dest.as_ptr();
|
||||||
|
let s_end = s_start.add(s.len());
|
||||||
|
let md_start = md.as_ptr();
|
||||||
|
let md_end = md_start.add(md.len());
|
||||||
|
if md_start <= s_start && s_end <= md_end {
|
||||||
|
let start = s_start.offset_from(md_start) as usize;
|
||||||
|
let end = s_end.offset_from(md_start) as usize;
|
||||||
|
start..end
|
||||||
|
} else {
|
||||||
|
link_range
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// For anything else, we can only use the provided range.
|
||||||
|
CowStr::Boxed(_) | CowStr::Inlined(_) => link_range,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -52,3 +52,107 @@ pub fn should_warn_inline() {}
|
||||||
/// [`Vec<T>`](Vec)
|
/// [`Vec<T>`](Vec)
|
||||||
/// [`Vec<T>`](std::vec::Vec)
|
/// [`Vec<T>`](std::vec::Vec)
|
||||||
pub fn should_not_warn_inline() {}
|
pub fn should_not_warn_inline() {}
|
||||||
|
|
||||||
|
/// [dummy_target]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [`dummy_target`]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
///
|
||||||
|
/// [Vec]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [`Vec`]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [Vec]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [`Vec`]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [std::vec::Vec]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [`std::vec::Vec`]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [std::vec::Vec]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [`std::vec::Vec`]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
///
|
||||||
|
/// [usize]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [`usize`]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [usize]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [`usize`]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [std::primitive::usize]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [`std::primitive::usize`]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [std::primitive::usize]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [`std::primitive::usize`]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
///
|
||||||
|
/// [dummy_target] TEXT
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [`dummy_target`] TEXT
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
pub fn should_warn_reference_unknown() {}
|
||||||
|
|
||||||
|
/// [`Vec<T>`][Vec]
|
||||||
|
/// [`Vec<T>`][std::vec::Vec]
|
||||||
|
pub fn should_not_warn_reference_unknown() {}
|
||||||
|
|
||||||
|
/// [dummy_target]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [`dummy_target`]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
///
|
||||||
|
/// [Vec]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [`Vec`]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [Vec]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [`Vec`]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [std::vec::Vec]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [`std::vec::Vec`]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [std::vec::Vec]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [`std::vec::Vec`]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
///
|
||||||
|
/// [usize]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [`usize`]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [usize]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [`usize`]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [std::primitive::usize]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [`std::primitive::usize`]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [std::primitive::usize]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [`std::primitive::usize`]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
///
|
||||||
|
/// [dummy_target] TEXT
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [`dummy_target`] TEXT
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
///
|
||||||
|
/// [dummy_target]: dummy_target
|
||||||
|
/// [Vec]: Vec
|
||||||
|
/// [std::vec::Vec]: Vec
|
||||||
|
/// [usize]: usize
|
||||||
|
/// [std::primitive::usize]: usize
|
||||||
|
pub fn should_warn_reference() {}
|
||||||
|
|
||||||
|
/// [`Vec<T>`]: Vec
|
||||||
|
/// [`Vec<T>`]: std::vec::Vec
|
||||||
|
pub fn should_not_warn_reference() {}
|
||||||
|
|
|
@ -52,3 +52,107 @@ pub fn should_warn_inline() {}
|
||||||
/// [`Vec<T>`](Vec)
|
/// [`Vec<T>`](Vec)
|
||||||
/// [`Vec<T>`](std::vec::Vec)
|
/// [`Vec<T>`](std::vec::Vec)
|
||||||
pub fn should_not_warn_inline() {}
|
pub fn should_not_warn_inline() {}
|
||||||
|
|
||||||
|
/// [dummy_target][dummy_target]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [`dummy_target`][dummy_target]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
///
|
||||||
|
/// [Vec][Vec]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [`Vec`][Vec]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [Vec][std::vec::Vec]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [`Vec`][std::vec::Vec]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [std::vec::Vec][Vec]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [`std::vec::Vec`][Vec]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [std::vec::Vec][std::vec::Vec]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [`std::vec::Vec`][std::vec::Vec]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
///
|
||||||
|
/// [usize][usize]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [`usize`][usize]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [usize][std::primitive::usize]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [`usize`][std::primitive::usize]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [std::primitive::usize][usize]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [`std::primitive::usize`][usize]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [std::primitive::usize][std::primitive::usize]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [`std::primitive::usize`][std::primitive::usize]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
///
|
||||||
|
/// [dummy_target][dummy_target] TEXT
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [`dummy_target`][dummy_target] TEXT
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
pub fn should_warn_reference_unknown() {}
|
||||||
|
|
||||||
|
/// [`Vec<T>`][Vec]
|
||||||
|
/// [`Vec<T>`][std::vec::Vec]
|
||||||
|
pub fn should_not_warn_reference_unknown() {}
|
||||||
|
|
||||||
|
/// [dummy_target][dummy_target]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [`dummy_target`][dummy_target]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
///
|
||||||
|
/// [Vec][Vec]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [`Vec`][Vec]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [Vec][std::vec::Vec]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [`Vec`][std::vec::Vec]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [std::vec::Vec][Vec]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [`std::vec::Vec`][Vec]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [std::vec::Vec][std::vec::Vec]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [`std::vec::Vec`][std::vec::Vec]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
///
|
||||||
|
/// [usize][usize]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [`usize`][usize]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [usize][std::primitive::usize]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [`usize`][std::primitive::usize]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [std::primitive::usize][usize]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [`std::primitive::usize`][usize]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [std::primitive::usize][std::primitive::usize]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [`std::primitive::usize`][std::primitive::usize]
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
///
|
||||||
|
/// [dummy_target][dummy_target] TEXT
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
/// [`dummy_target`][dummy_target] TEXT
|
||||||
|
//~^ ERROR redundant explicit link target
|
||||||
|
///
|
||||||
|
/// [dummy_target]: dummy_target
|
||||||
|
/// [Vec]: Vec
|
||||||
|
/// [std::vec::Vec]: Vec
|
||||||
|
/// [usize]: usize
|
||||||
|
/// [std::primitive::usize]: usize
|
||||||
|
pub fn should_warn_reference() {}
|
||||||
|
|
||||||
|
/// [`Vec<T>`]: Vec
|
||||||
|
/// [`Vec<T>`]: std::vec::Vec
|
||||||
|
pub fn should_not_warn_reference() {}
|
||||||
|
|
|
@ -303,5 +303,705 @@ help: remove explicit link target
|
||||||
LL | /// [`dummy_target`] TEXT
|
LL | /// [`dummy_target`] TEXT
|
||||||
| ~~~~~~~~~~~~~~~~
|
| ~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
error: aborting due to 20 previous errors
|
error: redundant explicit link target
|
||||||
|
--> $DIR/redundant_explicit_links.rs:56:20
|
||||||
|
|
|
||||||
|
LL | /// [dummy_target][dummy_target]
|
||||||
|
| ------------ ^^^^^^^^^^^^ explicit target is redundant
|
||||||
|
| |
|
||||||
|
| because label contains path that resolves to same destination
|
||||||
|
|
|
||||||
|
= note: when a link's destination is not specified,
|
||||||
|
the label is used to resolve intra-doc links
|
||||||
|
help: remove explicit link target
|
||||||
|
|
|
||||||
|
LL | /// [dummy_target]
|
||||||
|
| ~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
error: redundant explicit link target
|
||||||
|
--> $DIR/redundant_explicit_links.rs:58:22
|
||||||
|
|
|
||||||
|
LL | /// [`dummy_target`][dummy_target]
|
||||||
|
| -------------- ^^^^^^^^^^^^ explicit target is redundant
|
||||||
|
| |
|
||||||
|
| because label contains path that resolves to same destination
|
||||||
|
|
|
||||||
|
= note: when a link's destination is not specified,
|
||||||
|
the label is used to resolve intra-doc links
|
||||||
|
help: remove explicit link target
|
||||||
|
|
|
||||||
|
LL | /// [`dummy_target`]
|
||||||
|
| ~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
error: redundant explicit link target
|
||||||
|
--> $DIR/redundant_explicit_links.rs:61:11
|
||||||
|
|
|
||||||
|
LL | /// [Vec][Vec]
|
||||||
|
| --- ^^^ explicit target is redundant
|
||||||
|
| |
|
||||||
|
| because label contains path that resolves to same destination
|
||||||
|
|
|
||||||
|
= note: when a link's destination is not specified,
|
||||||
|
the label is used to resolve intra-doc links
|
||||||
|
help: remove explicit link target
|
||||||
|
|
|
||||||
|
LL | /// [Vec]
|
||||||
|
| ~~~~~
|
||||||
|
|
||||||
|
error: redundant explicit link target
|
||||||
|
--> $DIR/redundant_explicit_links.rs:63:13
|
||||||
|
|
|
||||||
|
LL | /// [`Vec`][Vec]
|
||||||
|
| ----- ^^^ explicit target is redundant
|
||||||
|
| |
|
||||||
|
| because label contains path that resolves to same destination
|
||||||
|
|
|
||||||
|
= note: when a link's destination is not specified,
|
||||||
|
the label is used to resolve intra-doc links
|
||||||
|
help: remove explicit link target
|
||||||
|
|
|
||||||
|
LL | /// [`Vec`]
|
||||||
|
| ~~~~~~~
|
||||||
|
|
||||||
|
error: redundant explicit link target
|
||||||
|
--> $DIR/redundant_explicit_links.rs:65:11
|
||||||
|
|
|
||||||
|
LL | /// [Vec][std::vec::Vec]
|
||||||
|
| --- ^^^^^^^^^^^^^ explicit target is redundant
|
||||||
|
| |
|
||||||
|
| because label contains path that resolves to same destination
|
||||||
|
|
|
||||||
|
= note: when a link's destination is not specified,
|
||||||
|
the label is used to resolve intra-doc links
|
||||||
|
help: remove explicit link target
|
||||||
|
|
|
||||||
|
LL | /// [Vec]
|
||||||
|
| ~~~~~
|
||||||
|
|
||||||
|
error: redundant explicit link target
|
||||||
|
--> $DIR/redundant_explicit_links.rs:67:13
|
||||||
|
|
|
||||||
|
LL | /// [`Vec`][std::vec::Vec]
|
||||||
|
| ----- ^^^^^^^^^^^^^ explicit target is redundant
|
||||||
|
| |
|
||||||
|
| because label contains path that resolves to same destination
|
||||||
|
|
|
||||||
|
= note: when a link's destination is not specified,
|
||||||
|
the label is used to resolve intra-doc links
|
||||||
|
help: remove explicit link target
|
||||||
|
|
|
||||||
|
LL | /// [`Vec`]
|
||||||
|
| ~~~~~~~
|
||||||
|
|
||||||
|
error: redundant explicit link target
|
||||||
|
--> $DIR/redundant_explicit_links.rs:69:21
|
||||||
|
|
|
||||||
|
LL | /// [std::vec::Vec][Vec]
|
||||||
|
| ------------- ^^^ explicit target is redundant
|
||||||
|
| |
|
||||||
|
| because label contains path that resolves to same destination
|
||||||
|
|
|
||||||
|
= note: when a link's destination is not specified,
|
||||||
|
the label is used to resolve intra-doc links
|
||||||
|
help: remove explicit link target
|
||||||
|
|
|
||||||
|
LL | /// [std::vec::Vec]
|
||||||
|
| ~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
error: redundant explicit link target
|
||||||
|
--> $DIR/redundant_explicit_links.rs:71:23
|
||||||
|
|
|
||||||
|
LL | /// [`std::vec::Vec`][Vec]
|
||||||
|
| --------------- ^^^ explicit target is redundant
|
||||||
|
| |
|
||||||
|
| because label contains path that resolves to same destination
|
||||||
|
|
|
||||||
|
= note: when a link's destination is not specified,
|
||||||
|
the label is used to resolve intra-doc links
|
||||||
|
help: remove explicit link target
|
||||||
|
|
|
||||||
|
LL | /// [`std::vec::Vec`]
|
||||||
|
| ~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
error: redundant explicit link target
|
||||||
|
--> $DIR/redundant_explicit_links.rs:73:21
|
||||||
|
|
|
||||||
|
LL | /// [std::vec::Vec][std::vec::Vec]
|
||||||
|
| ------------- ^^^^^^^^^^^^^ explicit target is redundant
|
||||||
|
| |
|
||||||
|
| because label contains path that resolves to same destination
|
||||||
|
|
|
||||||
|
= note: when a link's destination is not specified,
|
||||||
|
the label is used to resolve intra-doc links
|
||||||
|
help: remove explicit link target
|
||||||
|
|
|
||||||
|
LL | /// [std::vec::Vec]
|
||||||
|
| ~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
error: redundant explicit link target
|
||||||
|
--> $DIR/redundant_explicit_links.rs:75:23
|
||||||
|
|
|
||||||
|
LL | /// [`std::vec::Vec`][std::vec::Vec]
|
||||||
|
| --------------- ^^^^^^^^^^^^^ explicit target is redundant
|
||||||
|
| |
|
||||||
|
| because label contains path that resolves to same destination
|
||||||
|
|
|
||||||
|
= note: when a link's destination is not specified,
|
||||||
|
the label is used to resolve intra-doc links
|
||||||
|
help: remove explicit link target
|
||||||
|
|
|
||||||
|
LL | /// [`std::vec::Vec`]
|
||||||
|
| ~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
error: redundant explicit link target
|
||||||
|
--> $DIR/redundant_explicit_links.rs:78:13
|
||||||
|
|
|
||||||
|
LL | /// [usize][usize]
|
||||||
|
| ----- ^^^^^ explicit target is redundant
|
||||||
|
| |
|
||||||
|
| because label contains path that resolves to same destination
|
||||||
|
|
|
||||||
|
= note: when a link's destination is not specified,
|
||||||
|
the label is used to resolve intra-doc links
|
||||||
|
help: remove explicit link target
|
||||||
|
|
|
||||||
|
LL | /// [usize]
|
||||||
|
| ~~~~~~~
|
||||||
|
|
||||||
|
error: redundant explicit link target
|
||||||
|
--> $DIR/redundant_explicit_links.rs:80:15
|
||||||
|
|
|
||||||
|
LL | /// [`usize`][usize]
|
||||||
|
| ------- ^^^^^ explicit target is redundant
|
||||||
|
| |
|
||||||
|
| because label contains path that resolves to same destination
|
||||||
|
|
|
||||||
|
= note: when a link's destination is not specified,
|
||||||
|
the label is used to resolve intra-doc links
|
||||||
|
help: remove explicit link target
|
||||||
|
|
|
||||||
|
LL | /// [`usize`]
|
||||||
|
| ~~~~~~~~~
|
||||||
|
|
||||||
|
error: redundant explicit link target
|
||||||
|
--> $DIR/redundant_explicit_links.rs:82:13
|
||||||
|
|
|
||||||
|
LL | /// [usize][std::primitive::usize]
|
||||||
|
| ----- ^^^^^^^^^^^^^^^^^^^^^ explicit target is redundant
|
||||||
|
| |
|
||||||
|
| because label contains path that resolves to same destination
|
||||||
|
|
|
||||||
|
= note: when a link's destination is not specified,
|
||||||
|
the label is used to resolve intra-doc links
|
||||||
|
help: remove explicit link target
|
||||||
|
|
|
||||||
|
LL | /// [usize]
|
||||||
|
| ~~~~~~~
|
||||||
|
|
||||||
|
error: redundant explicit link target
|
||||||
|
--> $DIR/redundant_explicit_links.rs:84:15
|
||||||
|
|
|
||||||
|
LL | /// [`usize`][std::primitive::usize]
|
||||||
|
| ------- ^^^^^^^^^^^^^^^^^^^^^ explicit target is redundant
|
||||||
|
| |
|
||||||
|
| because label contains path that resolves to same destination
|
||||||
|
|
|
||||||
|
= note: when a link's destination is not specified,
|
||||||
|
the label is used to resolve intra-doc links
|
||||||
|
help: remove explicit link target
|
||||||
|
|
|
||||||
|
LL | /// [`usize`]
|
||||||
|
| ~~~~~~~~~
|
||||||
|
|
||||||
|
error: redundant explicit link target
|
||||||
|
--> $DIR/redundant_explicit_links.rs:86:29
|
||||||
|
|
|
||||||
|
LL | /// [std::primitive::usize][usize]
|
||||||
|
| --------------------- ^^^^^ explicit target is redundant
|
||||||
|
| |
|
||||||
|
| because label contains path that resolves to same destination
|
||||||
|
|
|
||||||
|
= note: when a link's destination is not specified,
|
||||||
|
the label is used to resolve intra-doc links
|
||||||
|
help: remove explicit link target
|
||||||
|
|
|
||||||
|
LL | /// [std::primitive::usize]
|
||||||
|
| ~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
error: redundant explicit link target
|
||||||
|
--> $DIR/redundant_explicit_links.rs:88:31
|
||||||
|
|
|
||||||
|
LL | /// [`std::primitive::usize`][usize]
|
||||||
|
| ----------------------- ^^^^^ explicit target is redundant
|
||||||
|
| |
|
||||||
|
| because label contains path that resolves to same destination
|
||||||
|
|
|
||||||
|
= note: when a link's destination is not specified,
|
||||||
|
the label is used to resolve intra-doc links
|
||||||
|
help: remove explicit link target
|
||||||
|
|
|
||||||
|
LL | /// [`std::primitive::usize`]
|
||||||
|
| ~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
error: redundant explicit link target
|
||||||
|
--> $DIR/redundant_explicit_links.rs:90:29
|
||||||
|
|
|
||||||
|
LL | /// [std::primitive::usize][std::primitive::usize]
|
||||||
|
| --------------------- ^^^^^^^^^^^^^^^^^^^^^ explicit target is redundant
|
||||||
|
| |
|
||||||
|
| because label contains path that resolves to same destination
|
||||||
|
|
|
||||||
|
= note: when a link's destination is not specified,
|
||||||
|
the label is used to resolve intra-doc links
|
||||||
|
help: remove explicit link target
|
||||||
|
|
|
||||||
|
LL | /// [std::primitive::usize]
|
||||||
|
| ~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
error: redundant explicit link target
|
||||||
|
--> $DIR/redundant_explicit_links.rs:92:31
|
||||||
|
|
|
||||||
|
LL | /// [`std::primitive::usize`][std::primitive::usize]
|
||||||
|
| ----------------------- ^^^^^^^^^^^^^^^^^^^^^ explicit target is redundant
|
||||||
|
| |
|
||||||
|
| because label contains path that resolves to same destination
|
||||||
|
|
|
||||||
|
= note: when a link's destination is not specified,
|
||||||
|
the label is used to resolve intra-doc links
|
||||||
|
help: remove explicit link target
|
||||||
|
|
|
||||||
|
LL | /// [`std::primitive::usize`]
|
||||||
|
| ~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
error: redundant explicit link target
|
||||||
|
--> $DIR/redundant_explicit_links.rs:95:20
|
||||||
|
|
|
||||||
|
LL | /// [dummy_target][dummy_target] TEXT
|
||||||
|
| ------------ ^^^^^^^^^^^^ explicit target is redundant
|
||||||
|
| |
|
||||||
|
| because label contains path that resolves to same destination
|
||||||
|
|
|
||||||
|
= note: when a link's destination is not specified,
|
||||||
|
the label is used to resolve intra-doc links
|
||||||
|
help: remove explicit link target
|
||||||
|
|
|
||||||
|
LL | /// [dummy_target] TEXT
|
||||||
|
| ~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
error: redundant explicit link target
|
||||||
|
--> $DIR/redundant_explicit_links.rs:97:22
|
||||||
|
|
|
||||||
|
LL | /// [`dummy_target`][dummy_target] TEXT
|
||||||
|
| -------------- ^^^^^^^^^^^^ explicit target is redundant
|
||||||
|
| |
|
||||||
|
| because label contains path that resolves to same destination
|
||||||
|
|
|
||||||
|
= note: when a link's destination is not specified,
|
||||||
|
the label is used to resolve intra-doc links
|
||||||
|
help: remove explicit link target
|
||||||
|
|
|
||||||
|
LL | /// [`dummy_target`] TEXT
|
||||||
|
| ~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
error: redundant explicit link target
|
||||||
|
--> $DIR/redundant_explicit_links.rs:105:20
|
||||||
|
|
|
||||||
|
LL | /// [dummy_target][dummy_target]
|
||||||
|
| ------------ ^^^^^^^^^^^^ explicit target is redundant
|
||||||
|
| |
|
||||||
|
| because label contains path that resolves to same destination
|
||||||
|
|
|
||||||
|
note: referenced explicit link target defined here
|
||||||
|
--> $DIR/redundant_explicit_links.rs:149:21
|
||||||
|
|
|
||||||
|
LL | /// [dummy_target]: dummy_target
|
||||||
|
| ^^^^^^^^^^^^
|
||||||
|
= note: when a link's destination is not specified,
|
||||||
|
the label is used to resolve intra-doc links
|
||||||
|
help: remove explicit link target
|
||||||
|
|
|
||||||
|
LL | /// [dummy_target]
|
||||||
|
| ~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
error: redundant explicit link target
|
||||||
|
--> $DIR/redundant_explicit_links.rs:107:22
|
||||||
|
|
|
||||||
|
LL | /// [`dummy_target`][dummy_target]
|
||||||
|
| -------------- ^^^^^^^^^^^^ explicit target is redundant
|
||||||
|
| |
|
||||||
|
| because label contains path that resolves to same destination
|
||||||
|
|
|
||||||
|
note: referenced explicit link target defined here
|
||||||
|
--> $DIR/redundant_explicit_links.rs:149:21
|
||||||
|
|
|
||||||
|
LL | /// [dummy_target]: dummy_target
|
||||||
|
| ^^^^^^^^^^^^
|
||||||
|
= note: when a link's destination is not specified,
|
||||||
|
the label is used to resolve intra-doc links
|
||||||
|
help: remove explicit link target
|
||||||
|
|
|
||||||
|
LL | /// [`dummy_target`]
|
||||||
|
| ~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
error: redundant explicit link target
|
||||||
|
--> $DIR/redundant_explicit_links.rs:110:11
|
||||||
|
|
|
||||||
|
LL | /// [Vec][Vec]
|
||||||
|
| --- ^^^ explicit target is redundant
|
||||||
|
| |
|
||||||
|
| because label contains path that resolves to same destination
|
||||||
|
|
|
||||||
|
note: referenced explicit link target defined here
|
||||||
|
--> $DIR/redundant_explicit_links.rs:150:12
|
||||||
|
|
|
||||||
|
LL | /// [Vec]: Vec
|
||||||
|
| ^^^
|
||||||
|
= note: when a link's destination is not specified,
|
||||||
|
the label is used to resolve intra-doc links
|
||||||
|
help: remove explicit link target
|
||||||
|
|
|
||||||
|
LL | /// [Vec]
|
||||||
|
| ~~~~~
|
||||||
|
|
||||||
|
error: redundant explicit link target
|
||||||
|
--> $DIR/redundant_explicit_links.rs:112:13
|
||||||
|
|
|
||||||
|
LL | /// [`Vec`][Vec]
|
||||||
|
| ----- ^^^ explicit target is redundant
|
||||||
|
| |
|
||||||
|
| because label contains path that resolves to same destination
|
||||||
|
|
|
||||||
|
note: referenced explicit link target defined here
|
||||||
|
--> $DIR/redundant_explicit_links.rs:150:12
|
||||||
|
|
|
||||||
|
LL | /// [Vec]: Vec
|
||||||
|
| ^^^
|
||||||
|
= note: when a link's destination is not specified,
|
||||||
|
the label is used to resolve intra-doc links
|
||||||
|
help: remove explicit link target
|
||||||
|
|
|
||||||
|
LL | /// [`Vec`]
|
||||||
|
| ~~~~~~~
|
||||||
|
|
||||||
|
error: redundant explicit link target
|
||||||
|
--> $DIR/redundant_explicit_links.rs:114:11
|
||||||
|
|
|
||||||
|
LL | /// [Vec][std::vec::Vec]
|
||||||
|
| --- ^^^^^^^^^^^^^ explicit target is redundant
|
||||||
|
| |
|
||||||
|
| because label contains path that resolves to same destination
|
||||||
|
|
|
||||||
|
note: referenced explicit link target defined here
|
||||||
|
--> $DIR/redundant_explicit_links.rs:151:22
|
||||||
|
|
|
||||||
|
LL | /// [std::vec::Vec]: Vec
|
||||||
|
| ^^^
|
||||||
|
= note: when a link's destination is not specified,
|
||||||
|
the label is used to resolve intra-doc links
|
||||||
|
help: remove explicit link target
|
||||||
|
|
|
||||||
|
LL | /// [Vec]
|
||||||
|
| ~~~~~
|
||||||
|
|
||||||
|
error: redundant explicit link target
|
||||||
|
--> $DIR/redundant_explicit_links.rs:116:13
|
||||||
|
|
|
||||||
|
LL | /// [`Vec`][std::vec::Vec]
|
||||||
|
| ----- ^^^^^^^^^^^^^ explicit target is redundant
|
||||||
|
| |
|
||||||
|
| because label contains path that resolves to same destination
|
||||||
|
|
|
||||||
|
note: referenced explicit link target defined here
|
||||||
|
--> $DIR/redundant_explicit_links.rs:151:22
|
||||||
|
|
|
||||||
|
LL | /// [std::vec::Vec]: Vec
|
||||||
|
| ^^^
|
||||||
|
= note: when a link's destination is not specified,
|
||||||
|
the label is used to resolve intra-doc links
|
||||||
|
help: remove explicit link target
|
||||||
|
|
|
||||||
|
LL | /// [`Vec`]
|
||||||
|
| ~~~~~~~
|
||||||
|
|
||||||
|
error: redundant explicit link target
|
||||||
|
--> $DIR/redundant_explicit_links.rs:118:21
|
||||||
|
|
|
||||||
|
LL | /// [std::vec::Vec][Vec]
|
||||||
|
| ------------- ^^^ explicit target is redundant
|
||||||
|
| |
|
||||||
|
| because label contains path that resolves to same destination
|
||||||
|
|
|
||||||
|
note: referenced explicit link target defined here
|
||||||
|
--> $DIR/redundant_explicit_links.rs:150:12
|
||||||
|
|
|
||||||
|
LL | /// [Vec]: Vec
|
||||||
|
| ^^^
|
||||||
|
= note: when a link's destination is not specified,
|
||||||
|
the label is used to resolve intra-doc links
|
||||||
|
help: remove explicit link target
|
||||||
|
|
|
||||||
|
LL | /// [std::vec::Vec]
|
||||||
|
| ~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
error: redundant explicit link target
|
||||||
|
--> $DIR/redundant_explicit_links.rs:120:23
|
||||||
|
|
|
||||||
|
LL | /// [`std::vec::Vec`][Vec]
|
||||||
|
| --------------- ^^^ explicit target is redundant
|
||||||
|
| |
|
||||||
|
| because label contains path that resolves to same destination
|
||||||
|
|
|
||||||
|
note: referenced explicit link target defined here
|
||||||
|
--> $DIR/redundant_explicit_links.rs:150:12
|
||||||
|
|
|
||||||
|
LL | /// [Vec]: Vec
|
||||||
|
| ^^^
|
||||||
|
= note: when a link's destination is not specified,
|
||||||
|
the label is used to resolve intra-doc links
|
||||||
|
help: remove explicit link target
|
||||||
|
|
|
||||||
|
LL | /// [`std::vec::Vec`]
|
||||||
|
| ~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
error: redundant explicit link target
|
||||||
|
--> $DIR/redundant_explicit_links.rs:122:21
|
||||||
|
|
|
||||||
|
LL | /// [std::vec::Vec][std::vec::Vec]
|
||||||
|
| ------------- ^^^^^^^^^^^^^ explicit target is redundant
|
||||||
|
| |
|
||||||
|
| because label contains path that resolves to same destination
|
||||||
|
|
|
||||||
|
note: referenced explicit link target defined here
|
||||||
|
--> $DIR/redundant_explicit_links.rs:151:22
|
||||||
|
|
|
||||||
|
LL | /// [std::vec::Vec]: Vec
|
||||||
|
| ^^^
|
||||||
|
= note: when a link's destination is not specified,
|
||||||
|
the label is used to resolve intra-doc links
|
||||||
|
help: remove explicit link target
|
||||||
|
|
|
||||||
|
LL | /// [std::vec::Vec]
|
||||||
|
| ~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
error: redundant explicit link target
|
||||||
|
--> $DIR/redundant_explicit_links.rs:124:23
|
||||||
|
|
|
||||||
|
LL | /// [`std::vec::Vec`][std::vec::Vec]
|
||||||
|
| --------------- ^^^^^^^^^^^^^ explicit target is redundant
|
||||||
|
| |
|
||||||
|
| because label contains path that resolves to same destination
|
||||||
|
|
|
||||||
|
note: referenced explicit link target defined here
|
||||||
|
--> $DIR/redundant_explicit_links.rs:151:22
|
||||||
|
|
|
||||||
|
LL | /// [std::vec::Vec]: Vec
|
||||||
|
| ^^^
|
||||||
|
= note: when a link's destination is not specified,
|
||||||
|
the label is used to resolve intra-doc links
|
||||||
|
help: remove explicit link target
|
||||||
|
|
|
||||||
|
LL | /// [`std::vec::Vec`]
|
||||||
|
| ~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
error: redundant explicit link target
|
||||||
|
--> $DIR/redundant_explicit_links.rs:127:13
|
||||||
|
|
|
||||||
|
LL | /// [usize][usize]
|
||||||
|
| ----- ^^^^^ explicit target is redundant
|
||||||
|
| |
|
||||||
|
| because label contains path that resolves to same destination
|
||||||
|
|
|
||||||
|
note: referenced explicit link target defined here
|
||||||
|
--> $DIR/redundant_explicit_links.rs:152:14
|
||||||
|
|
|
||||||
|
LL | /// [usize]: usize
|
||||||
|
| ^^^^^
|
||||||
|
= note: when a link's destination is not specified,
|
||||||
|
the label is used to resolve intra-doc links
|
||||||
|
help: remove explicit link target
|
||||||
|
|
|
||||||
|
LL | /// [usize]
|
||||||
|
| ~~~~~~~
|
||||||
|
|
||||||
|
error: redundant explicit link target
|
||||||
|
--> $DIR/redundant_explicit_links.rs:129:15
|
||||||
|
|
|
||||||
|
LL | /// [`usize`][usize]
|
||||||
|
| ------- ^^^^^ explicit target is redundant
|
||||||
|
| |
|
||||||
|
| because label contains path that resolves to same destination
|
||||||
|
|
|
||||||
|
note: referenced explicit link target defined here
|
||||||
|
--> $DIR/redundant_explicit_links.rs:152:14
|
||||||
|
|
|
||||||
|
LL | /// [usize]: usize
|
||||||
|
| ^^^^^
|
||||||
|
= note: when a link's destination is not specified,
|
||||||
|
the label is used to resolve intra-doc links
|
||||||
|
help: remove explicit link target
|
||||||
|
|
|
||||||
|
LL | /// [`usize`]
|
||||||
|
| ~~~~~~~~~
|
||||||
|
|
||||||
|
error: redundant explicit link target
|
||||||
|
--> $DIR/redundant_explicit_links.rs:131:13
|
||||||
|
|
|
||||||
|
LL | /// [usize][std::primitive::usize]
|
||||||
|
| ----- ^^^^^^^^^^^^^^^^^^^^^ explicit target is redundant
|
||||||
|
| |
|
||||||
|
| because label contains path that resolves to same destination
|
||||||
|
|
|
||||||
|
note: referenced explicit link target defined here
|
||||||
|
--> $DIR/redundant_explicit_links.rs:153:30
|
||||||
|
|
|
||||||
|
LL | /// [std::primitive::usize]: usize
|
||||||
|
| ^^^^^
|
||||||
|
= note: when a link's destination is not specified,
|
||||||
|
the label is used to resolve intra-doc links
|
||||||
|
help: remove explicit link target
|
||||||
|
|
|
||||||
|
LL | /// [usize]
|
||||||
|
| ~~~~~~~
|
||||||
|
|
||||||
|
error: redundant explicit link target
|
||||||
|
--> $DIR/redundant_explicit_links.rs:133:15
|
||||||
|
|
|
||||||
|
LL | /// [`usize`][std::primitive::usize]
|
||||||
|
| ------- ^^^^^^^^^^^^^^^^^^^^^ explicit target is redundant
|
||||||
|
| |
|
||||||
|
| because label contains path that resolves to same destination
|
||||||
|
|
|
||||||
|
note: referenced explicit link target defined here
|
||||||
|
--> $DIR/redundant_explicit_links.rs:153:30
|
||||||
|
|
|
||||||
|
LL | /// [std::primitive::usize]: usize
|
||||||
|
| ^^^^^
|
||||||
|
= note: when a link's destination is not specified,
|
||||||
|
the label is used to resolve intra-doc links
|
||||||
|
help: remove explicit link target
|
||||||
|
|
|
||||||
|
LL | /// [`usize`]
|
||||||
|
| ~~~~~~~~~
|
||||||
|
|
||||||
|
error: redundant explicit link target
|
||||||
|
--> $DIR/redundant_explicit_links.rs:135:29
|
||||||
|
|
|
||||||
|
LL | /// [std::primitive::usize][usize]
|
||||||
|
| --------------------- ^^^^^ explicit target is redundant
|
||||||
|
| |
|
||||||
|
| because label contains path that resolves to same destination
|
||||||
|
|
|
||||||
|
note: referenced explicit link target defined here
|
||||||
|
--> $DIR/redundant_explicit_links.rs:152:14
|
||||||
|
|
|
||||||
|
LL | /// [usize]: usize
|
||||||
|
| ^^^^^
|
||||||
|
= note: when a link's destination is not specified,
|
||||||
|
the label is used to resolve intra-doc links
|
||||||
|
help: remove explicit link target
|
||||||
|
|
|
||||||
|
LL | /// [std::primitive::usize]
|
||||||
|
| ~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
error: redundant explicit link target
|
||||||
|
--> $DIR/redundant_explicit_links.rs:137:31
|
||||||
|
|
|
||||||
|
LL | /// [`std::primitive::usize`][usize]
|
||||||
|
| ----------------------- ^^^^^ explicit target is redundant
|
||||||
|
| |
|
||||||
|
| because label contains path that resolves to same destination
|
||||||
|
|
|
||||||
|
note: referenced explicit link target defined here
|
||||||
|
--> $DIR/redundant_explicit_links.rs:152:14
|
||||||
|
|
|
||||||
|
LL | /// [usize]: usize
|
||||||
|
| ^^^^^
|
||||||
|
= note: when a link's destination is not specified,
|
||||||
|
the label is used to resolve intra-doc links
|
||||||
|
help: remove explicit link target
|
||||||
|
|
|
||||||
|
LL | /// [`std::primitive::usize`]
|
||||||
|
| ~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
error: redundant explicit link target
|
||||||
|
--> $DIR/redundant_explicit_links.rs:139:29
|
||||||
|
|
|
||||||
|
LL | /// [std::primitive::usize][std::primitive::usize]
|
||||||
|
| --------------------- ^^^^^^^^^^^^^^^^^^^^^ explicit target is redundant
|
||||||
|
| |
|
||||||
|
| because label contains path that resolves to same destination
|
||||||
|
|
|
||||||
|
note: referenced explicit link target defined here
|
||||||
|
--> $DIR/redundant_explicit_links.rs:153:30
|
||||||
|
|
|
||||||
|
LL | /// [std::primitive::usize]: usize
|
||||||
|
| ^^^^^
|
||||||
|
= note: when a link's destination is not specified,
|
||||||
|
the label is used to resolve intra-doc links
|
||||||
|
help: remove explicit link target
|
||||||
|
|
|
||||||
|
LL | /// [std::primitive::usize]
|
||||||
|
| ~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
error: redundant explicit link target
|
||||||
|
--> $DIR/redundant_explicit_links.rs:141:31
|
||||||
|
|
|
||||||
|
LL | /// [`std::primitive::usize`][std::primitive::usize]
|
||||||
|
| ----------------------- ^^^^^^^^^^^^^^^^^^^^^ explicit target is redundant
|
||||||
|
| |
|
||||||
|
| because label contains path that resolves to same destination
|
||||||
|
|
|
||||||
|
note: referenced explicit link target defined here
|
||||||
|
--> $DIR/redundant_explicit_links.rs:153:30
|
||||||
|
|
|
||||||
|
LL | /// [std::primitive::usize]: usize
|
||||||
|
| ^^^^^
|
||||||
|
= note: when a link's destination is not specified,
|
||||||
|
the label is used to resolve intra-doc links
|
||||||
|
help: remove explicit link target
|
||||||
|
|
|
||||||
|
LL | /// [`std::primitive::usize`]
|
||||||
|
| ~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
error: redundant explicit link target
|
||||||
|
--> $DIR/redundant_explicit_links.rs:144:20
|
||||||
|
|
|
||||||
|
LL | /// [dummy_target][dummy_target] TEXT
|
||||||
|
| ------------ ^^^^^^^^^^^^ explicit target is redundant
|
||||||
|
| |
|
||||||
|
| because label contains path that resolves to same destination
|
||||||
|
|
|
||||||
|
note: referenced explicit link target defined here
|
||||||
|
--> $DIR/redundant_explicit_links.rs:149:21
|
||||||
|
|
|
||||||
|
LL | /// [dummy_target]: dummy_target
|
||||||
|
| ^^^^^^^^^^^^
|
||||||
|
= note: when a link's destination is not specified,
|
||||||
|
the label is used to resolve intra-doc links
|
||||||
|
help: remove explicit link target
|
||||||
|
|
|
||||||
|
LL | /// [dummy_target] TEXT
|
||||||
|
| ~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
error: redundant explicit link target
|
||||||
|
--> $DIR/redundant_explicit_links.rs:146:22
|
||||||
|
|
|
||||||
|
LL | /// [`dummy_target`][dummy_target] TEXT
|
||||||
|
| -------------- ^^^^^^^^^^^^ explicit target is redundant
|
||||||
|
| |
|
||||||
|
| because label contains path that resolves to same destination
|
||||||
|
|
|
||||||
|
note: referenced explicit link target defined here
|
||||||
|
--> $DIR/redundant_explicit_links.rs:149:21
|
||||||
|
|
|
||||||
|
LL | /// [dummy_target]: dummy_target
|
||||||
|
| ^^^^^^^^^^^^
|
||||||
|
= note: when a link's destination is not specified,
|
||||||
|
the label is used to resolve intra-doc links
|
||||||
|
help: remove explicit link target
|
||||||
|
|
|
||||||
|
LL | /// [`dummy_target`] TEXT
|
||||||
|
| ~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
error: aborting due to 60 previous errors
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue