diff --git a/src/visitor.rs b/src/visitor.rs
index 375107c00ea..6e550c2f330 100644
--- a/src/visitor.rs
+++ b/src/visitor.rs
@@ -164,33 +164,7 @@ impl<'a, 'v> visit::Visitor<'v> for FmtVisitor<'a> {
 
         match item.node {
             ast::Item_::ItemUse(ref vp) => {
-                let vis = utils::format_visibility(item.vis);
-                let offset = self.block_indent + vis.len() + "use ".len();
-                let context = RewriteContext {
-                    codemap: self.codemap, config: self.config, block_indent: self.block_indent };
-                // 1 = ";"
-                match vp.rewrite(&context, self.config.max_width - offset - 1, offset) {
-                    Some(ref s) if s.len() == 0 => {
-                        // Format up to last newline
-                        let span = codemap::mk_sp(self.last_pos, item.span.lo);
-                        let span_end = match self.snippet(span).rfind('\n') {
-                            Some(offset) => self.last_pos + BytePos(offset as u32),
-                            None => item.span.lo
-                        };
-                        self.format_missing(span_end);
-                        self.last_pos = item.span.hi;
-                    }
-                    Some(ref s) => {
-                        let s = format!("{}use {};", vis, s);
-                        self.format_missing_with_indent(item.span.lo);
-                        self.changes.push_str_span(item.span, &s);
-                        self.last_pos = item.span.hi;
-                    }
-                    None => {
-                        self.format_missing_with_indent(item.span.lo);
-                    }
-                }
-                visit::walk_item(self, item);
+                self.format_import(item.vis, vp, item.span);
             }
             ast::Item_::ItemImpl(..) |
             ast::Item_::ItemTrait(..) => {
@@ -211,7 +185,6 @@ impl<'a, 'v> visit::Visitor<'v> for FmtVisitor<'a> {
                                   def,
                                   generics,
                                   item.span);
-                self.last_pos = item.span.hi;
             }
             ast::Item_::ItemEnum(ref def, ref generics) => {
                 self.format_missing_with_indent(item.span.lo);
@@ -408,4 +381,37 @@ impl<'a> FmtVisitor<'a> {
         self.last_pos = last_pos;
         self.block_indent = block_indent;
     }
+
+    fn format_import(&mut self, vis: ast::Visibility, vp: &ast::ViewPath, span: Span) {
+        let vis = utils::format_visibility(vis);
+        let offset = self.block_indent + vis.len() + "use ".len();
+        let context = RewriteContext {
+            codemap: self.codemap,
+            config: self.config,
+            block_indent: self.block_indent,
+        };
+        // 1 = ";"
+        match vp.rewrite(&context, self.config.max_width - offset - 1, offset) {
+            Some(ref s) if s.len() == 0 => {
+                // Format up to last newline
+                let prev_span = codemap::mk_sp(self.last_pos, span.lo);
+                let span_end = match self.snippet(prev_span).rfind('\n') {
+                    Some(offset) => self.last_pos + BytePos(offset as u32),
+                    None => span.lo
+                };
+                self.format_missing(span_end);
+                self.last_pos = span.hi;
+            }
+            Some(ref s) => {
+                let s = format!("{}use {};", vis, s);
+                self.format_missing_with_indent(span.lo);
+                self.changes.push_str_span(span, &s);
+                self.last_pos = span.hi;
+            }
+            None => {
+                self.format_missing_with_indent(span.lo);
+                self.format_missing(span.hi);
+            }
+        }
+    }
 }