Skip to content

Commit

Permalink
Fix ordering of nested modules in non-mod.rs mods
Browse files Browse the repository at this point in the history
Flatten relative offset into directory path before adding inline
(mod x { ... }) module names to the current directory path.

Fix #55094
  • Loading branch information
cramertj committed Oct 19, 2018
1 parent e7f5d48 commit ca35ca8
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 0 deletions.
11 changes: 11 additions & 0 deletions src/libsyntax/parse/parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6426,6 +6426,17 @@ impl<'a> Parser<'a> {
self.directory.path.to_mut().push(&path.as_str());
self.directory.ownership = DirectoryOwnership::Owned { relative: None };
} else {
// We have to push on the current module name in the case of relative
// paths in order to ensure that any additional module paths from inline
// `mod x { ... }` come after the relative extension.
//
// For example, a `mod z { ... }` inside `x/y.rs` should set the current
// directory path to `/x/y/z`, not `/x/z` with a relative offset of `y`.
if let DirectoryOwnership::Owned { relative } = &mut self.directory.ownership {
if let Some(ident) = relative.take() { // remove the relative offset
self.directory.path.to_mut().push(ident.as_str());
}
}
self.directory.path.to_mut().push(&id.as_str());
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
// compile-pass

mod x;

fn main() {}
5 changes: 5 additions & 0 deletions src/test/ui/non_modrs_mods_and_inline_mods/x.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
// ignore-test: not a test

pub mod y {
pub mod z;
}
1 change: 1 addition & 0 deletions src/test/ui/non_modrs_mods_and_inline_mods/x/y/z/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
// ignore-test: not a test

0 comments on commit ca35ca8

Please sign in to comment.