fix: comments between lhs and rhs

This commit is contained in:
Caleb Cartwright 2019-10-17 20:04:05 -05:00
parent 28be77915f
commit fd6e960648
4 changed files with 69 additions and 7 deletions

View File

@ -112,7 +112,7 @@ impl<'a> CommentStyle<'a> {
}
}
fn comment_style(orig: &str, normalize_comments: bool) -> CommentStyle<'_> {
pub(crate) fn comment_style(orig: &str, normalize_comments: bool) -> CommentStyle<'_> {
if !normalize_comments {
if orig.starts_with("/**") && !orig.starts_with("/**/") {
CommentStyle::DoubleBullet

View File

@ -9,8 +9,8 @@ use syntax::{ast, ptr};
use crate::chains::rewrite_chain;
use crate::closures;
use crate::comment::{
combine_strs_with_missing_comments, contains_comment, recover_comment_removed, rewrite_comment,
rewrite_missing_comment, CharClasses, FindUncommented,
combine_strs_with_missing_comments, comment_style, contains_comment, recover_comment_removed,
rewrite_comment, rewrite_missing_comment, CharClasses, FindUncommented,
};
use crate::config::lists::*;
use crate::config::{Config, ControlBraceStyle, IndentStyle, Version};
@ -808,7 +808,7 @@ impl<'a> ControlFlow<'a> {
debug!("rewrite_pat_expr {:?} {:?} {:?}", shape, self.pat, expr);
let cond_shape = shape.offset_left(offset)?;
if !self.pat.is_none() {
if let Some(pat) = self.pat {
let matcher = if self.matcher.is_empty() {
self.matcher.to_owned()
} else {
@ -817,12 +817,41 @@ impl<'a> ControlFlow<'a> {
let pat_shape = cond_shape
.offset_left(matcher.len())?
.sub_width(self.connector.len())?;
let pat_string = if let Some(pat) = self.pat {
pat.rewrite(context, pat_shape)?
let pat_string = pat.rewrite(context, pat_shape)?;
let comments_lo = context
.snippet_provider
.span_after(self.span, self.connector.trim());
let missing_comments = if let Some(comment) =
rewrite_missing_comment(mk_sp(comments_lo, expr.span.lo()), cond_shape, context)
{
if !self.connector.is_empty() && !comment.is_empty() {
if comment_style(&comment, false).is_line_comment() || comment.contains("\n") {
let newline = &pat_shape
.indent
.block_indent(context.config)
.to_string_with_newline(context.config);
// An extra space is added when the lhs and rhs are joined
// so we need to remove one space from the end to ensure
// the comment and rhs are aligned.
let mut suffix = newline.as_ref().to_string();
if !suffix.is_empty() {
suffix.truncate(suffix.len() - 1);
}
format!("{}{}{}", newline, comment, suffix)
} else {
format!(" {}", comment)
}
} else {
comment
}
} else {
"".to_owned()
};
let result = format!("{}{}{}", matcher, pat_string, self.connector);
let result = format!(
"{}{}{}{}",
matcher, pat_string, self.connector, missing_comments
);
return rewrite_assign_rhs(context, result, expr, cond_shape);
}

View File

@ -33,3 +33,20 @@ fn issue_3853() {
if let Some(ref /*mut*/ state) = foo {
}
}
fn double_slash_comment_between_lhs_and_rhs() {
if let Some(e) =
// self.foo.bar(e, tx)
packet.transaction.state.committed
{
// body
println!(
"a2304712836123");
}
}
fn block_comment_between_lhs_and_rhs() {
if let Some(ref /*def*/ mut /*abc*/ state)= /*abc*/foo{
println!(
"asdfasdfasdf"); }
}

View File

@ -29,3 +29,19 @@ fn no_prefix_block_before_ident() {
fn issue_3853() {
if let Some(ref /*mut*/ state) = foo {}
}
fn double_slash_comment_between_lhs_and_rhs() {
if let Some(e) =
// self.foo.bar(e, tx)
packet.transaction.state.committed
{
// body
println!("a2304712836123");
}
}
fn block_comment_between_lhs_and_rhs() {
if let Some(ref /*def*/ mut /*abc*/ state) = /*abc*/ foo {
println!("asdfasdfasdf");
}
}