Skip to content

Commit 4522b75

Browse files
committed
Add handling of comments between assignment (withoyt let) lhs and rhs
1 parent d11fde8 commit 4522b75

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
@@ -1895,16 +1895,22 @@ fn rewrite_assignment(
18951895
op: Option<&ast::BinOp>,
18961896
shape: Shape,
18971897
) -> Option<String> {
1898-
let operator_str = match op {
1899-
Some(op) => context.snippet(op.span),
1900-
None => "=",
1898+
let span_hi = rhs.span.lo();
1899+
let (operator_str, span_lo) = match op {
1900+
Some(op) => (context.snippet(op.span), op.span.hi()),
1901+
None => {
1902+
let lo = lhs.span.hi();
1903+
let offset = context.snippet(mk_sp(lo, span_hi)).find_uncommented("=")? + 1;
1904+
("=", lo + BytePos(offset as u32))
1905+
}
19011906
};
19021907

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

1907-
rewrite_assign_rhs(context, lhs_str, rhs, shape)
1912+
let between_span = mk_sp(span_lo, span_hi);
1913+
rewrite_assign_rhs_with_span(context, lhs_str, rhs, shape, between_span)
19081914
}
19091915

19101916
/// Controls where to put the rhs.
@@ -1930,6 +1936,26 @@ pub(crate) fn rewrite_assign_rhs<S: Into<String>, R: Rewrite>(
19301936
rewrite_assign_rhs_with(context, lhs, ex, shape, RhsTactics::Default)
19311937
}
19321938

1939+
// The left hand side must contain everything up to, and including, the
1940+
// assignment operator.
1941+
pub(crate) fn rewrite_assign_rhs_with_span<S: Into<String>, R: Rewrite>(
1942+
context: &RewriteContext<'_>,
1943+
lhs: S,
1944+
ex: &R,
1945+
shape: Shape,
1946+
between_span: Span,
1947+
) -> Option<String> {
1948+
rewrite_assign_rhs_with_comments(
1949+
context,
1950+
lhs,
1951+
ex,
1952+
shape,
1953+
RhsTactics::Default,
1954+
between_span,
1955+
true,
1956+
)
1957+
}
1958+
19331959
pub(crate) fn rewrite_assign_rhs_expr<R: Rewrite>(
19341960
context: &RewriteContext<'_>,
19351961
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)