diff --git a/src/comment.rs b/src/comment.rs index 4ced667ef78a..23d7dab3de97 100644 --- a/src/comment.rs +++ b/src/comment.rs @@ -20,6 +20,18 @@ use rewrite::RewriteContext; use string::{StringFormat, rewrite_string}; use utils::wrap_str; +fn is_custom_comment(comment: &str) -> bool { + if !comment.starts_with("//") { + false + } else { + if let Some(c) = comment.chars().nth(2) { + !c.is_alphanumeric() && !c.is_whitespace() + } else { + false + } + } +} + pub fn rewrite_comment(orig: &str, block_style: bool, width: usize, @@ -51,6 +63,12 @@ pub fn rewrite_comment(orig: &str, ("/// ", "", "/// ") } else if orig.starts_with("//!") || orig.starts_with("/*!") { ("//! ", "", "//! ") + } else if is_custom_comment(orig) { + if orig.chars().nth(3) == Some(' ') { + (&orig[0..4], "", &orig[0..4]) + } else { + (&orig[0..3], "", &orig[0..3]) + } } else { ("// ", "", "// ") }; @@ -138,6 +156,12 @@ fn left_trim_comment_line(line: &str) -> &str { if line.starts_with("//! ") || line.starts_with("/// ") || line.starts_with("/*! ") || line.starts_with("/** ") { &line[4..] + } else if is_custom_comment(line) { + if line.len() > 3 && line.chars().nth(3) == Some(' ') { + &line[4..] + } else { + &line[3..] + } } else if line.starts_with("/* ") || line.starts_with("// ") || line.starts_with("//!") || line.starts_with("///") || line.starts_with("** ") || line.starts_with("/*!") || diff --git a/tests/source/comment5.rs b/tests/source/comment5.rs new file mode 100644 index 000000000000..87a26f353a7f --- /dev/null +++ b/tests/source/comment5.rs @@ -0,0 +1,7 @@ +// rustfmt-wrap_comments: true + +//@ special comment +//@ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec adiam lectus. Sed sit amet ipsum mauris. Maecenas congue ligula ac quam +//@ +//@foo +fn test() {} \ No newline at end of file diff --git a/tests/target/comment5.rs b/tests/target/comment5.rs new file mode 100644 index 000000000000..7006b35efed2 --- /dev/null +++ b/tests/target/comment5.rs @@ -0,0 +1,8 @@ +// rustfmt-wrap_comments: true + +//@ special comment +//@ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec adiam +//@ lectus. Sed sit amet ipsum mauris. Maecenas congue ligula ac quam +//@ +//@ foo +fn test() {}