]> git.lizzy.rs Git - rust.git/commitdiff
Add custom comments (#1179)
authorFlorian Gilcher <florian.gilcher@asquera.de>
Thu, 29 Sep 2016 19:34:46 +0000 (21:34 +0200)
committerNick Cameron <nrc@ncameron.org>
Thu, 29 Sep 2016 19:34:46 +0000 (08:34 +1300)
* Add custom comments

This allows users to use custom comments such as

```
//@ this is a custom comment
//@ with multiple lines
```

without having them destroyed by rustfmt.

* Fix issues with empty lines

* Check non-whitespace right after custom comments

src/comment.rs
tests/source/comment5.rs [new file with mode: 0644]
tests/target/comment5.rs [new file with mode: 0644]

index 4ced667ef78a20409be0503412ceae7cbd63a622..23d7dab3de9725ae43183908a4a962a156cab645 100644 (file)
 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 (file)
index 0000000..87a26f3
--- /dev/null
@@ -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 (file)
index 0000000..7006b35
--- /dev/null
@@ -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() {}