Preserve trailing whitespaces only for doc comment
This commit is contained in:
parent
fe30dab017
commit
296018afe7
@ -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))))
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user