From 93c48a0977927fc3678600d0d79ef43e8f30761f Mon Sep 17 00:00:00 2001 From: Andre Bogus Date: Sat, 19 Aug 2017 22:52:49 +0200 Subject: [PATCH] remove stars at the beginning of multiline comments --- clippy_lints/src/doc.rs | 25 +++++++++++++++++++++---- tests/ui/doc.rs | 6 ++++++ 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/clippy_lints/src/doc.rs b/clippy_lints/src/doc.rs index 3ca71694bbd..6dbf2ea959e 100644 --- a/clippy_lints/src/doc.rs +++ b/clippy_lints/src/doc.rs @@ -109,11 +109,11 @@ pub fn strip_doc_comment_decoration(comment: &str, span: Span) -> (String, Vec<( if comment.starts_with("/*") { let doc = &comment[3..comment.len() - 2]; let mut sizes = vec![]; - + let mut contains_initial_stars = false; for line in doc.lines() { let offset = line.as_ptr() as usize - comment.as_ptr() as usize; debug_assert_eq!(offset as u32 as usize, offset); - + contains_initial_stars |= line.trim_left().starts_with('*'); // +1 for the newline sizes.push(( line.len() + 1, @@ -123,8 +123,25 @@ pub fn strip_doc_comment_decoration(comment: &str, span: Span) -> (String, Vec<( }, )); } - - return (doc.to_string(), sizes); + if !contains_initial_stars { + return (doc.to_string(), sizes); + } + // remove the initial '*'s if any + let mut no_stars = String::with_capacity(doc.len()); + for line in doc.lines() { + let mut chars = line.chars(); + while let Some(c) = chars.next() { + if c.is_whitespace() { + no_stars.push(c); + } else { + no_stars.push(if c == '*' { ' ' } else { c }); + break; + } + } + no_stars.push_str(chars.as_str()); + no_stars.push('\n'); + } + return (no_stars, sizes); } panic!("not a doc-comment: {}", comment); diff --git a/tests/ui/doc.rs b/tests/ui/doc.rs index 0be34aa6f53..b03f90681f2 100644 --- a/tests/ui/doc.rs +++ b/tests/ui/doc.rs @@ -153,3 +153,9 @@ fn issue_902_comment() {} /// } /// ``` fn issue_1469() {} + +/** + * This is a doc comment that should not be a list + *This would also be an error under a strict common mark interpretation + */ +fn issue_1920() {}