about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorMarcus Klaas de Vries <mail@marcusklaas.nl>2015-09-26 18:25:05 +0200
committerMarcus Klaas de Vries <mail@marcusklaas.nl>2015-09-26 18:25:05 +0200
commitfd057ab59559449e9112925540e09fd6b75d676f (patch)
tree973e27e463e1f86e58f065796c1cfaec21fa4ba2 /src
parent9a5688f7c238c3c62d193972a93d7006cccfe8e4 (diff)
parentb2e7da0aa00297ff346fa15685995ee07e3b4c01 (diff)
Merge pull request #367 from nrc/self-alias
Format imports with aliases.
Diffstat (limited to 'src')
-rw-r--r--src/imports.rs44
1 files changed, 31 insertions, 13 deletions
diff --git a/src/imports.rs b/src/imports.rs
index f5f81015efb..64633d2d4ff 100644
--- a/src/imports.rs
+++ b/src/imports.rs
@@ -48,14 +48,16 @@ impl Rewrite for ast::ViewPath {
     }
 }
 
-fn rewrite_single_use_list(path_str: String, vpi: ast::PathListItem) -> String {
-    if let ast::PathListItem_::PathListIdent{ name, .. } = vpi.node {
+fn rewrite_single_use_list(path_str: String, vpi: &ast::PathListItem) -> String {
+    let path_item_str = if let ast::PathListItem_::PathListIdent{ name, .. } = vpi.node {
+        // A name.
         if path_str.is_empty() {
             name.to_string()
         } else {
             format!("{}::{}", path_str, name)
         }
     } else {
+        // `self`.
         if !path_str.is_empty() {
             path_str
         } else {
@@ -63,6 +65,31 @@ fn rewrite_single_use_list(path_str: String, vpi: ast::PathListItem) -> String {
             // leave it alone.
             "{self}".to_owned()
         }
+    };
+
+    append_alias(path_item_str, vpi)
+}
+
+fn rewrite_path_item(vpi: &&ast::PathListItem) -> String {
+    let path_item_str = match vpi.node {
+        ast::PathListItem_::PathListIdent{ name, .. } => {
+            name.to_string()
+        }
+        ast::PathListItem_::PathListMod{ .. } => {
+            "self".to_owned()
+        }
+    };
+
+    append_alias(path_item_str, vpi)
+}
+
+fn append_alias(path_item_str: String, vpi: &ast::PathListItem) -> String {
+    match vpi.node {
+        ast::PathListItem_::PathListIdent{ rename: Some(rename), .. } |
+        ast::PathListItem_::PathListMod{ rename: Some(rename), .. } => {
+            format!("{} as {}", path_item_str, rename)
+        }
+        _ => path_item_str,
     }
 }
 
@@ -80,7 +107,7 @@ pub fn rewrite_use_list(width: usize,
 
     match path_list.len() {
         0 => unreachable!(),
-        1 => return Some(rewrite_single_use_list(path_str, path_list[0])),
+        1 => return Some(rewrite_single_use_list(path_str, &path_list[0])),
         _ => (),
     }
 
@@ -117,16 +144,7 @@ pub fn rewrite_use_list(width: usize,
                                 "}",
                                 |vpi| vpi.span.lo,
                                 |vpi| vpi.span.hi,
-                                |vpi| {
-                                    match vpi.node {
-                                        ast::PathListItem_::PathListIdent{ name, .. } => {
-                                            name.to_string()
-                                        }
-                                        ast::PathListItem_::PathListMod{ .. } => {
-                                            "self".to_owned()
-                                        }
-                                    }
-                                },
+                                rewrite_path_item,
                                 span_after(span, "{", context.codemap),
                                 span.hi);
         items.extend(iter);