Skip to content

Commit fd6e960

Browse files
fix: comments between lhs and rhs
1 parent 28be779 commit fd6e960

File tree

4 files changed

+69
-7
lines changed

4 files changed

+69
-7
lines changed

src/comment.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ impl<'a> CommentStyle<'a> {
112112
}
113113
}
114114

115-
fn comment_style(orig: &str, normalize_comments: bool) -> CommentStyle<'_> {
115+
pub(crate) fn comment_style(orig: &str, normalize_comments: bool) -> CommentStyle<'_> {
116116
if !normalize_comments {
117117
if orig.starts_with("/**") && !orig.starts_with("/**/") {
118118
CommentStyle::DoubleBullet

src/expr.rs

+35-6
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ use syntax::{ast, ptr};
99
use crate::chains::rewrite_chain;
1010
use crate::closures;
1111
use crate::comment::{
12-
combine_strs_with_missing_comments, contains_comment, recover_comment_removed, rewrite_comment,
13-
rewrite_missing_comment, CharClasses, FindUncommented,
12+
combine_strs_with_missing_comments, comment_style, contains_comment, recover_comment_removed,
13+
rewrite_comment, rewrite_missing_comment, CharClasses, FindUncommented,
1414
};
1515
use crate::config::lists::*;
1616
use crate::config::{Config, ControlBraceStyle, IndentStyle, Version};
@@ -808,7 +808,7 @@ impl<'a> ControlFlow<'a> {
808808
debug!("rewrite_pat_expr {:?} {:?} {:?}", shape, self.pat, expr);
809809

810810
let cond_shape = shape.offset_left(offset)?;
811-
if !self.pat.is_none() {
811+
if let Some(pat) = self.pat {
812812
let matcher = if self.matcher.is_empty() {
813813
self.matcher.to_owned()
814814
} else {
@@ -817,12 +817,41 @@ impl<'a> ControlFlow<'a> {
817817
let pat_shape = cond_shape
818818
.offset_left(matcher.len())?
819819
.sub_width(self.connector.len())?;
820-
let pat_string = if let Some(pat) = self.pat {
821-
pat.rewrite(context, pat_shape)?
820+
let pat_string = pat.rewrite(context, pat_shape)?;
821+
let comments_lo = context
822+
.snippet_provider
823+
.span_after(self.span, self.connector.trim());
824+
let missing_comments = if let Some(comment) =
825+
rewrite_missing_comment(mk_sp(comments_lo, expr.span.lo()), cond_shape, context)
826+
{
827+
if !self.connector.is_empty() && !comment.is_empty() {
828+
if comment_style(&comment, false).is_line_comment() || comment.contains("\n") {
829+
let newline = &pat_shape
830+
.indent
831+
.block_indent(context.config)
832+
.to_string_with_newline(context.config);
833+
// An extra space is added when the lhs and rhs are joined
834+
// so we need to remove one space from the end to ensure
835+
// the comment and rhs are aligned.
836+
let mut suffix = newline.as_ref().to_string();
837+
if !suffix.is_empty() {
838+
suffix.truncate(suffix.len() - 1);
839+
}
840+
format!("{}{}{}", newline, comment, suffix)
841+
} else {
842+
format!(" {}", comment)
843+
}
844+
} else {
845+
comment
846+
}
822847
} else {
823848
"".to_owned()
824849
};
825-
let result = format!("{}{}{}", matcher, pat_string, self.connector);
850+
851+
let result = format!(
852+
"{}{}{}{}",
853+
matcher, pat_string, self.connector, missing_comments
854+
);
826855
return rewrite_assign_rhs(context, result, expr, cond_shape);
827856
}
828857

tests/source/issue_3853.rs

+17
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,20 @@ fn issue_3853() {
3333
if let Some(ref /*mut*/ state) = foo {
3434
}
3535
}
36+
37+
fn double_slash_comment_between_lhs_and_rhs() {
38+
if let Some(e) =
39+
// self.foo.bar(e, tx)
40+
packet.transaction.state.committed
41+
{
42+
// body
43+
println!(
44+
"a2304712836123");
45+
}
46+
}
47+
48+
fn block_comment_between_lhs_and_rhs() {
49+
if let Some(ref /*def*/ mut /*abc*/ state)= /*abc*/foo{
50+
println!(
51+
"asdfasdfasdf"); }
52+
}

tests/target/issue_3853.rs

+16
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,19 @@ fn no_prefix_block_before_ident() {
2929
fn issue_3853() {
3030
if let Some(ref /*mut*/ state) = foo {}
3131
}
32+
33+
fn double_slash_comment_between_lhs_and_rhs() {
34+
if let Some(e) =
35+
// self.foo.bar(e, tx)
36+
packet.transaction.state.committed
37+
{
38+
// body
39+
println!("a2304712836123");
40+
}
41+
}
42+
43+
fn block_comment_between_lhs_and_rhs() {
44+
if let Some(ref /*def*/ mut /*abc*/ state) = /*abc*/ foo {
45+
println!("asdfasdfasdf");
46+
}
47+
}

0 commit comments

Comments
 (0)