File tree Expand file tree Collapse file tree 2 files changed +74
-9
lines changed
Expand file tree Collapse file tree 2 files changed +74
-9
lines changed Original file line number Diff line number Diff line change @@ -106,12 +106,21 @@ trait Merge: AstNode + Clone {
106106 ) -> Option < Vec < Edit > > {
107107 let mut edits = Vec :: new ( ) ;
108108 let mut merged = self . clone ( ) ;
109+ let mut replace = self ;
110+ let mut update_replace = |item : Self | {
111+ if item. syntax ( ) . text_range ( ) . start ( ) < replace. syntax ( ) . text_range ( ) . start ( ) {
112+ std:: mem:: replace ( & mut replace, item)
113+ } else {
114+ item
115+ }
116+ } ;
117+
109118 for item in items {
110119 merged = merged. try_merge ( & item, cfg) ?;
111- edits. push ( Edit :: Remove ( item. into_either ( ) ) ) ;
120+ edits. push ( Edit :: Remove ( update_replace ( item) . into_either ( ) ) ) ;
112121 }
113122 if !edits. is_empty ( ) {
114- edits. push ( Edit :: replace ( self , merged) ) ;
123+ edits. push ( Edit :: replace ( replace , merged) ) ;
115124 Some ( edits)
116125 } else {
117126 None
@@ -563,6 +572,62 @@ use foo::{bar, baz};
563572 ) ;
564573 }
565574
575+ #[ test]
576+ fn mod_indent_whitespace ( ) {
577+ check_assist (
578+ merge_imports,
579+ r"
580+ mod tests {
581+ use foo$0::bar;
582+ use foo::baz;
583+ fn feature() {}
584+ }
585+ " ,
586+ r"
587+ mod tests {
588+ use foo::{bar, baz};
589+ fn feature() {}
590+ }
591+ " ,
592+ ) ;
593+ check_assist (
594+ merge_imports,
595+ r"
596+ mod tests {
597+ use foo$0::bar;
598+ use foo::baz;
599+
600+ fn feature() {}
601+ }
602+ " ,
603+ r"
604+ mod tests {
605+ use foo::{bar, baz};
606+
607+ fn feature() {}
608+ }
609+ " ,
610+ ) ;
611+ check_assist (
612+ merge_imports,
613+ r"
614+ mod tests {
615+ use foo::bar;
616+ use foo$0::baz;
617+
618+ fn feature() {}
619+ }
620+ " ,
621+ r"
622+ mod tests {
623+ use foo::{bar, baz};
624+
625+ fn feature() {}
626+ }
627+ " ,
628+ ) ;
629+ }
630+
566631 #[ test]
567632 fn works_with_trailing_comma ( ) {
568633 check_assist (
Original file line number Diff line number Diff line change @@ -214,18 +214,18 @@ impl Removable for ast::Use {
214214 fn remove ( & self , editor : & mut SyntaxEditor ) {
215215 let make = SyntaxFactory :: without_mappings ( ) ;
216216
217- let next_ws = self
217+ let prev_ws = self
218218 . syntax ( )
219- . next_sibling_or_token ( )
219+ . prev_sibling_or_token ( )
220220 . and_then ( |it| it. into_token ( ) )
221221 . and_then ( ast:: Whitespace :: cast) ;
222- if let Some ( next_ws ) = next_ws {
223- let ws_text = next_ws . syntax ( ) . text ( ) ;
224- if let Some ( rest) = ws_text. strip_prefix ( '\n' ) {
222+ if let Some ( prev_ws ) = prev_ws {
223+ let ws_text = prev_ws . syntax ( ) . text ( ) ;
224+ if let Some ( rest) = ws_text. trim_end_matches ( ' ' ) . strip_suffix ( '\n' ) {
225225 if rest. is_empty ( ) {
226- editor. delete ( next_ws . syntax ( ) ) ;
226+ editor. delete ( prev_ws . syntax ( ) ) ;
227227 } else {
228- editor. replace ( next_ws . syntax ( ) , make. whitespace ( rest) ) ;
228+ editor. replace ( prev_ws . syntax ( ) , make. whitespace ( rest) ) ;
229229 }
230230 }
231231 }
You can’t perform that action at this time.
0 commit comments