Skip to content

Commit 6fcd4bf

Browse files
authored
Rollup merge of rust-lang#144921 - lolbinarycat:rustdoc-intra-doc-gfm-141866, r=fmease,GuillaumeGomez
Don't emit `rustdoc::broken_intra_doc_links` for GitHub-flavored Markdown admonitions like `[!NOTE]` fixes rust-lang#141866
2 parents c55f24c + c022ed9 commit 6fcd4bf

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

src/librustdoc/passes/collect_intra_doc_links.rs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -997,6 +997,7 @@ fn preprocess_link(
997997
}
998998
};
999999

1000+
let is_shortcut_style = ori_link.kind == LinkType::ShortcutUnknown;
10001001
// If there's no backticks, be lenient and revert to the old behavior.
10011002
// This is to prevent churn by linting on stuff that isn't meant to be a link.
10021003
// only shortcut links have simple enough syntax that they
@@ -1013,11 +1014,22 @@ fn preprocess_link(
10131014
// | has backtick | never ignore | never ignore |
10141015
// | no backtick | ignore if url-like | never ignore |
10151016
// |-------------------------------------------------------|
1016-
let ignore_urllike =
1017-
can_be_url || (ori_link.kind == LinkType::ShortcutUnknown && !ori_link.link.contains('`'));
1017+
let ignore_urllike = can_be_url || (is_shortcut_style && !ori_link.link.contains('`'));
10181018
if ignore_urllike && should_ignore_link(path_str) {
10191019
return None;
10201020
}
1021+
// If we have an intra-doc link starting with `!` (which isn't `[!]` because this is the never type), we ignore it
1022+
// as it is never valid.
1023+
//
1024+
// The case is common enough because of cases like `#[doc = include_str!("../README.md")]` which often
1025+
// uses GitHub-flavored Markdown (GFM) admonitions, such as `[!NOTE]`.
1026+
if is_shortcut_style
1027+
&& let Some(suffix) = ori_link.link.strip_prefix('!')
1028+
&& !suffix.is_empty()
1029+
&& suffix.chars().all(|c| c.is_ascii_alphabetic())
1030+
{
1031+
return None;
1032+
}
10211033

10221034
// Strip generics from the path.
10231035
let path_str = match strip_generics_from_path(path_str) {
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
// regression test for https://github.com/rust-lang/rust/issues/141866
2+
//@ check-pass
3+
#![deny(rustdoc::broken_intra_doc_links)]
4+
5+
//! > [!NOTE]
6+
//! > This should not cause any warnings

0 commit comments

Comments
 (0)