Skip to content

Commit e7c76d6

Browse files
committed
[Should revert?] transfer logic
1 parent b188f8a commit e7c76d6

File tree

2 files changed

+77
-63
lines changed

2 files changed

+77
-63
lines changed

src/expr.rs

Lines changed: 74 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1883,12 +1883,80 @@ pub(crate) fn rewrite_assign_rhs<S: Into<String>, R: Rewrite>(
18831883

18841884
pub(crate) fn rewrite_assign_rhs_expr<R: Rewrite>(
18851885
context: &RewriteContext<'_>,
1886-
lhs: &str,
1886+
mut lhs: String,
18871887
ex: &R,
1888+
local: Option<&ast::Local>,
18881889
shape: Shape,
18891890
rhs_tactics: RhsTactics,
1890-
has_rhs_comment: bool,
18911891
) -> Option<String> {
1892+
let mut has_rhs_comment = false;
1893+
1894+
if let Some(ast::Local {
1895+
ref pat,
1896+
ref ty,
1897+
ref init,
1898+
ref span,
1899+
..
1900+
}) = local
1901+
{
1902+
let base_span = if let Some(ref ty) = ty {
1903+
mk_sp(ty.span.hi(), span.hi())
1904+
} else {
1905+
mk_sp(pat.span.hi(), span.hi())
1906+
};
1907+
1908+
if let Some(ex) = init {
1909+
if let Some(offset) = context.snippet(base_span).find_uncommented("=") {
1910+
let base_span_lo = base_span.lo();
1911+
1912+
let assign_lo = base_span_lo + BytePos(offset as u32);
1913+
let comment_start_pos = if let Some(ref ty) = ty {
1914+
ty.span.hi()
1915+
} else {
1916+
pat.span.hi()
1917+
};
1918+
let comment_before_assign =
1919+
context.snippet(mk_sp(comment_start_pos, assign_lo)).trim();
1920+
1921+
let assign_hi = base_span_lo + BytePos((offset + 1) as u32);
1922+
let rhs_span_lo = ex.span.lo();
1923+
let comment_end_pos = if ex.attrs.is_empty() {
1924+
rhs_span_lo
1925+
} else {
1926+
let attr_span_lo = ex.attrs.first().unwrap().span.lo();
1927+
// for the case using block
1928+
// ex. let x = { #![my_attr]do_something(); }
1929+
if rhs_span_lo < attr_span_lo {
1930+
rhs_span_lo
1931+
} else {
1932+
attr_span_lo
1933+
}
1934+
};
1935+
let comment_after_assign =
1936+
context.snippet(mk_sp(assign_hi, comment_end_pos)).trim();
1937+
1938+
if !comment_before_assign.is_empty() {
1939+
let pat_shape = shape.offset_left(4)?;
1940+
// 1 = ;
1941+
// let pat_shape = pat_shape.sub_width(1)?;
1942+
let new_indent_str = &pat_shape
1943+
.block_indent(0)
1944+
.to_string_with_newline(context.config);
1945+
lhs = format!("{}{}{}", comment_before_assign, new_indent_str, lhs);
1946+
}
1947+
1948+
if !comment_after_assign.is_empty() {
1949+
let new_indent_str =
1950+
&shape.block_indent(0).to_string_with_newline(context.config);
1951+
lhs.push_str(new_indent_str);
1952+
lhs.push_str(comment_after_assign);
1953+
lhs.push_str(new_indent_str);
1954+
has_rhs_comment = true;
1955+
}
1956+
}
1957+
}
1958+
}
1959+
18921960
let last_line_width = last_line_width(&lhs).saturating_sub(if lhs.contains('\n') {
18931961
shape.indent.width()
18941962
} else {
@@ -1900,14 +1968,15 @@ pub(crate) fn rewrite_assign_rhs_expr<R: Rewrite>(
19001968
offset: shape.offset + last_line_width + 1,
19011969
..shape
19021970
});
1903-
choose_rhs(
1971+
let rhs = choose_rhs(
19041972
context,
19051973
ex,
19061974
orig_shape,
19071975
ex.rewrite(context, orig_shape),
19081976
rhs_tactics,
19091977
has_rhs_comment,
1910-
)
1978+
)?;
1979+
Some(lhs + &rhs)
19111980
}
19121981

19131982
pub(crate) fn rewrite_assign_rhs_with<S: Into<String>, R: Rewrite>(
@@ -1918,8 +1987,7 @@ pub(crate) fn rewrite_assign_rhs_with<S: Into<String>, R: Rewrite>(
19181987
rhs_tactics: RhsTactics,
19191988
) -> Option<String> {
19201989
let lhs = lhs.into();
1921-
let rhs = rewrite_assign_rhs_expr(context, &lhs, ex, shape, rhs_tactics, false)?;
1922-
Some(lhs + &rhs)
1990+
rewrite_assign_rhs_expr(context, lhs, ex, None, shape, rhs_tactics)
19231991
}
19241992

19251993
fn choose_rhs<R: Rewrite>(

src/items.rs

Lines changed: 3 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -111,71 +111,17 @@ impl Rewrite for ast::Local {
111111

112112
result.push_str(&infix);
113113

114-
let mut has_comment_between_assign_and_rhs = false;
115114
if let Some(ref ex) = self.init {
116-
let base_span = if let Some(ref ty) = self.ty {
117-
mk_sp(ty.span.hi(), self.span.hi())
118-
} else {
119-
mk_sp(self.pat.span.hi(), self.span.hi())
120-
};
121-
122-
if let Some(offset) = context.snippet(base_span).find_uncommented("=") {
123-
let base_span_lo = base_span.lo();
124-
125-
let assign_lo = base_span_lo + BytePos(offset as u32);
126-
let comment_start_pos = if let Some(ref ty) = self.ty {
127-
ty.span.hi()
128-
} else {
129-
self.pat.span.hi()
130-
};
131-
let comment_before_assign =
132-
context.snippet(mk_sp(comment_start_pos, assign_lo)).trim();
133-
134-
let assign_hi = base_span_lo + BytePos((offset + 1) as u32);
135-
let rhs_span_lo = ex.span.lo();
136-
let comment_end_pos = if ex.attrs.is_empty() {
137-
rhs_span_lo
138-
} else {
139-
let attr_span_lo = ex.attrs.first().unwrap().span.lo();
140-
// for the case using block
141-
// ex. let x = { #![my_attr]do_something(); }
142-
if rhs_span_lo < attr_span_lo {
143-
rhs_span_lo
144-
} else {
145-
attr_span_lo
146-
}
147-
};
148-
let comment_after_assign =
149-
context.snippet(mk_sp(assign_hi, comment_end_pos)).trim();
150-
151-
if !comment_before_assign.is_empty() {
152-
let new_indent_str = &pat_shape
153-
.block_indent(0)
154-
.to_string_with_newline(context.config);
155-
result = format!("{}{}{}", comment_before_assign, new_indent_str, result);
156-
}
157-
158-
if !comment_after_assign.is_empty() {
159-
let new_indent_str =
160-
&shape.block_indent(0).to_string_with_newline(context.config);
161-
result.push_str(new_indent_str);
162-
result.push_str(comment_after_assign);
163-
result.push_str(new_indent_str);
164-
has_comment_between_assign_and_rhs = true;
165-
}
166-
}
167-
168115
// 1 = trailing semicolon;
169116
let nested_shape = shape.sub_width(1)?;
170-
let rhs = rewrite_assign_rhs_expr(
117+
result = rewrite_assign_rhs_expr(
171118
context,
172-
&result,
119+
result,
173120
&**ex,
121+
Some(&self),
174122
nested_shape,
175123
RhsTactics::Default,
176-
has_comment_between_assign_and_rhs,
177124
)?;
178-
result = result + &rhs;
179125
}
180126

181127
result.push(';');

0 commit comments

Comments
 (0)