@@ -166,23 +166,16 @@ pub(crate) fn merge_use_trees(use_trees: Vec<UseTree>) -> Vec<UseTree> {
166
166
}
167
167
168
168
for flattened in use_tree. flatten ( ) {
169
- merge_use_trees_inner ( & mut result, flattened) ;
169
+ if let Some ( tree) = result. iter_mut ( ) . find ( |tree| tree. share_prefix ( & flattened) ) {
170
+ tree. merge ( & flattened) ;
171
+ } else {
172
+ result. push ( flattened) ;
173
+ }
170
174
}
171
175
}
172
176
result
173
177
}
174
178
175
- fn merge_use_trees_inner ( trees : & mut Vec < UseTree > , use_tree : UseTree ) {
176
- for tree in trees. iter_mut ( ) {
177
- if tree. share_prefix ( & use_tree) {
178
- tree. merge ( & use_tree) ;
179
- return ;
180
- }
181
- }
182
-
183
- trees. push ( use_tree) ;
184
- }
185
-
186
179
impl fmt:: Debug for UseTree {
187
180
fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
188
181
fmt:: Display :: fmt ( self , f)
@@ -594,7 +587,16 @@ fn merge_rest(a: &[UseSegment], b: &[UseSegment], mut len: usize) -> Option<Vec<
594
587
}
595
588
if a. len ( ) != len && b. len ( ) != len {
596
589
if let UseSegment :: List ( mut list) = a[ len] . clone ( ) {
597
- merge_use_trees_inner ( & mut list, UseTree :: from_path ( b[ len..] . to_vec ( ) , DUMMY_SP ) ) ;
590
+ let b_rest = UseTree :: from_path ( b[ len..] . to_vec ( ) , DUMMY_SP ) ;
591
+ if let Some ( a_rest) = list. iter_mut ( ) . find ( |a_rest| a_rest. share_prefix ( & b_rest) ) {
592
+ if a_rest. path . len ( ) > 1 && b_rest. path . len ( ) > 1 {
593
+ a_rest. merge ( & b_rest) ;
594
+ } else if a_rest. path . len ( ) > 1 || b_rest. path . len ( ) > 1 {
595
+ list. push ( b_rest) ;
596
+ }
597
+ } else {
598
+ list. push ( b_rest) ;
599
+ }
598
600
list. sort ( ) ;
599
601
let mut new_path = b[ ..len] . to_vec ( ) ;
600
602
new_path. push ( UseSegment :: List ( list) ) ;
@@ -988,7 +990,7 @@ mod test {
988
990
test_merge ! ( [ "a::b::{c, d}" , "a::b::{e, f}" ] , [ "a::b::{c, d, e, f}" ] ) ;
989
991
test_merge ! ( [ "a::b::c" , "a::b" ] , [ "a::{b, b::c}" ] ) ;
990
992
test_merge ! ( [ "a::b" , "a::b" ] , [ "a::b" ] ) ;
991
- test_merge ! ( [ "a" , "a::b" , "a::b::c" ] , [ "a::{self, b::{self, c} }" ] ) ;
993
+ test_merge ! ( [ "a" , "a::b" , "a::b::c" ] , [ "a::{self, b, b::c }" ] ) ;
992
994
test_merge ! (
993
995
[ "a::{b::{self, c}, d::e}" , "a::d::f" ] ,
994
996
[ "a::{b::{self, c}, d::{e, f}}" ]
0 commit comments