@@ -15,8 +15,6 @@ use syntax::ast;
15
15
use syntax:: parse:: token;
16
16
use syntax:: print:: pprust;
17
17
18
-
19
- // TODO remove empty lists (if they're even possible)
20
18
// TODO (some day) remove unused imports, expand globs, compress many single imports into a list import
21
19
22
20
fn rewrite_single_use_list ( path_str : String , vpi : ast:: PathListItem , vis : & str ) -> String {
@@ -40,22 +38,25 @@ fn rewrite_single_use_list(path_str: String, vpi: ast::PathListItem, vis: &str)
40
38
41
39
impl < ' a > FmtVisitor < ' a > {
42
40
// Basically just pretty prints a multi-item import.
41
+ // Returns None when the import can be removed.
43
42
pub fn rewrite_use_list ( & mut self ,
44
43
block_indent : usize ,
45
44
one_line_budget : usize , // excluding indentation
46
45
multi_line_budget : usize ,
47
46
path : & ast:: Path ,
48
47
path_list : & [ ast:: PathListItem ] ,
49
- visibility : ast:: Visibility ) -> String {
48
+ visibility : ast:: Visibility ) -> Option < String > {
50
49
let path_str = pprust:: path_to_string ( path) ;
51
50
52
51
let vis = match visibility {
53
52
ast:: Public => "pub " ,
54
53
_ => ""
55
54
} ;
56
55
57
- if path_list. len ( ) == 1 {
58
- return rewrite_single_use_list ( path_str, path_list[ 0 ] , vis) ;
56
+ match path_list. len ( ) {
57
+ 0 => return None ,
58
+ 1 => return Some ( rewrite_single_use_list ( path_str, path_list[ 0 ] , vis) ) ,
59
+ _ => ( )
59
60
}
60
61
61
62
// 2 = ::
@@ -110,10 +111,10 @@ impl<'a> FmtVisitor<'a> {
110
111
ast:: PathListItem_ :: PathListMod { .. } => None ,
111
112
}
112
113
} ) ) . collect ( ) ;
113
- if path_str. len ( ) == 0 {
114
+ Some ( if path_str. len ( ) == 0 {
114
115
format ! ( "{}use {{{}}};" , vis, write_list( & items, & fmt) )
115
116
} else {
116
117
format ! ( "{}use {}::{{{}}};" , vis, path_str, write_list( & items, & fmt) )
117
- }
118
+ } )
118
119
}
119
120
}
0 commit comments