From 2661592d59a30a175f71667a9ad751f52e58b3eb Mon Sep 17 00:00:00 2001 From: Nick Cameron Date: Mon, 23 Nov 2015 15:22:00 +1300 Subject: [PATCH] Handle multiply-referenced files Fixes #645 --- src/lib.rs | 4 ++-- src/visitor.rs | 4 ++-- tests/target/mulit-file.rs | 10 ++++++++++ 3 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 tests/target/mulit-file.rs diff --git a/src/lib.rs b/src/lib.rs index 3923f6b742d..dd065a9939c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -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"); diff --git a/src/visitor.rs b/src/visitor.rs index fcc017c98f2..15db08f7942 100644 --- a/src/visitor.rs +++ b/src/visitor.rs @@ -463,8 +463,8 @@ impl<'a> FmtVisitor<'a> { } } - 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 index 00000000000..1f829b36f3f --- /dev/null +++ b/tests/target/mulit-file.rs @@ -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;