]> git.lizzy.rs Git - rust.git/commitdiff
Format glob imports
authorNick Cameron <ncameron@mozilla.com>
Tue, 7 Mar 2017 21:10:56 +0000 (10:10 +1300)
committerNick Cameron <ncameron@mozilla.com>
Tue, 7 Mar 2017 21:12:42 +0000 (10:12 +1300)
Fixes #1356

src/imports.rs
tests/source/imports.rs
tests/target/imports.rs

index 65d8366ea22d049bcdcee1780bc102d760cded12..cafba0bb2c5aa6ab18b9e73ef7c9816803584603 100644 (file)
@@ -132,6 +132,26 @@ fn compare_use_items(a: &ast::Item, b: &ast::Item) -> Option<Ordering> {
 // TODO (some day) remove unused imports, expand globs, compress many single
 // imports into a list import.
 
+fn rewrite_view_path_prefix(path: &ast::Path,
+                            context: &RewriteContext,
+                            shape: Shape)
+                            -> Option<String> {
+    let path_str = if path.segments
+           .last()
+           .unwrap()
+           .identifier
+           .to_string() == "self" && path.segments.len() > 1 {
+        let path = &ast::Path {
+                        span: path.span.clone(),
+                        segments: path.segments[..path.segments.len() - 1].to_owned(),
+                    };
+        try_opt!(rewrite_path(context, PathContext::Import, None, path, shape))
+    } else {
+        try_opt!(rewrite_path(context, PathContext::Import, None, path, shape))
+    };
+    Some(path_str)
+}
+
 impl Rewrite for ast::ViewPath {
     // Returns an empty string when the ViewPath is empty (like foo::bar::{})
     fn rewrite(&self, context: &RewriteContext, shape: Shape) -> Option<String> {
@@ -142,34 +162,17 @@ fn rewrite(&self, context: &RewriteContext, shape: Shape) -> Option<String> {
             ast::ViewPath_::ViewPathList(ref path, ref path_list) => {
                 rewrite_use_list(shape, path, path_list, self.span, context)
             }
-            ast::ViewPath_::ViewPathGlob(_) => None,
+            ast::ViewPath_::ViewPathGlob(ref path) => {
+                // 4 = "::*".len()
+                let prefix_shape = try_opt!(shape.sub_width(3));
+                let path_str = try_opt!(rewrite_view_path_prefix(path, context, prefix_shape));
+                Some(format!("{}::*", path_str))
+            }
             ast::ViewPath_::ViewPathSimple(ident, ref path) => {
                 let ident_str = ident.to_string();
                 // 4 = " as ".len()
-                let budget = try_opt!(shape.width.checked_sub(ident_str.len() + 4));
-
-                let path_str = if path.segments
-                       .last()
-                       .unwrap()
-                       .identifier
-                       .to_string() == "self" &&
-                                  path.segments.len() > 1 {
-                    let path = &ast::Path {
-                                    span: path.span.clone(),
-                                    segments: path.segments[..path.segments.len() - 1].to_owned(),
-                                };
-                    try_opt!(rewrite_path(context,
-                                          PathContext::Import,
-                                          None,
-                                          &path,
-                                          Shape::legacy(budget, shape.indent)))
-                } else {
-                    try_opt!(rewrite_path(context,
-                                          PathContext::Import,
-                                          None,
-                                          path,
-                                          Shape::legacy(budget, shape.indent)))
-                };
+                let prefix_shape = try_opt!(shape.sub_width(ident_str.len() + 4));
+                let path_str = try_opt!(rewrite_view_path_prefix(path, context, prefix_shape));
 
                 Some(if path.segments
                             .last()
index 90cb78c2d1f38c3d38e278b22d82b257a598b933..91016f8cb7095ea460801c936fb2c1fca9832382 100644 (file)
@@ -64,3 +64,7 @@ fn test() {
 use ::foo::{Bar, Baz};
 use ::{Foo};
 use ::{Bar, Baz};
+
+// spaces used to cause glob imports to disappear (#1356)
+use super:: * ;
+use foo::issue_1356:: * ;
index 570b5225da7c3db73f0416a3c05fe316c5fc36ca..1f4a692d0cc7e4b1b78cf544702289bfab0f7b70 100644 (file)
@@ -59,3 +59,7 @@ fn test() {
 use foo::{Bar, Baz};
 use Foo;
 use {Bar, Baz};
+
+// spaces used to cause glob imports to disappear (#1356)
+use super::*;
+use foo::issue_1356::*;