Skip to content

syntax: Bless mod.rs. #4116 #7926

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 25 additions & 12 deletions src/libsyntax/parse/parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3996,37 +3996,50 @@ impl Parser {
let prefix = prefix.dir_path();
let mod_path_stack = &*self.mod_path_stack;
let mod_path = Path(".").push_many(*mod_path_stack);
let dir_path = prefix.push_many(mod_path.components);
let file_path = match ::attr::first_attr_value_str_by_name(
outer_attrs, "path") {
Some(d) => {
let path = Path(d);
if !path.is_absolute {
mod_path.push(d)
dir_path.push(d)
} else {
path
}
}
None => mod_path.push(token::interner_get(id.name) + ".rs") // default
None => {
let mod_name = token::interner_get(id.name).to_owned();
let default_path_str = mod_name + ".rs";
let secondary_path_str = mod_name + "/mod.rs";
let default_path = dir_path.push(default_path_str);
let secondary_path = dir_path.push(secondary_path_str);
let default_exists = default_path.exists();
let secondary_exists = secondary_path.exists();
match (default_exists, secondary_exists) {
(true, false) => default_path,
(false, true) => secondary_path,
(false, false) => {
self.span_fatal(id_sp, fmt!("file not found for module `%s`", mod_name));
}
(true, true) => {
self.span_fatal(id_sp,
fmt!("file for module `%s` found at both %s and %s",
mod_name, default_path_str, secondary_path_str));
}
}
}
};

self.eval_src_mod_from_path(prefix,
file_path,
self.eval_src_mod_from_path(file_path,
outer_attrs.to_owned(),
id_sp)
}

fn eval_src_mod_from_path(&self,
prefix: Path,
path: Path,
outer_attrs: ~[ast::Attribute],
id_sp: span) -> (ast::item_, ~[ast::Attribute]) {

let full_path = if path.is_absolute {
path
} else {
prefix.push_many(path.components)
};
let full_path = full_path.normalize();
let full_path = path.normalize();

let maybe_i = do self.sess.included_mod_stack.iter().position |p| { *p == full_path };
match maybe_i {
Expand Down
15 changes: 15 additions & 0 deletions src/test/compile-fail/mod_file_disambig.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
// Copyright 2012 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.

mod mod_file_disambig_aux; //~ ERROR file for module `mod_file_disambig_aux` found at both

fn main() {
assert_eq!(mod_file_aux::bar(), 10);
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,4 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

// error-pattern:error opening

mod doesnotexist;
// xfail-test not a test. aux file
11 changes: 11 additions & 0 deletions src/test/compile-fail/mod_file_disambig_aux/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
// Copyright 2012 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.

// xfail-test not a test. aux file
2 changes: 1 addition & 1 deletion src/test/compile-fail/mod_file_not_exist.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

mod not_a_real_file; //~ ERROR not_a_real_file.rs
mod not_a_real_file; //~ ERROR file not found for module `not_a_real_file`

fn main() {
assert_eq!(mod_file_aux::bar(), 10);
Expand Down
18 changes: 18 additions & 0 deletions src/test/run-pass/mod_dir_implicit.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
// Copyright 2012 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.

// xfail-pretty
// xfail-fast

mod mod_dir_implicit_aux;

pub fn main() {
assert_eq!(mod_dir_implicit_aux::foo(), 10);
}
11 changes: 11 additions & 0 deletions src/test/run-pass/mod_dir_implicit_aux/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
// Copyright 2012 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.

pub fn foo() -> int { 10 }