Skip to content

Commit a5f8505

Browse files
fix: handle external mods imported via external->inline load hierarchy
1 parent e75c4d7 commit a5f8505

File tree

5 files changed

+41
-13
lines changed

5 files changed

+41
-13
lines changed

src/modules.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,9 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
321321
(Some(Cow::Borrowed(ast::ModKind::Loaded(items, _, _))), _) => {
322322
self.visit_mod_from_ast(items)
323323
}
324-
(Some(Cow::Owned(..)), Cow::Owned(items)) => self.visit_mod_outside_ast(items),
324+
(Some(Cow::Owned(ast::ModKind::Loaded(items, _, _))), _) | (_, Cow::Owned(items)) => {
325+
self.visit_mod_outside_ast(items)
326+
}
325327
(_, _) => Ok(()),
326328
}
327329
}

src/test/mod_resolver.rs

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,39 @@ use super::read_config;
55

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

8-
#[test]
9-
fn nested_out_of_line_mods_loaded() {
10-
// See also https://github.com/rust-lang/rustfmt/issues/4874
11-
let filename = "tests/mod-resolver/issue-4874/main.rs";
12-
let input_file = PathBuf::from(filename);
8+
fn verify_mod_resolution(input_file_name: &str, exp_misformatted_files: &[&str]) {
9+
let input_file = PathBuf::from(input_file_name);
1310
let config = read_config(&input_file);
1411
let mut session = Session::<io::Stdout>::new(config, None);
1512
let report = session
16-
.format(Input::File(filename.into()))
13+
.format(Input::File(input_file_name.into()))
1714
.expect("Should not have had any execution errors");
1815
let errors_by_file = &report.internal.borrow().0;
19-
assert!(errors_by_file.contains_key(&FileName::Real(PathBuf::from(
20-
"tests/mod-resolver/issue-4874/bar/baz.rs",
21-
))));
22-
assert!(errors_by_file.contains_key(&FileName::Real(PathBuf::from(
23-
"tests/mod-resolver/issue-4874/foo/qux.rs",
24-
))));
16+
for exp_file in exp_misformatted_files {
17+
assert!(errors_by_file.contains_key(&FileName::Real(PathBuf::from(exp_file))));
18+
}
19+
}
20+
21+
#[test]
22+
fn nested_out_of_line_mods_loaded() {
23+
// See also https://github.com/rust-lang/rustfmt/issues/4874
24+
verify_mod_resolution(
25+
"tests/mod-resolver/issue-4874/main.rs",
26+
&[
27+
"tests/mod-resolver/issue-4874/bar/baz.rs",
28+
"tests/mod-resolver/issue-4874/foo/qux.rs",
29+
],
30+
);
31+
}
32+
33+
#[test]
34+
fn out_of_line_nested_inline_within_out_of_line() {
35+
// See also https://github.com/rust-lang/rustfmt/issues/5063
36+
verify_mod_resolution(
37+
"tests/mod-resolver/issue-5063/main.rs",
38+
&[
39+
"tests/mod-resolver/issue-5063/foo/bar/baz.rs",
40+
"tests/mod-resolver/issue-5063/foo.rs",
41+
],
42+
);
2543
}

tests/mod-resolver/issue-5063/foo.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
mod bar {
2+
mod baz;}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
fn baz() { }

tests/mod-resolver/issue-5063/main.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
fn main() {
2+
println!("Hello, world!");
3+
}
4+
5+
mod foo;

0 commit comments

Comments
 (0)