]> git.lizzy.rs Git - rust.git/commitdiff
Preserve trailing whitespaces only for doc comment
authortopecongiro <seuchida@gmail.com>
Thu, 15 Feb 2018 07:34:22 +0000 (16:34 +0900)
committertopecongiro <seuchida@gmail.com>
Thu, 15 Feb 2018 07:34:22 +0000 (16:34 +0900)
rustfmt-core/src/comment.rs
rustfmt-core/src/visitor.rs
rustfmt-core/tests/source/markdown-comment.rs
rustfmt-core/tests/target/markdown-comment.rs

index ccb69442ff7d830189111959be836f85bf303a7a..523282396d04c59be6a2dde9fb7f163eaadb5ebe 100644 (file)
@@ -214,11 +214,25 @@ pub fn combine_strs_with_missing_comments(
     ))
 }
 
+pub fn rewrite_doc_comment(orig: &str, shape: Shape, config: &Config) -> Option<String> {
+    _rewrite_comment(orig, false, shape, config, true)
+}
+
 pub fn rewrite_comment(
     orig: &str,
     block_style: bool,
     shape: Shape,
     config: &Config,
+) -> Option<String> {
+    _rewrite_comment(orig, block_style, shape, config, false)
+}
+
+fn _rewrite_comment(
+    orig: &str,
+    block_style: bool,
+    shape: Shape,
+    config: &Config,
+    is_doc_comment: bool,
 ) -> Option<String> {
     // If there are lines without a starting sigil, we won't format them correctly
     // so in that case we won't even re-align (if !config.normalize_comments()) and
@@ -231,7 +245,7 @@ pub fn rewrite_comment(
         return Some(orig.to_owned());
     }
     if !config.normalize_comments() && !config.wrap_comments() {
-        return light_rewrite_comment(orig, shape.indent, config);
+        return light_rewrite_comment(orig, shape.indent, config, is_doc_comment);
     }
 
     identify_comment(orig, block_style, shape, config)
@@ -495,8 +509,10 @@ pub fn recover_missing_comment_in_span(
 }
 
 /// Trim trailing whitespaces unless they consist of two whitespaces.
-fn trim_right_unless_two_whitespaces(s: &str) -> &str {
-    if s.ends_with("  ") && !s.chars().rev().nth(2).map_or(true, char::is_whitespace) {
+fn trim_right_unless_two_whitespaces(s: &str, is_doc_comment: bool) -> &str {
+    if is_doc_comment && s.ends_with("  ")
+        && !s.chars().rev().nth(2).map_or(true, char::is_whitespace)
+    {
         s
     } else {
         s.trim_right()
@@ -504,7 +520,12 @@ fn trim_right_unless_two_whitespaces(s: &str) -> &str {
 }
 
 /// Trims whitespace and aligns to indent, but otherwise does not change comments.
-fn light_rewrite_comment(orig: &str, offset: Indent, config: &Config) -> Option<String> {
+fn light_rewrite_comment(
+    orig: &str,
+    offset: Indent,
+    config: &Config,
+    is_doc_comment: bool,
+) -> Option<String> {
     let lines: Vec<&str> = orig.lines()
         .map(|l| {
             // This is basically just l.trim(), but in the case that a line starts
@@ -521,7 +542,7 @@ fn light_rewrite_comment(orig: &str, offset: Indent, config: &Config) -> Option<
                 ""
             };
             // Preserve markdown's double-space line break syntax.
-            trim_right_unless_two_whitespaces(left_trimmed)
+            trim_right_unless_two_whitespaces(left_trimmed, is_doc_comment)
         })
         .collect();
     Some(lines.join(&format!("\n{}", offset.to_string(config))))
index 0a0d59d0f02c8db2bc99799d294c26b78d7a7e4e..2d10be39d092b21dca45c8a7921ba47099691b88 100644 (file)
@@ -19,7 +19,7 @@
 use codemap::{LineRangeUtils, SpanUtils};
 use comment::{combine_strs_with_missing_comments, contains_comment, CodeCharKind,
               CommentCodeSlices, FindUncommented};
-use comment::rewrite_comment;
+use comment::rewrite_doc_comment;
 use config::{BraceStyle, Config};
 use expr::rewrite_literal;
 use items::{format_impl, format_trait, format_trait_alias, rewrite_associated_impl_type,
@@ -892,7 +892,7 @@ fn rewrite(&self, context: &RewriteContext, shape: Shape) -> Option<String> {
                     .unwrap_or(0),
                 ..shape
             };
-            rewrite_comment(snippet, false, doc_shape, context.config)
+            rewrite_doc_comment(snippet, doc_shape, context.config)
         } else {
             if contains_comment(snippet) {
                 return Some(snippet.to_owned());
@@ -957,7 +957,7 @@ fn rewrite_first_group_attrs(
             .join("\n");
         return Some((
             sugared_docs.len(),
-            rewrite_comment(&snippet, false, shape, context.config)?,
+            rewrite_doc_comment(&snippet, shape, context.config)?,
         ));
     }
     // Rewrite `#[derive(..)]`s.
index 265f97faa0f75427ec2752630d43be54e3a3d323..c3633141ba5d59b32feec43b2b62cb2935ef36e4 100644 (file)
@@ -1,8 +1,12 @@
+// Preserve two trailing whitespaces in doc comment,
+// but trim any whitespaces in normal comment.
+
 //! hello world  
 //! hello world 
 
 /// hello world  
 /// hello world 
+/// hello world  
 fn foo() {
     // hello world  
     // hello world 
index 20dc7260d2f353f8ceea17a429a052f23c9c42d9..5c4c413bddf5959b51b3b22091cf3dde6c6c1738 100644 (file)
@@ -1,10 +1,14 @@
+// Preserve two trailing whitespaces in doc comment,
+// but trim any whitespaces in normal comment.
+
 //! hello world  
 //! hello world
 
 /// hello world  
 /// hello world
+/// hello world  
 fn foo() {
-    // hello world  
+    // hello world
     // hello world
     let x = 3;
     println!("x = {}", x);