diff --git a/src/doc.rs b/src/doc.rs index 5637fb2cefb6..9a6a86d41403 100644 --- a/src/doc.rs +++ b/src/doc.rs @@ -69,7 +69,7 @@ fn collect_doc(attrs: &[ast::Attribute]) -> (Cow, Option) { let (doc, span) = doc_attrs.next().unwrap_or_else(|| unreachable!()); (doc.into(), Some(span)) } - _ => (doc_attrs.map(|s| s.0).collect::().into(), None), + _ => (doc_attrs.map(|s| format!("{}\n", s.0)).collect::().into(), None), } } @@ -124,9 +124,14 @@ fn check_word(cx: &EarlyContext, word: &str, span: Span) { s != "_" && !s.contains("\\_") && s.contains('_') } + // Something with a `/` might be a link, don’t warn (see #823): + if word.contains('/') { + return; + } + // Trim punctuation as in `some comment (see foo::bar).` // ^^ - // Or even as `_foo bar_` which is emphasized. + // Or even as in `_foo bar_` which is emphasized. let word = word.trim_matches(|c: char| !c.is_alphanumeric()); if has_underscore(word) || word.contains("::") || is_camel_case(word) { diff --git a/tests/compile-fail/doc.rs b/tests/compile-fail/doc.rs index eecf5e0b2062..a7b316e1f823 100755 --- a/tests/compile-fail/doc.rs +++ b/tests/compile-fail/doc.rs @@ -29,6 +29,11 @@ fn multiline_ticks() { fn test_emphasis() { } +/// This test has [a link with underscores][chunked-example] inside it. See #823. +/// See also [the issue tracker](https://github.com/Manishearth/rust-clippy/search?q=doc_markdown&type=Issues). +/// +/// [chunked-example]: http://en.wikipedia.org/wiki/Chunked_transfer_encoding#Example + /// The `main` function is the entry point of the program. Here it only calls the `foo_bar` and /// `multiline_ticks` functions. fn main() {