From 89b7f5f38260437db50ece8d48418f90bf1e42ec Mon Sep 17 00:00:00 2001 From: mahkoh Date: Fri, 22 May 2020 11:55:34 +0200 Subject: [PATCH] Fix module resolution in inner modules with paths (#4194) --- src/modules.rs | 17 +---------------- tests/target/inner-module-path/b.rs | 1 + tests/target/inner-module-path/c/d.rs | 1 + tests/target/inner-module-path/lib.rs | 10 ++++++++++ 4 files changed, 13 insertions(+), 16 deletions(-) create mode 100644 tests/target/inner-module-path/b.rs create mode 100644 tests/target/inner-module-path/c/d.rs create mode 100644 tests/target/inner-module-path/lib.rs diff --git a/src/modules.rs b/src/modules.rs index 29f7cb0ef91..23e68a7d425 100644 --- a/src/modules.rs +++ b/src/modules.rs @@ -56,8 +56,6 @@ enum SubModKind<'a, 'ast> { External(PathBuf, DirectoryOwnership, Cow<'ast, ast::Mod>), /// `mod foo;` with multiple sources. MultiExternal(Vec<(PathBuf, DirectoryOwnership, Cow<'ast, ast::Mod>)>), - /// `#[path = "..."] mod foo {}` - InternalWithPath(PathBuf), /// `mod foo {}` Internal(&'a ast::Item), } @@ -173,12 +171,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> { self.find_external_module(item.ident, &item.attrs, sub_mod) } else { // An internal module (`mod foo { /* ... */ }`); - if let Some(path) = find_path_value(&item.attrs) { - let path = Path::new(&*path.as_str()).to_path_buf(); - Ok(Some(SubModKind::InternalWithPath(path))) - } else { - Ok(Some(SubModKind::Internal(item))) - } + Ok(Some(SubModKind::Internal(item))) } } @@ -218,14 +211,6 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> { }; self.visit_sub_mod_after_directory_update(sub_mod, Some(directory)) } - SubModKind::InternalWithPath(mod_path) => { - // All `#[path]` files are treated as though they are a `mod.rs` file. - let directory = Directory { - path: mod_path, - ownership: DirectoryOwnership::Owned { relative: None }, - }; - self.visit_sub_mod_after_directory_update(sub_mod, Some(directory)) - } SubModKind::Internal(ref item) => { self.push_inline_mod_directory(item.ident, &item.attrs); self.visit_sub_mod_after_directory_update(sub_mod, None) diff --git a/tests/target/inner-module-path/b.rs b/tests/target/inner-module-path/b.rs new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/tests/target/inner-module-path/b.rs @@ -0,0 +1 @@ + diff --git a/tests/target/inner-module-path/c/d.rs b/tests/target/inner-module-path/c/d.rs new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/tests/target/inner-module-path/c/d.rs @@ -0,0 +1 @@ + diff --git a/tests/target/inner-module-path/lib.rs b/tests/target/inner-module-path/lib.rs new file mode 100644 index 00000000000..fb75d70cd93 --- /dev/null +++ b/tests/target/inner-module-path/lib.rs @@ -0,0 +1,10 @@ +// rustfmt-recursive: true + +#[path = "."] +mod a { + mod b; +} + +mod c { + mod d; +}