Skip to content

Commit

Permalink
fix: handle external mods imported via external->inline load hierarchy
Browse files Browse the repository at this point in the history
  • Loading branch information
calebcartwright committed Nov 4, 2021
1 parent e75c4d7 commit a5f8505
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 13 deletions.
4 changes: 3 additions & 1 deletion src/modules.rs
Original file line number Diff line number Diff line change
Expand Up @@ -321,7 +321,9 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
(Some(Cow::Borrowed(ast::ModKind::Loaded(items, _, _))), _) => {
self.visit_mod_from_ast(items)
}
(Some(Cow::Owned(..)), Cow::Owned(items)) => self.visit_mod_outside_ast(items),
(Some(Cow::Owned(ast::ModKind::Loaded(items, _, _))), _) | (_, Cow::Owned(items)) => {
self.visit_mod_outside_ast(items)
}
(_, _) => Ok(()),
}
}
Expand Down
42 changes: 30 additions & 12 deletions src/test/mod_resolver.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,21 +5,39 @@ use super::read_config;

use crate::{FileName, Input, Session};

#[test]
fn nested_out_of_line_mods_loaded() {
// See also https://github.com/rust-lang/rustfmt/issues/4874
let filename = "tests/mod-resolver/issue-4874/main.rs";
let input_file = PathBuf::from(filename);
fn verify_mod_resolution(input_file_name: &str, exp_misformatted_files: &[&str]) {
let input_file = PathBuf::from(input_file_name);
let config = read_config(&input_file);
let mut session = Session::<io::Stdout>::new(config, None);
let report = session
.format(Input::File(filename.into()))
.format(Input::File(input_file_name.into()))
.expect("Should not have had any execution errors");
let errors_by_file = &report.internal.borrow().0;
assert!(errors_by_file.contains_key(&FileName::Real(PathBuf::from(
"tests/mod-resolver/issue-4874/bar/baz.rs",
))));
assert!(errors_by_file.contains_key(&FileName::Real(PathBuf::from(
"tests/mod-resolver/issue-4874/foo/qux.rs",
))));
for exp_file in exp_misformatted_files {
assert!(errors_by_file.contains_key(&FileName::Real(PathBuf::from(exp_file))));
}
}

#[test]
fn nested_out_of_line_mods_loaded() {
// See also https://github.com/rust-lang/rustfmt/issues/4874
verify_mod_resolution(
"tests/mod-resolver/issue-4874/main.rs",
&[
"tests/mod-resolver/issue-4874/bar/baz.rs",
"tests/mod-resolver/issue-4874/foo/qux.rs",
],
);
}

#[test]
fn out_of_line_nested_inline_within_out_of_line() {
// See also https://github.com/rust-lang/rustfmt/issues/5063
verify_mod_resolution(
"tests/mod-resolver/issue-5063/main.rs",
&[
"tests/mod-resolver/issue-5063/foo/bar/baz.rs",
"tests/mod-resolver/issue-5063/foo.rs",
],
);
}
2 changes: 2 additions & 0 deletions tests/mod-resolver/issue-5063/foo.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
mod bar {
mod baz;}
1 change: 1 addition & 0 deletions tests/mod-resolver/issue-5063/foo/bar/baz.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
fn baz() { }
5 changes: 5 additions & 0 deletions tests/mod-resolver/issue-5063/main.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
fn main() {
println!("Hello, world!");
}

mod foo;

0 comments on commit a5f8505

Please sign in to comment.