@@ -1883,12 +1883,80 @@ pub(crate) fn rewrite_assign_rhs<S: Into<String>, R: Rewrite>(
1883
1883
1884
1884
pub ( crate ) fn rewrite_assign_rhs_expr < R : Rewrite > (
1885
1885
context : & RewriteContext < ' _ > ,
1886
- lhs : & str ,
1886
+ mut lhs : String ,
1887
1887
ex : & R ,
1888
+ local : Option < & ast:: Local > ,
1888
1889
shape : Shape ,
1889
1890
rhs_tactics : RhsTactics ,
1890
- has_rhs_comment : bool ,
1891
1891
) -> 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
+
1892
1960
let last_line_width = last_line_width ( & lhs) . saturating_sub ( if lhs. contains ( '\n' ) {
1893
1961
shape. indent . width ( )
1894
1962
} else {
@@ -1900,14 +1968,15 @@ pub(crate) fn rewrite_assign_rhs_expr<R: Rewrite>(
1900
1968
offset : shape. offset + last_line_width + 1 ,
1901
1969
..shape
1902
1970
} ) ;
1903
- choose_rhs (
1971
+ let rhs = choose_rhs (
1904
1972
context,
1905
1973
ex,
1906
1974
orig_shape,
1907
1975
ex. rewrite ( context, orig_shape) ,
1908
1976
rhs_tactics,
1909
1977
has_rhs_comment,
1910
- )
1978
+ ) ?;
1979
+ Some ( lhs + & rhs)
1911
1980
}
1912
1981
1913
1982
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>(
1918
1987
rhs_tactics : RhsTactics ,
1919
1988
) -> Option < String > {
1920
1989
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)
1923
1991
}
1924
1992
1925
1993
fn choose_rhs < R : Rewrite > (
0 commit comments