Skip to content

Commit ddd3b46

Browse files
davidBar-Oncalebcartwright
authored andcommitted
Add handling of comments between assignment (withoyt let) lhs and rhs
1 parent 238b662 commit ddd3b46

File tree

3 files changed

+137
-4
lines changed

3 files changed

+137
-4
lines changed

src/formatting/expr.rs

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1898,16 +1898,22 @@ fn rewrite_assignment(
18981898
op: Option<&ast::BinOp>,
18991899
shape: Shape,
19001900
) -> Option<String> {
1901-
let operator_str = match op {
1902-
Some(op) => context.snippet(op.span),
1903-
None => "=",
1901+
let span_hi = rhs.span.lo();
1902+
let (operator_str, span_lo) = match op {
1903+
Some(op) => (context.snippet(op.span), op.span.hi()),
1904+
None => {
1905+
let lo = lhs.span.hi();
1906+
let offset = context.snippet(mk_sp(lo, span_hi)).find_uncommented("=")? + 1;
1907+
("=", lo + BytePos(offset as u32))
1908+
}
19041909
};
19051910

19061911
// 1 = space between lhs and operator.
19071912
let lhs_shape = shape.sub_width(operator_str.len() + 1)?;
19081913
let lhs_str = format!("{} {}", lhs.rewrite(context, lhs_shape)?, operator_str);
19091914

1910-
rewrite_assign_rhs(context, lhs_str, rhs, shape)
1915+
let between_span = mk_sp(span_lo, span_hi);
1916+
rewrite_assign_rhs_with_span(context, lhs_str, rhs, shape, between_span)
19111917
}
19121918

19131919
/// Controls where to put the rhs.
@@ -1933,6 +1939,26 @@ pub(crate) fn rewrite_assign_rhs<S: Into<String>, R: Rewrite>(
19331939
rewrite_assign_rhs_with(context, lhs, ex, shape, RhsTactics::Default)
19341940
}
19351941

1942+
// The left hand side must contain everything up to, and including, the
1943+
// assignment operator.
1944+
pub(crate) fn rewrite_assign_rhs_with_span<S: Into<String>, R: Rewrite>(
1945+
context: &RewriteContext<'_>,
1946+
lhs: S,
1947+
ex: &R,
1948+
shape: Shape,
1949+
between_span: Span,
1950+
) -> Option<String> {
1951+
rewrite_assign_rhs_with_comments(
1952+
context,
1953+
lhs,
1954+
ex,
1955+
shape,
1956+
RhsTactics::Default,
1957+
between_span,
1958+
true,
1959+
)
1960+
}
1961+
19361962
pub(crate) fn rewrite_assign_rhs_expr<R: Rewrite>(
19371963
context: &RewriteContext<'_>,
19381964
lhs: &str,
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
// "=" Assignemnt
2+
fn main () {
3+
let var = first;
4+
var = second;
5+
}
6+
fn main () {
7+
let var = /* Block comment */ first;
8+
var = /* Block comment */ second;
9+
}
10+
fn main () {
11+
let var = // Line comment
12+
first;
13+
var = // Line comment
14+
second;
15+
}
16+
fn main () {
17+
let var = /* Block comment longgggggggggggggggggggggggggggggggggggggggggggggggggggggggg */ first;
18+
var = /* Block comment longgggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg */ second;
19+
}
20+
fn main () {
21+
let var = /* Block comment longgggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg */ first;
22+
var = /* Block comment longgggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg */ second;
23+
}
24+
25+
// BinOp Assigment
26+
fn main () {
27+
let var = first;
28+
var += second;
29+
}
30+
fn main () {
31+
let var = /* Block comment */ first;
32+
var -= /* Block comment */ second;
33+
}
34+
fn main () {
35+
let var = // Line comment
36+
first;
37+
var *= // Line comment
38+
second;
39+
}
40+
fn main () {
41+
let var = /* Block comment longgggggggggggggggggggggggggggggggggggggggggggggggggggggggg */ first;
42+
var /= /* Block comment longgggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg */ second;
43+
}
44+
fn main () {
45+
let var = /* Block comment longgggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg */ first;
46+
var /= /* Block comment longgggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg */ second;
47+
}
48+
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
// "=" Assignemnt
2+
fn main() {
3+
let var = first;
4+
var = second;
5+
}
6+
fn main() {
7+
let var = /* Block comment */ first;
8+
var = /* Block comment */ second;
9+
}
10+
fn main() {
11+
let var = // Line comment
12+
first;
13+
var = // Line comment
14+
second;
15+
}
16+
fn main() {
17+
let var = /* Block comment longgggggggggggggggggggggggggggggggggggggggggggggggggggggggg */
18+
first;
19+
var = /* Block comment longgggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg */
20+
second;
21+
}
22+
fn main() {
23+
let var =
24+
/* Block comment longgggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg */
25+
first;
26+
var =
27+
/* Block comment longgggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg */
28+
second;
29+
}
30+
31+
// BinOp Assigment
32+
fn main() {
33+
let var = first;
34+
var += second;
35+
}
36+
fn main() {
37+
let var = /* Block comment */ first;
38+
var -= /* Block comment */ second;
39+
}
40+
fn main() {
41+
let var = // Line comment
42+
first;
43+
var *= // Line comment
44+
second;
45+
}
46+
fn main() {
47+
let var = /* Block comment longgggggggggggggggggggggggggggggggggggggggggggggggggggggggg */
48+
first;
49+
var /= /* Block comment longgggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg */
50+
second;
51+
}
52+
fn main() {
53+
let var =
54+
/* Block comment longgggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg */
55+
first;
56+
var /=
57+
/* Block comment longgggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg */
58+
second;
59+
}

0 commit comments

Comments
 (0)