Skip to content

Commit

Permalink
Auto merge of #7772 - Manishearth:doc-markdown-intra, r=camsteffen
Browse files Browse the repository at this point in the history
Handle intra-doc links in doc_markdown

Fixes #7758

changelog: Handle intra-doc links in [`doc_markdown`]
  • Loading branch information
bors committed Oct 6, 2021
2 parents b9d753e + 2a8d7bd commit 11492c7
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 1 deletion.
14 changes: 13 additions & 1 deletion clippy_lints/src/doc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -406,6 +406,15 @@ struct DocHeaders {
}

fn check_attrs<'a>(cx: &LateContext<'_>, valid_idents: &FxHashSet<String>, attrs: &'a [Attribute]) -> DocHeaders {
use pulldown_cmark::{BrokenLink, CowStr, Options};
/// We don't want the parser to choke on intra doc links. Since we don't
/// actually care about rendering them, just pretend that all broken links are
/// point to a fake address.
#[allow(clippy::unnecessary_wraps)] // we're following a type signature
fn fake_broken_link_callback<'a>(_: BrokenLink<'_>) -> Option<(CowStr<'a>, CowStr<'a>)> {
Some(("fake".into(), "fake".into()))
}

let mut doc = String::new();
let mut spans = vec![];

Expand Down Expand Up @@ -440,7 +449,10 @@ fn check_attrs<'a>(cx: &LateContext<'_>, valid_idents: &FxHashSet<String>, attrs
};
}

let parser = pulldown_cmark::Parser::new(&doc).into_offset_iter();
let mut cb = fake_broken_link_callback;

let parser =
pulldown_cmark::Parser::new_with_broken_link_callback(&doc, Options::empty(), Some(&mut cb)).into_offset_iter();
// Iterate over all `Events` and combine consecutive events into one
let events = parser.coalesce(|previous, current| {
use pulldown_cmark::Event::Text;
Expand Down
5 changes: 5 additions & 0 deletions tests/ui/doc/doc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,11 @@ fn issue_2343() {}
/// __|_ _|__||_|
fn pulldown_cmark_crash() {}

/// This should not lint
/// (regression test for #7758)
/// [plain text][path::to::item]
fn intra_doc_link() {}

// issue #7033 - generic_const_exprs ICE
struct S<T, const N: usize>
where [(); N.checked_next_power_of_two().unwrap()]: {
Expand Down

0 comments on commit 11492c7

Please sign in to comment.