]> git.lizzy.rs Git - rust.git/commitdiff
Handle multiply-referenced files
authorNick Cameron <ncameron@mozilla.com>
Mon, 23 Nov 2015 02:22:00 +0000 (15:22 +1300)
committerNick Cameron <ncameron@mozilla.com>
Mon, 23 Nov 2015 02:22:00 +0000 (15:22 +1300)
Fixes #645

src/lib.rs
src/visitor.rs
tests/target/mulit-file.rs [new file with mode: 0644]

index 3923f6b742db3e5bfa98946d76f8b3bdca1c294f..dd065a9939c2d655018c1b411aa3892f0212ce9c 100644 (file)
@@ -298,7 +298,7 @@ fn fmt_ast(krate: &ast::Crate,
             println!("Formatting {}", path);
         }
         let mut visitor = FmtVisitor::from_codemap(parse_session, config, Some(mode));
-        visitor.format_separate_mod(module, path);
+        visitor.format_separate_mod(module);
         file_map.insert(path.to_owned(), visitor.buffer);
     }
     file_map
@@ -404,7 +404,7 @@ pub fn format_string(input: String, config: &Config, mode: WriteMode) -> FileMap
 
     // do the actual formatting
     let mut visitor = FmtVisitor::from_codemap(&parse_session, config, Some(mode));
-    visitor.format_separate_mod(&krate.module, path);
+    visitor.format_separate_mod(&krate.module);
 
     // append final newline
     visitor.buffer.push_str("\n");
index fcc017c98f2b351a9f8a65807e37ca9288edf47e..15db08f79421ed708481ab8e4115bdaf02913f1d 100644 (file)
@@ -463,8 +463,8 @@ fn format_mod(&mut self, m: &ast::Mod, vis: ast::Visibility, s: Span, ident: ast
         }
     }
 
-    pub fn format_separate_mod(&mut self, m: &ast::Mod, filename: &str) {
-        let filemap = self.codemap.get_filemap(filename);
+    pub fn format_separate_mod(&mut self, m: &ast::Mod) {
+        let filemap = self.codemap.lookup_char_pos(m.inner.lo).file;
         self.last_pos = filemap.start_pos;
         self.block_indent = Indent::empty();
         self.walk_mod_items(m);
diff --git a/tests/target/mulit-file.rs b/tests/target/mulit-file.rs
new file mode 100644 (file)
index 0000000..1f829b3
--- /dev/null
@@ -0,0 +1,10 @@
+// Tests that where a single file is referred to in multiple places, we don't
+// crash.
+
+#[cfg(all(foo))]
+#[path = "closure.rs"]
+pub mod imp;
+
+#[cfg(all(bar))]
+#[path = "closure.rs"]
+pub mod imp;