@@ -1883,12 +1883,80 @@ pub(crate) fn rewrite_assign_rhs<S: Into<String>, R: Rewrite>(
18831883
18841884pub ( 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
19131982pub ( 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
19251993fn choose_rhs < R : Rewrite > (
0 commit comments