From 2a8d7bd0dd69ab1fe2a2af0f2984959f62b5631c Mon Sep 17 00:00:00 2001 From: Manish Goregaokar Date: Wed, 6 Oct 2021 00:01:40 -0700 Subject: [PATCH] Handle intra-doc links in doc_markdown --- clippy_lints/src/doc.rs | 14 +++++++++++++- tests/ui/doc/doc.stderr | 8 +------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/clippy_lints/src/doc.rs b/clippy_lints/src/doc.rs index 55d2265125e0c..75873fd7c1c96 100644 --- a/clippy_lints/src/doc.rs +++ b/clippy_lints/src/doc.rs @@ -406,6 +406,15 @@ struct DocHeaders { } fn check_attrs<'a>(cx: &LateContext<'_>, valid_idents: &FxHashSet, 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![]; @@ -440,7 +449,10 @@ fn check_attrs<'a>(cx: &LateContext<'_>, valid_idents: &FxHashSet, 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; diff --git a/tests/ui/doc/doc.stderr b/tests/ui/doc/doc.stderr index 161407a6a722e..7eab8a85f093d 100644 --- a/tests/ui/doc/doc.stderr +++ b/tests/ui/doc/doc.stderr @@ -186,11 +186,5 @@ error: you should put `mycrate::Collection` between ticks in the documentation LL | /// An iterator over mycrate::Collection's values. | ^^^^^^^^^^^^^^^^^^^ -error: you should put `text][path::to::item` between ticks in the documentation - --> $DIR/doc.rs:208:12 - | -LL | /// [plain text][path::to::item] - | ^^^^^^^^^^^^^^^^^^^^ - -error: aborting due to 32 previous errors +error: aborting due to 31 previous errors